看各位前輩的代碼, 如果將動態生成的控制元件放在當前dialog類中,可以設定事件, 但如果放在dialog里面的子容器比如group box, 事件就失效了,
BEGIN_MESSAGE_MAP(Cbms_setupDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CLOSE()
ON_COMMAND_RANGE(C_BTN_LINE_ID, C_BTN_LINE_ID + 99, &Cbms_setupDlg::OnLineItemClick)
ON_CONTROL_RANGE(BN_CLICKED,C_BTN_AREA_ID, C_BTN_AREA_ID + 2, &Cbms_setupDlg::OnAreaItemClick)
ON_BN_CLICKED(IDCANCEL, &Cbms_setupDlg::OnBnClickedCancel)
END_MESSAGE_MAP()
...
size_t lvnBtnCount = lvvsAreas.size();
mAreaBtns = new CButton[lvnBtnCount];
DWORD dwStyle = WS_CHILD | WS_VISIBLE | BS_COMMANDLINK;
string * lvlpsAreas = &lvvsAreas[0];
for (size_t i = 0; i < lvnBtnCount; i++) {
wstring lvsTitle = freestyle::StrUtils::s2ws(lvlpsAreas[i]);
mAreaBtns[i].Create(lvsTitle.data(), dwStyle, CRect(20 + 250 * i, 30, 180 + 250 * i, 70), &cmgArea, C_BTN_AREA_ID + i);
+ i);
}
如上代碼,如果將parent的this換成cmgArea (group box), 事件就失效了, 應該是BEGIN_MESSAGE_MAP這里要額外處理的, 不知道怎么辦?
uj5u.com熱心網友回復:
我也每及具體做過。不過建議你在百度搜“MFC 動態生成控制元件 訊息映射 事件處理”
uj5u.com熱心網友回復:
每及→沒uj5u.com熱心網友回復:
不會吧? 我就是找了很久,資料都沒涉及到具體應用, 理應用容器將其裝起來是最常用的...
uj5u.com熱心網友回復:
據我所知,groupbox里面不是通常放RadioButton或CheckBox嗎?uj5u.com熱心網友回復:
不必 “將parent的this換成cmgArea (group box)”uj5u.com熱心網友回復:
控制元件的事件一般傳遞給其父視窗, 如果你把父視窗指向的是Group控制元件,自然應該由Group控制元件處理uj5u.com熱心網友回復:
但是我想用group box將動態生成的控制元件分組管理 , 如果不將this換成groupbox的類變數, 還有什么好的辦法?
uj5u.com熱心網友回復:
如果我想用group box將動態控制元件分組管理, 一般應該怎么處理呢?
uj5u.com熱心網友回復:
一樣的了, radiobutton/checkbox被安置于groupbox里面應該也不能接受訊息的, 現在苦惱的是不知道怎么寫那個訊息映射.
昨晚睡覺前突然想起要不看看自動生成的代碼是怎樣的, 今天起床就在dialog里面拉了一個group box , 然后試圖再拉一個button到group box里面, 但是怎么弄button的parent還是這個dialog .
剛從delphi轉到vc不久, 這個真是比較難適應....
uj5u.com熱心網友回復:
簡單一點的操作, 不要動態創建, 在資源編輯器中編輯好,布局比較容易掌控uj5u.com熱心網友回復:
button的內容及數量來自服務器...
而且,請問怎么將button/checkbox這些控制元件加入到group box容器里面?
uj5u.com熱心網友回復:
派生你的 groupbox (其實是 static)轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/92587.html
標籤:界面
上一篇:USB驅動安裝問題
