MFC 消息映射的有关问题
MFC 消息映射的问题
各位大虾最近遇到一个比较棘手的问题
我自己定义了一个控件,继承自CWnd,如下:
class MyCtrl : public CWnd
{
......
public:
CButton* myBtn;
afx_msg void OnMyBtn();
......
};
我的想法是让这个控件直接拖动到界面上就可以用,但是在定义消息映射时发现
ON_BN_CLICKED(ID,OnMyBtn)中的ID只能是静态的
这样就造成如果我想在一个界面中使用多个自定义的控件MyCtrl我就得在映射表中添加多个
ON_BN_CLICKED(IDx,OnMyBtn)
请问有没有一种好的方法可以解决这个问题
------解决方案--------------------
做成ActiveX控件,加载到控件面板上,就像VC中的按钮控件一样托进来使用。
------解决方案--------------------
在父窗口中添加WM_COMMAND响应
BOOL MyCtrl::OnCommand( WPARAM wParam, LPARAM lParam )
{
UINT nID = LOWORD(wParam);
UINT nNotifyCode = HIWORD(wParam);
if(myBtn && nID == myBtn->GetDlgCtrlID())
{
OnMyBtn();
return TRUE;
}
return CWnd::OnCommand(wParam, lParam);
}
各位大虾最近遇到一个比较棘手的问题
我自己定义了一个控件,继承自CWnd,如下:
class MyCtrl : public CWnd
{
......
public:
CButton* myBtn;
afx_msg void OnMyBtn();
......
};
我的想法是让这个控件直接拖动到界面上就可以用,但是在定义消息映射时发现
ON_BN_CLICKED(ID,OnMyBtn)中的ID只能是静态的
这样就造成如果我想在一个界面中使用多个自定义的控件MyCtrl我就得在映射表中添加多个
ON_BN_CLICKED(IDx,OnMyBtn)
请问有没有一种好的方法可以解决这个问题
------解决方案--------------------
做成ActiveX控件,加载到控件面板上,就像VC中的按钮控件一样托进来使用。
------解决方案--------------------
在父窗口中添加WM_COMMAND响应
BOOL MyCtrl::OnCommand( WPARAM wParam, LPARAM lParam )
{
UINT nID = LOWORD(wParam);
UINT nNotifyCode = HIWORD(wParam);
if(myBtn && nID == myBtn->GetDlgCtrlID())
{
OnMyBtn();
return TRUE;
}
return CWnd::OnCommand(wParam, lParam);
}