• 让动态创建的ActiveX控件响应Windows消息


    当我们通过

    CWnd::CreateControl()

    动态创建

    ActiveX

     

    控件时,

    Windows

    消息并不会被发送给我

    们的由

     

    CWnd

    派生得控件类。例如,即使我们为

    WM_KILLFOCUS

     

    消息创建了句柄,这个句柄

     

    也是不会被调用的。(不信你试试

    :))

    引起这个问题的原因时,

    CWnd::CreateControl()

    并不会使我控件的

     

    HWND

    子类化。

    知道了原因,要解决问题就不难了。我们只要在控件创建之后使它子类化就行了。通过一下步

    骤可以实现:

    1.

    当然是添加控件啦,先生成控件的

    C++

    包容类。

    2.

    再要创建控件的类中声明成员变量,此成员变量是包容类的指针对象。

    3.

    在包容类的头文件中添加:

    //{{AFX_MSG(CMyClass)

    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

    CMyClass

    是实际的类名。

    4.

    在包容类的

    CPP

    文件的

    #include

    段下面添加:

    BEGIN_MESSAGE_MAP(CMyClass,

    CWnd)

    //{{AFX_MSG_MAP(CMyClass)

    //}}AFX_MSG_MAP

    END_MESSAGE_MAP()

    5.

     

    删除工程目录下的

    .clw

     

    文件,在工程中打开

    ClassWizard

    ,先选

    yes

    ,在选

    Add

    All

    6.

    现在你就可以使用

    ClassWizard

    为控件包容类添加消息映射和处理函数了。

    完成这些修改后,你必须创建控件并且使它子类化,下面是个例子:

    void

    CSDIApp2View::OnInitialUpdate()

    {

    CView::OnInitialUpdate();

    m_pFlexGrid

    =

    new

    CMSFlexGrid;

    CRect

    rect;

    GetClientRect(&rect);

    m_pFlexGrid->Create(NULL,

    WS_CHILD

    |

    WS_VISIBLE,

    rect,

    this,

    IDC_FLEXGRID);

    HWND

    hWnd

    =

    m_pFlexGrid->Detach();

    m_pFlexGrid->SubclassWindow(hWnd);

    }

  • 相关阅读:
    12-29 批量删除
    12-29 注册审核
    12-25造数据库面向对象
    12-23 会话保持
    2016-12-19 php修改数据库数据
    12-18数据访问
    12-16php测试题
    1027 制作表格
    1027 超链接
    1027 HTML
  • 原文地址:https://www.cnblogs.com/lidabo/p/3605128.html
Copyright © 2020-2023  润新知