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);

    }

  • 相关阅读:
    OpenJudge 2721 忽略大小写比较字符串大小
    Poj 2586 / OpenJudge 2586 Y2K Accounting Bug
    Poj 2109 / OpenJudge 2109 Power of Cryptography
    Poj 1328 / OpenJudge 1328 Radar Installation
    Poj 2965 The Pilots Brothers' refrigerator
    Poj 2503 / OpenJudge 2503 Babelfish
    Poj 2388 Who's in the Middle
    模板:cin.getline用法
    Poj 3094 Quicksum
    Charles-Mac安装、配置及苹果手机安装证书
  • 原文地址:https://www.cnblogs.com/lidabo/p/3605128.html
Copyright © 2011-2022 走看看