Domanda

In cerca di Windows tooltips classe finestra di suggerimento, vedo che trae la sua ombra al di fuori la finestra di suggerimento effettivo del rettangolo.

Utilizzando SpyXX - posso ottenere il tooltip della finestra rect, e stili di classe:

Rectangle:     (440, 229)-(544, 249), 104x20
Restored Rect: (440, 229)-(544, 249), 104x20
Client Rect:   (0, 0)-(104, 20), 104x20

Si noterà che l'ombra che si vede è fisicamente al di fuori la finestra che viene disegnato.Come posso disegnare un'ombra al di fuori intorno alla mia finestra, mentre al di fuori la mia finestra?

Nota: L'ombra non è disegnato con la standard CS_DROPSHADOW classe e stile. ho confermato questo sperimentalmente, e può anche vedere lo stile di classe per la finestra SpyXX;non utilizzare CS_DROPSHADOW:

Windows Styles:     94000001

    WS_POPUP        80000000
    WS_VISIBLE      10000000
    WS_CLIPSIBLINGS  4000000
    TTS_ALWAYSTIP          1

Extended Styles:    00080088

    WS_EX_LAYERED      80000
    WS_EX_TOOLWIN         80
    WS_EX_TOPMOST          8

Così come posso disegnare fuori dalla mia finestra?

Nota: Cercando di disegnare sul desktop DC è fuori.Da Greg Schechter s Reindirizzamento GDI, DirectX, e le applicazioni WPF:

Il disegno e la Lettura Da Schermo -- Baaaad!

Infine, dato che siamo sul reindirizzamento un tema, una particolarmente pericoloso pratica di scrittura per lo schermo, attraverso l'uso di GetDC(NULL) e la scrittura, o il tentativo di fare XOR righe di banda di gomma, etc.C' sono due motivi per cui la scrittura lo schermo è male:

E ' costoso...iscritto all' lo screen non è costoso, ma è quasi sempre accompagnato da lettura da schermo a causa di una in genere non si read-modify-write operazioni come XOR durante la scrittura schermo.Lettura dal video superficie memoria è molto costoso, richiede la sincronizzazione con il DWM, e le bancarelle di tutta la GPU tubo, come così come il DWM applicazione tubo.
È imprevedibile...se in qualche modo riescono a raggiungere l'attuale primario e scrivere, non ci può essere la prevedibilità per quanto riguarda il tempo che si ha scritto per il primario rimarrà sul schermo.Dal momento che la posta INDESIDERATA non sa su di esso, si può ottenere cancellato nel il prossimo aggiornamento della struttura, o può persistere per un tempo molto lungo, a seconda che cosa occorre per essere sempre aggiornati sui schermo.(Davvero non consentire la diretta la scrittura per il primario, comunque, per che ragione...se si tenta di accesso DirectDraw primaria, per esempio, il DWM si spegne fino a quando l'accesso a chiusura dell'applicazione)

È stato utile?

Soluzione

Non si può fare fuori dalla vostra finestra, in modo che tu descrivi.

Se si fare clic con il desktop, andare su proprietà/aspetto/effetti e deselezionare "Mostra ombreggiatura dei menu' ...non avere più l'ombra.

Linea di fondo è che questo è un prodotto del window manager non è il tuo programma.

Altri suggerimenti

Q:Come fai a disegnare al di fuori di una finestra?A:Disegnare all'interno di un altro la finestra!

Prima cosa da notare è che la descrizione della classe di realtà non utilizzare il CS_DROPSHADOW stile, ma si noti che questo è un classe stile, non un finestra stile, quindi bisogna guardare al Classe scheda Spy++ finestra di dialogo delle proprietà per trovarlo.Vedrai che il tooltips_class32 windows ha in effetti questo e pochi altri.

Ma che appena ci porta alla prossima domanda - come fa che lavoro?Bene, sembra che Windows implementa la creazione di un helper HWND di disegnare l'ombra - presumibilmente è la creazione di un'altra finestra di popup la stessa dimensione e forma come quello che si sta shadowing, il riempimento con il colore grigio, collocandolo direttamente sotto la finestra principale, e l'impostazione come un WS_EX_LAYERED finestra in modo che l'ombra può essere trasparente e fade out intorno i bordi con alpha-blending.E non c'è nulla ti impedisce di utilizzare lo stesso o tecniche simili a voi stessi, se si desidera aggiungere un diverso tipo di effetto ombra di una delle tue finestre.

Insomma, per farla breve: se si desidera disegnare al di fuori della vostra finestra per creare un aiutante di finestra trasparente, nella zona che si desidera disegnare e disegnare su quella finestra di supporto, invece.

--

Ora, se si tenta di trovare uno di questi helper ombra di windows in Spy++, non troverete molto.A differenza del tooltip_class32 di windows, che sono di lunga durata e a nascondere/mostrare se stessi come necessari, questi ombra di windows sono una creatura sfuggente:essi vengono creati solo per il tempo necessario, in modo dovresti aggiornare Spy++, mentre c'è una descrizione o menu a comparsa o l'altra finestra di utilizzare l'ombra presente - e che è difficile, poiché la maggior parte delle descrizioni dei comandi e dei menu scompare non appena si sposta il mouse per passare alla Spy++.Ma si scopre che i suggerimenti su Spy++'s propria barra degli strumenti bastone:così inizia Spy++, posiziona il puntatore su un elemento nella barra degli strumenti, e ha colpito F5 per aggiornare l'HWND albero, mentre la descrizione e l'ombra sono presenti.Ora scorrere verso il basso e si dovrebbe vedere il terzo e il quarto visibile HWNDs nell'albero sono la descrizione stessa, e subito dopo, un SysShadow finestra.Purtroppo, dal momento che la descrizione e l'ombra sono ormai scomparsi, se si tenta di ottenere la finestra di dialogo proprietà HWND, potrai ottenere un ottenere un vuoto di proprietà finestra di dialogo con " Voci di Finestra di messaggio.Se si vuole veramente a curiosare e vedere come SysShadow funziona, che cosa gli stili si utilizza e così via, si potrebbe creare un'applicazione di destinazione, con una lunga durata di popup che utilizza CS_DROPSHADOW che è quindi possibile esplorare in Spy++ nel tempo libero.

(Si noti, infine, che queste ombre sono una cosa completamente diversa che le ombre che si vede quando una finestra dell'applicazione si trova sulla cima di un altro al di sopra di un altro, dal momento Vista:questo tipo di ombra è parte di Aero Glass modalità e gestite dallo stesso La Composizione Del Desktop Manager che aggiunge il titolo di vetro effetto, e non utilizzare o bisogno di figurante di windows per implementare le ombre.)

Non sarei sorpreso se l'ombra è intimamente legato alla finestra del gestore stesso;dopotutto, è il window manager che decide cosa finestra viene a dipingere che le parti di sé e quando si può fare.Non vedo come la scienza a razzo per la vernice che shadow se il controllo su tutto ciò che è acquisito, che il gestore di finestre.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top