2010-03-30 154 views
5

我希望通過大量的窗口和控件來改進我的代碼和文件結構。目前,我傾向於爲整個窗口或對話框實現一個頭文件和一個源文件。這對於小型項目來說效果不錯,但是現在已經到了這些實現開始達到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代碼也許可以作爲靈感。

+0

你喜歡使用至少C++類還是隻是c? – 2010-03-30 14:27:13

+1

你已經達到了必然的結論,你需要一個C++類庫來保持你的代碼的組織。 – 2010-03-30 14:48:52

+0

luca - 我正在探索C,這就是我用於相關項目的原因。謝謝。 – haste 2010-03-30 14:49:37

回答

5

對於初學者,我會看看message crackerswindowsx.h;他們會幫助您在窗口過程中編寫乏味的案例陳述,並且在函數名稱中提供了一定的規範。

+0

乍一看,這看起來很有趣。我今晚晚些時候會詳細閱讀。謝謝。 – haste 2010-03-30 14:57:47

+0

我只是在win32世界冒險自己。感謝這個,或者它會在幾個月的時間裏要求重構。 – 2011-02-23 22:16:41