简介:我有一个从CWND派生的类(自定义窗口)。这个自定义类有一个单选按钮(CButton)和一堆其他静态控件。
问题:创建单选按钮时,它显示为灰色并单击它不会执行任何操作。 用于创建的代码非常简单:
m_radioButton->Create(_T("rButton1.1"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON , CRect(5,5,300,15), this,2001);
我尝试添加
ON_BN_CLICKED(2001,method())
事件,但没有被触发。
我也有ShowWindow()和EnableWindow()方法,但这也没有用。
问题:由于此类不是从CDialog派生的,因此DDX不可用。这可能是问题吗?有办法解决它吗?我的消息映射只有ON_BN_CLICKED以外的SIZE,CREATE和DESTROY。
欢迎任何建议。
SIDE NOTE :MFC新手在这里,非常感谢您的帮助。
研究:我发现只有这个相关stack overflow question,但这对我的情况没有帮助。还遇到了这个cool page on mfc subclassing,但它没有回答我的问题。
侧面问题:由于我没有得到任何答案,这种情况是不是很常见,如果我根本不从CWND派生出来并从CDialog或其他东西派生出来,这是根本错误的吗? / p>
答案 0 :(得分:0)
我尝试复制该方案,但无法重现。从CWnd派生不应该是任何问题。我在下面提供了示例代码,我创建了一个名为“CTestWindow”的自定义类,该类来自CWnd,并在CTestWindow的OnCreate()内创建一个功能区按钮。我可以单击单选按钮,方法()也按预期调用。
IMPLEMENT_DYNAMIC(CTestWindow,CWnd)
BEGIN_MESSAGE_MAP(CTestWindow, CWnd)
ON_WM_CREATE()
ON_BN_CLICKED(2001, method)
END_MESSAGE_MAP()
int CTestWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CButton *m_radioButton = new CButton;
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if(!m_radioButton->Create(_T("rButton1.1"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON , CRect(5,5,300,25), this,2001)){
return -1;
}
return 0;
}
void CTestWindow::method(){
AfxMessageBox(_T("I m clicked"));
}
查找以下用于创建自定义窗口实例的代码:
CString strMyClass;
try
{
strMyClass = AfxRegisterWndClass(
CS_VREDRAW | CS_HREDRAW,
::LoadCursor(NULL, IDC_ARROW),
(HBRUSH) ::GetStockObject(WHITE_BRUSH),
::LoadIcon(NULL, IDI_APPLICATION));
}
catch (CResourceException* pEx)
{
AfxMessageBox(_T("Couldn't register class! (Already registered?)"));
pEx->Delete();
}
if(m_wndTest.Create(strMyClass,_T("Custom Window"),WS_OVERLAPPEDWINDOW | WS_VISIBLE,CRect(0,0,400,400),this,200,NULL) == -1){
return;
}
m_wndTest.SetWindowPos(NULL,120,120,500,500,SWP_SHOWWINDOW);