[英]MFC: RadioButton not working(grayed out) in a class subclassed from CWnd
簡介 :我有一個從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。
歡迎任何建議。
側面注意 :MFC新手在這里,非常感謝您的幫助。
研究 :我發現只有這個相關的堆棧溢出問題,但這對我的情況沒有幫助。 還發現了關於mfc子類化的這個很酷的頁面,但它沒有回答我的問題。
側面問題 :由於我沒有得到任何答案,這種情況是不是很常見,如果我根本不是從CWND派生出來並從CDialog或其他東西派生出來的話,這根本就是錯誤的嗎?
我試圖復制場景,但無法重現。 從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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.