क्या WM_NEXTDLGCTL गैर-संवाद नियंत्रण माता-पिता के साथ उपयोग किया जा सकता है?
मुझे नहीं लगता कि आप इसे गैर-संवाद माता-पिता विंडो (कम से कम मूल विंडो में कोई बदलाव नहीं) में उपयोग कर सकते हैं, इसका कारण यह है कि इसे DefDlgProc
के अंदर लागू किया गया है। तो इस संदेश को काम करने के लिए आपकी अन्य गैर-संवाद विंडो को इसे कॉल करना होगा।
यह बोली मैं द ओल्ड नई बात में पाया है है: विंडोज के विकास के दौरान व्यावहारिक विकास: DefDlgProc अंदर क्या होता है?
WM_NEXTDLGCTL संदेश के लिए टिप्पणी निरीक्षण के रूप में, DefDlgProc समारोह सभी आंतरिक संवाद प्रबंधक बहीखाता को अद्यतन करने, निर्णय लेने से जो बटन डिफ़ॉल्ट, वह सब अच्छी चीजें होना चाहिए द्वारा WM_NEXTDLGCTL संदेश संभालती है।
सेट डिफ़ॉल्ट नियंत्रण पहचानकर्ता
यह करने के लिए इसे भेजने चाहिए:
एक और कारण है कि यह केवल संदेश संवाद है तथ्य यह है कि यह (WM_NEXTDLGCTL के लिए MSDN से उद्धरण) है DM_SETDEFID है, जो के रूप में परिभाषित किया गया है:
#define DM_SETDEFID (WM_USER+1)
तो यह WM_USER है, और इस तरह के रूप में यह प्रयोग किया जा सकता गैर संवाद विंडो पर किसी अन्य उद्देश्य के लिए (इस तथ्य का भी रेमंड कैन्स बुक में उल्लेख किया गया है)। दिलचस्प बात यह है कि इस पुस्तक के अनुसार IsDialogMessage
भी आपकी विंडो में DM_SETDEFID/DM_GETDEFID भेजता है। तो यदि आप अपने अंदर नेविगेशन जैसे टीएबी का उपयोग करना चाहते हैं तो गैर डायलॉग विंडो (डायलॉग कोड का उपयोग करके), आपको कुछ नियमों का पालन करना होगा, आप इन्हें अंदर पढ़ सकते हैं: What happens inside IsDialogMessage?
उपरोक्त पुस्तक के।
while (GetMessage(&msg, NULL, 0, 0)) {
if (IsDialogMessage(hwnd, &msg)) {
/* Already handled by dialog manager */
} else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
इसलिए यदि आप न अपने माता पिता खिड़कियों कोड में कई परिवर्तन करना चाहते हैं, तो मुझे डर है कि तुम भाग्य से बाहर हैं हूँ: यह निम्न संदेश पाश उपयोग करने के लिए अन्य लोगों के अलावा मतलब है।
यह काफी दृढ़ता से लगता है, खासकर जब विंडो क्लास निजी संदेश ('WM_USER + x') शामिल होते हैं। फिर भी, [DM_SETDEFID] के लिए प्रलेखन (https://msdn.microsoft.com/en-us/library/windows/desktop/ms645413.aspx) नोट्स: * "डिफ़ॉल्ट पुश बटन सेट करने के लिए, फ़ंक्शन ** भेज सकता है WM_GETDLGCODE ** और ** BM_SETSTYLE ** निर्दिष्ट नियंत्रण और वर्तमान डिफ़ॉल्ट पुश बटन पर संदेश। "* तो सिद्धांत में,' DM_SETDEFID' को कड़ाई से जरूरी नहीं है। जबकि मुझे लगता है कि आप सही हैं, तर्क में अभी भी एक अंतर है। – IInspectable