Strano comportamento del colore di sfondo del controllo di modifica quando si utilizzano i controlli comuni di WinXp

StackOverflow https://stackoverflow.com/questions/1621077

Domanda

Sto riscontrando uno strano problema (beh, almeno lo trovo strano =)). Sto scrivendo la mia libreria GUI, che è un wrapper per Windows API (e sì, sono a conoscenza di WTL e framework come MFC =)). Nella fase attuale ho incapsulato controlli comuni in questo modo: ad esempio, la classe Edit è composta da una semplice finestra e una finestra di modifica standard sopra di essa (MainWindow - > GhostWindow - > EditBox). Ecco come posso ad esempio cambiare un colore di sfondo di una modifica all'interno di una stessa classe di modifica:

myedit->SetBkColor ( RGB ( 0, 0, 0 ) );

E ha funzionato bene, fino a quando ho chiamato InitCommonControlsEx e ho allegato il file manifest al mio programma. Dopo aver fatto ciò, le mie modifiche diventano in grado di cambiare colore solo quando hanno lo stato attivo. Ad essere sincero, non ho una visione globale del perché il comportamento si comporti in questo modo e cosa sto facendo di sbagliato, quindi apprezzerò qualsiasi aiuto.

Grazie, # 535.

È stato utile?

Soluzione 2

Bene, tutto è molto più semplice di quanto pensassi. Ero semplicemente troppo distratto = (Quando uno non usa lo stile, un bastone usa :: SetBkColor (...) per cambiare il colore di sfondo e restituisce un pennello da WM_CTLCOLOR * per cambiare un colore del bordo. Le cose diventano diverse dopo aver abilitato lo stile Ora :: SetBkColor (...) corrisponde al colore focus e il pennello di ritorno cambia il colore di sfondo. Vergogna su di me = (

Altri suggerimenti

  1. Quando si allega il manifest versione 6, la chiamata a InitcommonControlsEx diventa superflua.

  2. In ogni caso. con i controlli comuni versione 6 caricati, il tema XP viene utilizzato anche per i controlli Windows standard. I colori di sfondo per i controlli sono dipinti usando il colore tema xp, quindi i messaggi WM_CTLCOLOR * sono usati meno.

  3. Attualmente stai scavalcando il cooler di vari elementi di controllo usando i messaggi WM_CTLCOLOR *?

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