我希望通過大量的窗口和控件來改進我的代碼和文件結構。目前,我傾向於爲整個窗口或對話框實現一個頭文件和一個源文件。這對於小型項目來說效果不錯,但是現在已經到了這些實現開始達到1000-2000行的程度,這是乏味的瀏覽。構建Win32 GUI代碼
我的一個典型的源文件看起來像這樣:
static LRESULT CALLBACK on_create(const HWND hwnd, WPARAM wp, LPARAM lp) {
setup_menu(hwnd);
setup_list(hwnd);
setup_context_menu(hwnd);
/* clip */
return 0;
}
static LRESULT CALLBACK on_notify(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
const NMHDR* header = (const NMHDR*)lp;
/* At this point I feel that the control's event handlers doesn't
* necessarily belong in the same source file. Perhaps I could move
* each control's creation code and event handlers into a separate
* source file? Good practice or cause of confusion? */
switch (header->idFrom) {
case IDC_WINDOW_LIST:
switch (header->code) {
case NM_RCLICK:
return on_window_list_right_click(hwnd, wp, lp);
/* clip */
}
}
}
static LRESULT CALLBACK wndmain_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
switch (msg) {
case WM_CREATE:
return on_create(hwnd, wp, lp);
case WM_CLOSE:
return on_close(hwnd, wp, lp);
case WM_NOTIFY:
return on_notify(hwnd, wp, lp);
/* It doesn't matter much how the window proc looks as it just forwards
* events to the appropriate handler. */
/* clip */
default:
return DefWindowProc(hwnd, msg, wp, lp);
}
}
但現在作爲窗口有很多更多的控制,反過來這些控件都有自己的消息處理程序,然後還有的菜單中點擊處理程序,等等......我迷路了,我真的需要建議如何以一個好的和明智的方式構建這個混亂。
我試圖找到結構化Win32代碼的很好的開源示例,但由於有數百個文件,並且在看起來與GUI相關的每個文件中,我只是變得更加困惑,而Win32 GUI代碼似乎到目前爲止已被封裝遠。當我終於找到CreateWindowEx
聲明時,窗口proc無處可找。
任何有關如何構建所有的代碼,同時保持理智的建議將不勝感激。
謝謝!
我不想使用任何庫或框架,因爲我發現Win32 API對於學習有意義且有價值。
任何洞察你如何構建自己的GUI代碼也許可以作爲靈感。
你喜歡使用至少C++類還是隻是c? – 2010-03-30 14:27:13
你已經達到了必然的結論,你需要一個C++類庫來保持你的代碼的組織。 – 2010-03-30 14:48:52
luca - 我正在探索C,這就是我用於相關項目的原因。謝謝。 – haste 2010-03-30 14:49:37