zoukankan      html  css  js  c++  java
  • 新建的COM组件中没有 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)

    创建ATL组件之后,添加简单ATL对象,添加对话框资源,随后发现没有m_hWnd句柄,不响应初始化函数。

    于是重新创建ATL组件,之后添加ATL控件,添加对话框资源,有m_hWnd句柄,但仍然不响应初始化函数,却有其它几乎所有的消息映射,这就怪了!

    翻开旧工程时,发现消息映射中 

    CHAIN_MSG_MAP(CComCompositeControl<T>)  //旧

    与新建的工程有差别

    CHAIN_MSG_MAP(CComControl<T>)  //新

    于是查ccomcontrol类型,发现新大陆:

    对话框具有m_hWnd句柄与

    public CAxDialogImpl<T>,

    并没有关系

    而是由于继承了

    public CComControl<T>

    同时

    public CComCompositeControl<T>

    是从CComControl<T> 继承而来,并且此类用法极具技巧性,见前一篇随笔。

    将消息链换成 CComCompositeControl<T>后,可以在资源界面添加WM_INITDIALOG响应函数了并可见该类中有oninitdialog的实现

    但遗憾的是仍然不能响应该映射,OnSize虽之前就能添加响应函数,但也未能响应。

    此时想起了构造函数中的 bWindosOnly的变量,在构造中添加代码

    m_bWindowOnly = TRUE;
    CalcExtent(m_sizeExtent);

    此时OnSize能正常响应,但WM_INITDIALOG仍不能响应

    将CHAIN_MSG_MAP(CComCompositeControl<T>)移至其它消息映射下方 

    组件正常响应OnInitDialog以及OnSize了。

    啊!咆哮!

  • 相关阅读:
    identityser4 samesit 问题
    mysql 8 root密码重置
    OutSystems学习笔记。
    获取两个List中的不同元素,4种方法,逐步优化,学习使用
    java 配置在.properties文件中的常量
    java POST 传值 加签 验证
    springboot jpa 多条件查询(多表)
    java代码行数统计工具类
    Map集合遍历的4种方法
    springboot jpa 多条件查询(单表)
  • 原文地址:https://www.cnblogs.com/ice-arrow/p/11727799.html
Copyright © 2011-2022 走看看