2012-09-18 13 views
6

WinAPI का उपयोग करके पारदर्शी रंग के साथ पाठ कैसे आकर्षित करें? सामान्य तरीके से मैंने सेटबैकोड (एचडीसी, ट्रांसपेरेंट) का उपयोग किया, लेकिन अब मुझे डबल बफर का उपयोग करने की आवश्यकता है। इस तरह से छवियां सही खींचती हैं, लेकिन पाठ सही नहीं होता है (काला पृष्ठभूमि के साथ)।सी ++/WinAPI का उपयोग कर पारदर्शी पृष्ठभूमि के साथ पाठ कैसे आकर्षित करें?

case WM_PAINT: 
{ 
    hDC = BeginPaint(hWnd, &paintStruct); 
    SetBkMode(hDC, TRANSPARENT); 

    HDC cDC = CreateCompatibleDC(hDC); 
    HBITMAP hBmp = CreateCompatibleBitmap(hDC, width, height); 
    HANDLE hOld = SelectObject(cDC, hBmp); 

    HFONT hFont = (HFONT)SelectObject(hDC, font); 
    SetTextColor(cDC, color); 
    SetBkMode(cDC, TRANSPARENT); 

    TextOut(cDC, 0, 0, text, wcslen(text)); 

    SelectObject(cDC, hFont); 

    BitBlt(hDC, 0, 0, width, height, cDC, 0, 0, SRCCOPY); 

    SelectObject(cDC, hOld); 
    DeleteObject(hBmp); 
    DeleteDC(cDC); 

    EndPaint(hWnd, &paintStruct); 
    return 0; 
} 

उत्तर

2

जब आप बिटमैप बनाते हैं, तो रंग निर्दिष्ट नहीं होता है। दस्तावेज यह नहीं बताता कि यह कैसे शुरू हुआ है, लेकिन ठोस काला (सभी शून्य) की संभावना है। चूंकि आप बिटमैप पर टेक्स्ट खींच रहे हैं, बिटमैप की पृष्ठभूमि काला बनी हुई है। फिर आप पूरे बिटमैप को डीसी में कॉपी करते हैं और पाठ के साथ पृष्ठभूमि के साथ सभी पिक्सल आते हैं।

इसे ठीक करने के लिए आपको टेक्स्ट खींचने से पहले वांछित पृष्ठभूमि को बिटमैप में कॉपी करना होगा।

+0

इस तरह से काम करता है) जैसा कि मैंने उम्मीद की थी, लेकिन काम नहीं करता है। काले रंग के पृष्ठभूमि वाले कुछ क्षेत्र, लेकिन मुझे लगता है, मैं उन्हें ठीक कर सकता हूं। धन्यवाद! – Alexander

8

SetBkMode(dc, TRANSPARENT) अभी भी ठीक काम करना चाहिए। सुनिश्चित करें कि आप अपने बैक बफर पर ड्राइंग करते समय सही डीसी हैंडल का उपयोग कर रहे हैं।

+0

मैंने डीसी, देशी दोनों के लिए इस फ़ंक्शन का उपयोग किया, जिसे मैं BeginBaint (...) और संगत द्वारा प्राप्त करता हूं, जिसे मैं CreateCompatibleDC (...) द्वारा प्राप्त करता हूं ... – Alexander

+0

आपको उसी डीसी के लिए इसका उपयोग करने की आवश्यकता है आप पाठ को चित्रित कर रहे हैं। आप किस टेक्स्ट ड्राइंग एपीआई को बुला रहे हैं? आप किस तरह का डीसी और बिटमैप पर चित्रित कर रहे हैं? – tenfour

+0

मैं क्या करता हूं: संगत डीसी बनाएं, संगत बिटमैप बनाएं, ऑब्जेक्ट का चयन करें, setbkmode, ड्रा (संगत डीसी के साथ), बिटब्लैट, ऑब्जेक्ट का चयन करें, ऑब्जेक्ट हटाएं, डीसी हटाएं। छवियां सही होती हैं, लेकिन पाठ काले पृष्ठभूमि के साथ खींचता है (( – Alexander

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