2009-09-11 13 views
7

Ho scritto un programma che dipinge widget sullo sfondo del desktop, sotto le icone del desktop, e tutto andava bene. Ma svelo uno strano bug: il mio programma non funzionava su altri computer: visualizza lo lo stesso desktop senza widget dopo l'avvio.disegno sotto icone sul desktop

Quindi, qualcuno ha qualche esperienza, qualche conoscenza in questo settore? Mi aiuti per favore! :)

(non riesco a trovare qualsiasi computer vicino, dove widget di non opere, nel mio computer tutto funziona bene. ho scritto un sacco di programmi di test, i cui tentativi disegnare qualsiasi cosa sul desktop con metodi piuttosto, ma prova visualizza niente di troppo nel mio computer amici)

metodo di disegno:.

ho scritto una dll, che trova finestra del desktop (progman-> Child> bambino)) e crea un gancio e installare proprio window procedure per desktop. Nella routine di finestra I Gancio WM_ERASEBKGND:

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

// mi salta in questo codice ottenere e impostare aree di ritaglio per il disegno veloce. (Ho provato tutte le combinazioni con ritaglio e senza ritaglio)

E nei test ho anche provato a dipingere il widget nel messaggio WM_PAINT con gli stessi risultati - tutto funziona già con me, ma non funziona affatto con i miei amici.

upd: Ho risolto! :)

+0

Il tuo codice funziona in Windows XP e * non * funziona in Windows Vista o Windows 7? – MusiGenesis

+0

Sì, il mio codice funziona in XP e Windows Vista. Ma non funziona in Windows 7. In Windows 7, suppongo, è un meccanismo di protezione. (Non riesco nemmeno a elencare DLL caricate nel processo explorer.exe) – vsvasya

+1

Per curiosità, quale era la soluzione? – Brian

risposta

3

Ho risolto! È semplice un computer a 64 bit) Quindi compilo il mio codice per 64-bit e il widget inizia a funzionare abbastanza bene!

E, anche -

PaintDesktop(hdc); 

produrrà carta da parati molto luminoso in Windows7 (e Vista) con Aero. (lo sfondo dell'utente viene illuminato). Deve essere

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam); 

Causa di questo - Aero tratta PaintDesktop() come vernice solito (su carta da parati schermo virtuale, che è lo stesso come sul desktop) con sommatoria di colore.

Saluti! :)

+0

Sto solo cercando di scrivere una cosa simile. Voglio visualizzare un'immagine sotto le icone del desktop. Non sono un esperto di programmazione di Windows quindi ho un po 'di tempo difficile con questo. Potresti per favore postare qualche codice sorgente per il tuo widget? – ciamej

+0

Puoi pubblicare una risposta più dettagliata. Sono curioso di sapere come dipingi sotto le icone del desktop. – Ampere

Problemi correlati