在VC中,让动态创建的ActiveX控件响应Windows消息。
2001-10-19 11:57
429 查看
当我们通过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);
}
引起这个问题的原因时,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);
}
相关文章推荐
- 在VC中,让动态创建的ActiveX控件响应Windows消息[转]
- 让动态创建的ActiveX控件响应Windows消息
- VC6中动态创建控件并响应其消息(button/combo)
- VC中动态添加控件,并且响应控件的消息
- MFC中动态创建多个按钮并实现其消息响应
- MFC动态按钮的创建及其消息响应(自定义消息)
- MFC动态创建控件及添加消息响应
- MFC 动态创建按钮及响应按钮消息
- MFC动态创建按钮及添加消息响应
- 动态创建的list control添加消息响应
- 【转载】MFC动态创建控件及其消息响应函数
- MFC动态创建对话框中的按钮控件并创建其响应消息
- 动态创建的list control添加消息响应
- VC++6.0动态创建按钮并响应其消息
- 动态创建的CTreeCtrl控件,响应鼠标左键,右键按下消息
- 动态创建按钮及添加消息响应
- C++ 动态创建按钮及 按钮的消息响应
- 面向对象,掌握windows应用程序的创建过程:为应用程序添加消息及响应
- MFC动态创建控件及添加消息响应
- MFC动态创建按钮及添加消息响应