CAxWindow 与 CAxHostWindow

CAxWindow 与 CAxHostWindow 之间的联系, 通过跟踪调试,之间的关系是 CAxWindow 和 CAxHostWindow
    是同一个实例的不同表象.可由窗口的创建过程理清二者关系.首先 CAxWindow 继承自 CWindow 而不是
    CWindowImpl<>,创建的窗口的类是在AtlAxWinInit()中注册的类.其 WNDPROC 是
    AtlAxWindowProc, AtlAxWindowProc2.窗口消息均由 AtlAxWindowProc 处理.在 WM_CREATE 中创建
    CAxHostWindow 实例,只是创建了一个 CAxHostWindow,并没有创建任何窗口,没有窗口句柄,然后
    CAxHostWindow::SubclassWindow(hWnd);至此 CAxHostWindow 已经有了一个窗口句柄可以处理窗口消息,
    消息已经不再通过 AtlAxWindowProc 处理,而由 CAxHostWindow 自己的消息处理过程处理
    通过 BEGIN_MSG_MAP 实现.    如下这段代码不知何意.
        hRet = spUnk->QueryInterface(__uuidof(IAxWinHostWindow), (void**)&pAxWindow);
        if(FAILED(hRet))
            return -1;    // abort window creation
        ::SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD_PTR)pAxWindow);
    最后 CAxWindow 也已经创建成功.以后 CAxWindow::QueryHost 等方法最终都是调用到 CAxHostWindow 内部的实现.
    CAxWindow 看似有点像是从 CAxHostWindow 继承来.但是 CAxWindow 不能使用 CAxHostWindow 的任何public
    变量, CAxHostWindow通过 CAxHostWindow::SubclassWindow() 为CAxWindow 处理消息.CAxWindow 在前台,
    CAxHostWindow 在幕后,提供对 CAxWindow 的方法支持.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值