आपको ब्रश बनाने और उसका ट्रैक रखने की आवश्यकता है। फिर आप अपने कोड स्निपेट में return 0
के बजाय इस ब्रश को वापस कर देते हैं। एक बार ब्रश की आवश्यकता नहीं होने पर आपको इसे हटाना होगा। यह आमतौर पर WM_DESTROY
संदेश के जवाब में किया जाता है।
अपने मामले में आप स्टॉक ब्रश का उपयोग कर बुलेट को चकमा दे सकते हैं, जो मैं सुझाता हूं।
केवल पढ़ने के लिए मोड में, संपादित करें नियंत्रण WM_CTLCOLOREDIT
के बजाय WM_CTLCOLORSTATIC
का जवाब है, तो आप ठीक ढंग से इस संदेश को संभाल करना होगा:
case WM_CTLCOLORSTATIC:
{
if((HWND)lParam == GetDlgItem(hwnd, IDC_EDIT_IN))
{
SetBkMode((HDC)wParam, TRANSPARENT);
SetTextColor(hdc, RGB(255, 255, 255));
return (LRESULT)((HBRUSH)GetStockObject(BLACK_BRUSH));
// if edit control is in dialog procedure change LRESULT to INT_PTR
}
else // this is some other static control, do not touch it!!
return DefWindowProc(hwnd, message, wParam, lParam);
}
पेंटिंग जब संपादित करें/स्थिर नियंत्रण, आप चित्र के लिए 3 उपलब्ध भाग होते हैं:
- पाठ रंग
- पाठ पृष्ठभूमि
- नियंत्रण के बा ckground
आदेश में वांछित रंग आप इच्छित रंग (विंडो प्रक्रिया के लिए return (LRESULT)someBrush
, या return (INT_PTR)someBrush
संवाद बॉक्स के लिए) के साथ ब्रश लौटना चाहिए में पूरे नियंत्रण पेंट करने के लिए।
SetBkColor
को आपका कॉल पाठ पृष्ठभूमि है, जो है अलग नियंत्रण की पृष्ठभूमि का रंग से रंग सेट करता है। यही कारण है कि हम SetBkMode
को TRANSPARENT
पैरामीटर के साथ कहते हैं, "कहें" कि हम टेक्स्ट पृष्ठभूमि को नियंत्रण की पृष्ठभूमि से मिलान करना चाहते हैं।
आपके मामले में मैंने स्टॉक ब्रश का उपयोग किया है, क्योंकि आपको इसका ट्रैक रखने की आवश्यकता नहीं है, और न ही आपको इसकी आवश्यकता होने के बाद इसे हटाने की आवश्यकता है।
फिर भी, ऐसे मामले हो सकते हैं जब आप कुछ अन्य रंग चाहते हैं। उस मामले में आप यहाँ क्या करना होगा क्या है:
- वैश्विक
HBRUSH
चर या अपने खिड़की/संवाद प्रक्रिया में static HBRUSH
चर बनाएँ।
- विंडो प्रक्रिया में
WM_CREATE
के जवाब में इस चर को प्रारंभ करें। यदि संवाद प्रक्रिया में ब्रश को WM_INITDIALOG
में प्रारंभ किया गया है। अधिक जानकारी और उदाहरणों के लिए someBrush = CreateSolidBrush(RGB(255, 0, 255));
कुछ documentation देखें।
- इस ब्रश को वापस करें, जैसे मैंने आपको ऊपर उदाहरण में दिखाया है (
return (LRESULT)someBrush
विंडो प्रक्रिया के लिए, या return (INT_PTR)someBrush
डायलॉग बॉक्स के लिए)।
- ब्रश हटाएं जब अब आवश्यकता नहीं है। यह आमतौर पर
WM_DESTROY
में DeleteObject(someBrush);
कॉल के साथ किया जाता है।
मैं दृढ़ता से, आप क्योंकि इस संदेश को अपने खिड़की हमेशा प्राप्त होगा WM_DESTROY
बजाय WM_CLOSE
के जवाब में विलोपन करने के लिए सलाह देने के लिए है, जबकि WM_CLOSE
कभी कभी छोड़ा जा सकता है (इंटरनेट खोज इस परिदृश्य के लिए उदाहरण खोजने के लिए)।
आशा है कि इससे मदद मिलती है, अगर आपके पास कोई प्रश्न है तो कोई टिप्पणी छोड़ दें और मैं मदद करने की कोशिश करूंगा। सादर।
मुझे सलाह है कि आप 'WM_CTLCOLORSTATIC' –
देखें एमएसडीएन आलेख पढ़ें, यह आपको ब्रश वापस करने के लिए कहता है। –