2009-09-11 16 views
7

मैंने एक प्रोग्राम लिखा है जो डेस्कटॉप वॉलपेपर पर डेस्कटॉप वॉलपेपर पर विजेट पेंट करता है, और सब अच्छा था। लेकिन मैं एक अजीब बग प्रकट करता हूं - मेरा प्रोग्राम कुछ अन्य कंप्यूटरों पर काम नहीं करता था - वे प्रदर्शित करते समय विजेट के बिना एक ही डेस्कटॉप प्रदर्शित करते हैं।ड्राइंग

तो, क्या किसी के पास इस क्षेत्र में कोई ज्ञान है, कुछ ज्ञान है? कृपया मेरी मदद करें! :)

(मुझे कोई कंप्यूटर नहीं मिल रहा है, जहां विजेट काम नहीं करता है, मेरे कंप्यूटर में सभी अच्छी तरह से काम करते हैं। मैंने कई परीक्षण कार्यक्रम लिखे हैं, जिनकी कोशिश डेस्कटॉप पर कुछ भी तरीकों से खींचती है, लेकिन परीक्षण अपने दोस्तों कंप्यूटर में भी कुछ नहीं प्रदर्शित करता है)

आहरण विधि:।

मैं एक DLL, जो डेस्कटॉप विंडो (progman-> बच्चे के> बच्चे)) पाता है और एक हुक बनाता है और के लिए स्वयं की विंडो प्रक्रिया स्थापित लिखा था डेस्कटॉप। खिड़की प्रक्रिया में मैं WM_ERASEBKGND हुक:

case WM_ERASEBKGND: 
    HDC hdc = (HDC)wparam; 
    PaintDesktop(hdc); 
    WidgetPaint(hdc); 
    return 1; 

// मैं इस कोड हो रही है और तेजी से ड्राइंग के लिए कतरन क्षेत्रों की स्थापना में छोड़ दें। (मैंने क्लिपिंग और क्लिपिंग के बिना सभी संयोजनों की कोशिश की)

और परीक्षणों में मैं भी उसी परिणाम के साथ WM_PAINT संदेश में विजेट पेंट करने का प्रयास कर रहा हूं - सभी पहले से ही मेरे काम करते हैं, लेकिन मेरे सभी दोस्तों पर काम नहीं करता है।

अद्यतन: मैंने इसे हल किया! :)

+0

क्या आपका कोड विंडोज एक्सपी और * नहीं * विंडोज विस्टा या विंडोज 7 में काम करता है? – MusiGenesis

+0

हां, मेरा कोड एक्सपी और विंडोज विस्टा में काम करता है। लेकिन विंडोज 7 में काम नहीं करता है। मुझे लगता है कि, विंडोज 7 में, इसकी सुरक्षा तंत्र है। (मैं DLLs को भी सूचीबद्ध नहीं कर सकता जो एक्सप्लोरर.एक्सई प्रक्रिया में लोड होता है) – vsvasya

+1

जिज्ञासा से, क्या तय किया गया था? – Brian

उत्तर

3

मैंने इसे हल किया! यह 64-बिट मशीनों का आसान था) तो मैं 64-बिट के लिए अपना कोड संकलित करता हूं और विजेट बहुत अच्छा काम शुरू करता है!

और, यह भी -

PaintDesktop(hdc); 

Windows7 (और Vista) एयरो साथ में बहुत उज्ज्वल वॉलपेपर का उत्पादन करेगा। (उपयोगकर्ता का वॉलपेपर उज्ज्वल आता है)। होना चाहिए इस बात का

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam); 

कारण - एयरो (आभासी स्क्रीन वॉलपेपर से अधिक, कि डेस्कटॉप पर के समान है) PaintDesktop() हमेशा की तरह रंग के रूप में व्यवहार करता है रंग योग के साथ।

सम्मान! :)

+0

मैं बस एक ही चीज़ लिखने की कोशिश कर रहा हूं। मैं डेस्कटॉप आइकन के नीचे एक छवि प्रदर्शित करना चाहता हूँ। मैं एक विंडोज प्रोग्रामिंग विशेषज्ञ नहीं हूं इसलिए मेरे पास कुछ कठिन समय है। क्या आप अपने विजेट के लिए कहीं भी स्रोत कोड पोस्ट कर सकते हैं? – ciamej

+0

क्या आप एक और विस्तृत उत्तर पोस्ट कर सकते हैं। मैं उत्सुक हूं कि आप डेस्कटॉप आइकन के नीचे कैसे पेंट करते हैं। – Ampere

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