2011-11-18 17 views
5

संसाधनों के बिना मैं अपने यूआई को CreateWindow() और CreateWindowEx(), और WndProc() की जटिल घटनाओं के साथ अपनी घटनाओं को संसाधित करने के लिए बना सकता हूं।मैं Win32 में संवाद संसाधनों का उपयोग कैसे करूं?

मैंने देखा कि अगर मैं संसाधन दृश्य में राइट-क्लिक करता हूं और "संसाधन जोड़ें" पर क्लिक करता हूं, तो मैं सभी नियंत्रणों के साथ एक संवाद बॉक्स खींच सकता हूं। यह मुझे बड़ी मात्रा में बचाएगा यदि मैं इंटरफ़ेस खींच सकता हूं जैसे कि मैं आमतौर पर सी # के साथ करता हूं।

संसाधन संपादक के साथ इंटरफ़ेस तैयार करने के बाद, मैं कोड से विंडो कैसे बना सकता हूं? क्या कोई बटन के साथ एक बहुत ही सरल उदाहरण प्रदान कर सकता है, और दिखाएं कि उस बटन पर WM_COMMAND ईवेंट को कैसे प्रबंधित करें?

इसके अलावा, क्या आम तौर पर लोग जीयूआई कैसे बनाते हैं? इस तरह से करने के लिए लचीला में कोई नुकसान है? यहां तक ​​कि सी # में भी मुझे अपने कोड-जेनरेट किए गए यूआई के साथ डिजाइनर से उत्पन्न यूआई को पूरक करना होता है, लेकिन अधिकांश समय मैं डिजाइनर का उपयोग करने में काफी खुश हूं।

उत्तर

5

संसाधन संपादक में संवाद बनाने के बाद, CreateDialog (प्रणाली का डायलॉग, आप मैन्युअल रूप से संदेशों प्रेषण करने के लिए बस जब आप CreateWindow का उपयोग पसंद की जरूरत है) पर कॉल करें या DialogBox (मॉडल संवाद; समारोह वापस नहीं करता है जब तक आप संवाद को बंद। यह आपके लिए प्रेषण करता है) संवाद दिखाने के लिए। जैसे ही आप विंडो क्लास में रजिस्टर क्लास में पास करते हैं, आप डायलॉग कॉल के लिए उन कार्यों में संवाद प्रो पास करते हैं। डायलॉगप्रोक का एक उदाहरण यह पसंद करता है:

BOOL DialogProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam){ 
    switch(iMessage){ 
    case WM_COMMAND: 
     switch(LOWORD(wParam)){ 
     case BTOK: 
      MessageBox(hDlg, "Hello, World!", NULL, NULL); 
      return TRUE; 
      break; 
     } 
     break; 
    } 
    return FALSE; 
} 

यह एक संवाद बनाने का एक मूल तरीका है। अधिक परिष्कृत विधि में आम तौर पर ओओपी शामिल होता है, आमतौर पर प्रत्येक संसाधन (बटन, विंडो, आदि) को सी ++ ऑब्जेक्ट या एमएफसी का उपयोग करके लपेटता है।

1

यदि आपने कुछ बटन पर अपना बटन या कोई नियंत्रण रखा है, तो वह नियंत्रण पहले से ही बनाई गई स्थिति में है। इस संवाद पर इन बाल नियंत्रणों के संदेशों को संभालने के लिए, आपको उस कक्षा में ऑनकॉमंड विधि को ओवरराइड करना होगा जो आपके संवाद को कार्यान्वित कर रहा है।

उदाहरण के लिए:

//CDialog_ControlDlg is my Dialog class derived from CDialog 

//IDC_BUTTON_SAMPLE is the ID of the button which was palced on the dialog in the resource Editor.. 

BOOL CDialog_ControlDlg::OnCommand(WPARAM wParam,LPARAM lparam){ 
     int iNotiFicationMsg=HIWORD(wParam);//This is thenotification Msg from the child control 
     int iCommandId=LOWORD(wParam);//And Control ID of the Child control which caused that Msg 
     BOOL result=FALSE; 
     switch(iCommandId){ 
    case IDC_BUTTON_SAMPLE: 
     if(iNotiFicationMsg==BN_CLICKED) 
     { 
     //Your Code for handling this type of Msg for this control.. 

     } 
     break; 
    default: 
    { 
     //Specific Code; 

    } 

    return result; 
} 

} 
संबंधित मुद्दे