2009-10-07 13 views
9

मैं संदेशबॉक्स (या इसी तरह) का उपयोग कर एक संदेश मुद्रित करना चाहता हूं। मुझे यह भी पसंद आएगा कि बॉक्स पर बिल्कुल स्क्रीन पर कहां दिखाई देता है लेकिन संदेशबॉक्स के विवरण में कुछ भी नहीं मिल सकता है जो आपको स्थान पर नियंत्रण करने की अनुमति देता है। क्या मैं कुछ भुल गया? अगर संदेशबॉक्स का उपयोग नहीं किया जा सकता है, तो क्या कोई विकल्प है?संदेशबॉक्स का स्थान सेट करें?

कारणों में यहां जाने के लिए बहुत जटिल कारणों से, मैं एक ऐसा उत्तर पसंद करूंगा जिसमें मेरी अपनी खिड़की बनाने और कॉलबैक फ़ंक्शन के पते को पास करने में शामिल न हो।

उत्तर

12

चरण 1:

// global hook procedure 
HHOOK hhookCBTProc = 0; 

LRESULT CALLBACK pfnCBTMsgBoxHook(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if (nCode == HCBT_CREATEWND) 
    { 
    CREATESTRUCT *pcs = ((CBT_CREATEWND *)lParam)->lpcs; 

    if ((pcs->style & WS_DLGFRAME) || (pcs->style & WS_POPUP)) 
    { 
     HWND hwnd = (HWND)wParam; 

     // At this point you have the hwnd of the newly created 
     // message box that so you can position it at will 
     SetWindowPos(hwnd, ...); 
    } 
    } 

    return (CallNextHookEx(hhookCBTProc, nCode, wParam, lParam)); 
} 

चरण 2:: स्थापित करें/से पहले और संदेश बॉक्स दिखा के बाद हुक निकालें:

फँसाने के लिए संदेश बॉक्स का निर्माण एक सीबीटी हुक बनाएं
// set hook to center the message box that follows 
hhookCBTProc = SetWindowsHookEx(WH_CBT, 
           pfnCBTMsgBoxHook, 
           0, GetCurrentThreadId()); 

int sResult = MessageBox(hwndParent, pszMsg, pszTitle, usStyle); 

// remove the hook 
UnhookWindowsHookEx(hhookCBTProc); 
4

यदि मुझे किसी संदेशबॉक्स के लिए अतिरिक्त व्यवहार की आवश्यकता है तो मैंने हमेशा अपनी खिड़की बनाई और इसे मानक संदेश बॉक्स की तरह देखा। आप इसे एक बार सही करते हैं और आप इसे अन्य परियोजनाओं में हमेशा पुन: उपयोग कर सकते हैं।

1

आप इसे सीबीटी हुक प्रक्रिया के साथ कर सकते हैं। वीबी में ऐसा करने के तरीके पर एक एमएसडीएन लेख है लेकिन इसे C++ में परिवर्तित करना मुश्किल नहीं होगा।

http://support.microsoft.com/kb/180936

3

MessageBox एक मूल रूप से चूक का एक सेट है। उन्हें पसंद नहीं है? अपना खुद के लाएं। यदि आप अपनी सभी जटिलताओं के साथ एक असली खिड़की नहीं चाहते हैं, लेकिन संदेशबॉक्स बहुत प्रतिबंधित है, तो एक संवाद बनाएं।

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