zoukankan      html  css  js  c++  java
  • 让动态创建的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);

    }

  • 相关阅读:
    37.altium designer中的class和rules?
    36.Altium Designer(Protel)网络连接方式Port和Net Label详解
    35.在PCB中删除元件
    34.pad designer警告
    33.allegro中Autosilk top, Silkscreen top 和Assembly top三个什么区别(转)
    32.DDR2仿真结果
    31.DDR2问题3_waring?
    30.DDR2问题2_local_init_done为什么没拉高?
    29.DDR2问题1仿真模型文件
    lnmp 基础设置
  • 原文地址:https://www.cnblogs.com/lidabo/p/3605128.html
Copyright © 2011-2022 走看看