本文共 1056 字,大约阅读时间需要 3 分钟。
当我们通过CWnd::CreateControl()动态创建时,消息并不会被发送给我们的由CWnd派生得控件类。例如,即使我们为WM_KILLFOCUS消息创建了句柄,这个句柄也是不会被的。(不信你试试 :))
引起这个问题的原因时,CWnd::CreateControl()并不会使我控件的HWND子类化。
知道了原因,要解决问题就不难了。我们只要在控件创建之后使它子类化就行了。通过一下步骤可以实现:
1.当然是添加控件啦,先生成控件的C++包容类。
2.再要创建控件的类中声明成员变量,此成员变量是包容类的指针。
3.在包容类的头中添加:
//{
{AFX_MSG(CMyClass)//}}AFX_MSGDECLARE_MESSAGE_MAP()CMyClass是实际的类名。
4.在包容类的CPP文件的#include段下面添加:
BEGIN_MESSAGE_MAP(CMyClass, CWnd)
//{ {AFX_MSG_MAP(CMyClass) //}}AFX_MSG_MAPEND_MESSAGE_MAP()5.删除工程目录下的.clw文件,在工程中打开ClassWizard,先选yes,在选Add All。
6.现在你就可以使用ClassWizard为控件包容类添加消息映射和处理了。
完成这些修改后,你必须创建控件并且使它子类化,下面是个例子:
void CSDIApp2View::OnInitialUpdate()
{ CView::OnInitialUpdate();m_pFlexGrid = new CMlexGrid;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);}来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-1007385/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10748419/viewspace-1007385/