2010-03-30 41 views
5

मैं बड़ी संख्या में विंडोज़ और नियंत्रणों के साथ बड़ी Win32 परियोजनाओं में अपना कोड और फ़ाइल संरचना सुधारना चाहता हूं। वर्तमान में, मेरे पास एक विंडो या संवाद के पूरे कार्यान्वयन के लिए एक हेडर और एक स्रोत फ़ाइल है। यह छोटी परियोजनाओं के लिए ठीक काम करता है, लेकिन अब यह उस बिंदु पर आया है जहां ये कार्यान्वयन 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 कोड अब तक encapsulated लगता है दूर। और जब मुझे अंत में CreateWindowEx कथन मिलता है, तो विंडो प्रो कहीं भी नहीं मिलती है।

शेष शेष के दौरान सभी कोड को कैसे व्यवस्थित करने के बारे में कोई सलाह बहुत सराहना की जाएगी।

धन्यवाद!

मैं किसी भी पुस्तकालय या ढांचे का उपयोग नहीं करना चाहता क्योंकि मुझे Win32 API दिलचस्प और सीखने के लिए मूल्यवान लगता है।

कोई भी अंतर्दृष्टि कि आप अपना खुद का जीयूआई कोड कैसे बनाते हैं, शायद प्रेरणा के रूप में कार्य कर सकते हैं।

+0

क्या आप कम से कम सी ++ कक्षा या सिर्फ सी का उपयोग करना चाहते हैं? –

+1

आप अपरिहार्य निष्कर्ष तक पहुंचे हैं कि आपको अपना कोड व्यवस्थित रखने के लिए एक सी ++ कक्षा पुस्तकालय की आवश्यकता होगी। –

+0

लुका - मैं वर्तमान में सी की खोज कर रहा हूं, और यही वह है जो मैं संबंधित परियोजनाओं के लिए उपयोग करता हूं। धन्यवाद। – haste

उत्तर

5

स्टार्टर्स के लिए, मैं message crackerswindowsx.h में एक नज़र डालेगा; वे आपको आपकी खिड़की की प्रक्रियाओं में कड़े केस स्टेटमेंट लिखने से बचाएंगे, और वे फ़ंक्शन नामों में एक निश्चित अनुशासन का सुझाव देते हैं।

+0

यह पहली नज़र में दिलचस्प लग रहा है। मैं इस शाम को बाद में पूरी तरह से पढ़ूंगा। धन्यवाद। – haste

+0

मैं सिर्फ Win32 दुनिया में खुद को रोमांचित कर रहा था। इसके लिए धन्यवाद या यह कुछ महीनों के समय में एक रिफैक्टरिंग के लिए बुलाया होगा। –