非常规创建拆分窗口的方法

一:常规方法

重写CMainFrame::OnCreateClient

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)

{

    CRect rcClient;

    GetClientRect( &rcClient );

    CSize size( rcClient.Width() / 2, rcClient.Height() / 2 );

 

    // 创建静态拆分窗口

    m_wndSplitter.CreateStatic( this, 1, 2 );

    m_wndSplitter.CreateView( 0, 0, RUNTIME_CLASS( CEditView ), size, pContext );

    m_wndSplitter.CreateView( 0, 1, RUNTIME_CLASS( CEditView ), size, pContext );

 

    // 必须返回TRUE

    return TRUE;

    return CFrameWnd::OnCreateClient(lpcs, pContext);

}

 

如果没有重写此函数,则MFC框架将调用

return CFrameWnd::OnCreateClient(lpcs, pContext);

这导致应用程序的主视图类将在此调用中,通过DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE宏设置的参数信息,调用CreateObject以动态创建。

 

由于上面的函数必须返回TRUE(如果仍返回框架产生的代码,应用程序视图类会被创建,而你自己分割的视图将不会再被看到。),这将不会引起应用程序视图类的动态创建,所以不要指望主视图类的构造函数会被调用,当然你熟悉的OnInitialUpdate也不会再调用。

 二:非常规方法

既保存拆分视图,又要能使用Doc/View结构。

方法如下:重写主视图类的Create方法。

框架默认产生的过程如下:

BOOL CSplitView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)

{

    return CView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);

}

稍做修改即可:

BOOL CSplitView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)

{

    BOOL bRes = CView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);

    int nWidth = rect.right - rect.left;

    int nHeihgt = rect.bottom - rect.top;

    CSize size( nWidth / 2,nHeihgt / 2 );

    // 创建静态拆分窗口

    m_wndSplitter.CreateStatic( this, 2, 2 );

    m_wndSplitter.ModifyStyle( WS_BORDER, 0 );

    m_wndSplitter.ModifyStyleEx( WS_EX_OVERLAPPEDWINDOW, 0 );

    m_wndSplitter.CreateView( 0, 0, RUNTIME_CLASS( CEditView ), size, pContext );

    m_wndSplitter.CreateView( 0, 1, RUNTIME_CLASS( CEditView ), size, pContext );

    m_wndSplitter.CreateView( 1, 0, RUNTIME_CLASS( CEditView ), size, pContext );

    m_wndSplitter.CreateView( 1, 1, RUNTIME_CLASS( CEditView ), size, pContext );

    return bRes;

}

void CSplitView::OnSize(UINT nType, int cx, int cy)

{

    CView::OnSize(nType, cx, cy);

    if ( GetSafeHwnd() != NULL && ::IsWindow( m_wndSplitter.m_hWnd ) )

    {

        m_wndSplitter.MoveWindow( 0, 0, cx, cy );

    }

}

多角色体系 支持管理员、商家、消费者三种角色,权限分级管控: 管理员:负责平台整体配置、用户审核、数据监控等全局操作。 商家:管理店铺信息、发布商品、处理订单、回复评价等。 消费者:浏览商品、加入购物车、下单支付、评价商品等。 实现用户注册(手机号 / 邮箱验证)、登录(支持密码 / 验证码 / 第三方登录)、个人信息管理(头像、收货地址、密码修改)。 权限精细化控制 商家仅能管理自家店铺及商品,消费者仅能查看和购买商品,管理员拥有全平台数据访问权限。 二、商品管理功能 商品信息维护 商家可发布商品:填写名称、分类(如服饰、电子产品)、子类别(如手机、笔记本)、规格(尺寸、颜色、型号)、价格、库存、详情描述(图文)、物流信息(运费、发货地)等。 支持商品上下架、库存调整、信息编辑,系统自动记录商品状态变更日志。 商品分类与搜索 按多级分类展示商品(如 “数码产品→手机→智能手机”),支持自定义分类体系。 提供智能搜索功能:按关键词(名称、品牌)搜索,支持模糊匹配和搜索联想;结合用户浏览历史对搜索结果排序(优先展示高相关度商品)。 商品推荐 基于用户浏览、收藏、购买记录,推荐相似商品(如 “浏览过该商品的用户还买了…”)。 首页展示热门商品(销量 TOP10)、新品上架、限时折扣等推荐列表。 三、订单与交易管理 购物车与下单 消费者可将商品加入购物车,支持修改数量、选择规格、移除商品,系统自动计算总价(含运费、折扣)。 下单流程:确认收货地址→选择支付方式(在线支付、货到付款)→提交订单→系统生成唯一订单号。 订单处理流程 订单状态跟踪:待支付→已支付→商家发货→物流运输→消费者收货→订单完成,各状态变更实时通知用户。 商家端功能:查看新订单提醒、确认发货(填写物流单号)、处理退款申请(需审核理由)。 消费者端功能:查看订单详情、追踪物流、申请退款 / 退货、确认收货。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值