Dialogelement welches den Focus Farbig machen...

Rudi100

Gesperrt
Hallo alle zusammen,

ich habe folgende Situation.
Ich habe einen Dialog mit vielen Checkboxen. es ist sehr schwer zu sehen welches Element garde den Focus hat. Also dachte ich mir ich ändere einfach den Hintergrund des elements welches gerade den Focus hat.

Ich bin wie folgt vor gegangen:
Code:
HBRUSH ATHC_Edit_Grundeinstellung::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialogBase::OnCtlColor(pDC, pWnd, nCtlColor);
CWnd *FocusWnd;		 
CWnd *ElementWnd_1;
COLORREF Hintergrund;
 
FocusWnd = GetFocus();
Hintergrund = RGB(255,255,255);
 
switch( pWnd->GetDlgCtrlID() )
{
	 case IDC_ATHC_CHB_1_1:
	 {
		 ElementWnd_1 = GetDlgItem(IDC_ATHC_CHB_1_1);
		 if(FocusWnd == ElementWnd_1)
				Hintergrund = RGB(255,0,0);
				//Hintergrund = m_HatFocusHintergrund;
		 else
				Hintergrund = RGB(190,190,190);
				//Hintergrund = m_KeinFocusHintergrund;
 
		 return(CreateSolidBrush(Hintergrund));
	 } 
	 case IDC_ATHC_CHB_1_2: 
	 {
		 ElementWnd_1 = GetDlgItem(IDC_ATHC_CHB_1_2);
		 if(FocusWnd == ElementWnd_1)
			 Hintergrund = RGB(255,0,0);
		 else
			 Hintergrund = RGB(190,190,190);
 
		 return(CreateSolidBrush(Hintergrund));
	 } 
}//switch...
 
m_cCHB_1_1.Invalidate();
//m_cCHB_1_2.Invalidate();
 
return hbr;
}

Es klappt aber nur mit einem element. Es wird nur das Element farblich geändert welches mit Invalidate() "geändert" wird. Wenn ich nun die beiden Zeilen auskommentiere geht beides nicht. Mit nur einem Element klappt das super.

Wie kann ich es nun schaffen das beide Elemente die Farbe ändern wenn diese den Focus haben.

Ich hoffe es ist verständlich.

Gruß Rudi
 
Eine Möglichkeit wäre es, ein eigenes Steuerelement zu programmieren,
welches von der Checkbox geerbt ist.

Darin überschreibst du dann die OnFocus Methode. Darin kannst du dann die
Hintergrundfarbe beim erhalt des Focus festlegen.

Dann benutzt du danach nicht mehr die normalen Checkboxen, sondern deine Eigenen.
Diese haben dann die gleichen Methoden, Eigenschaften etc wie die normalen. Nur die Behandlung des Focus läuft anders ab
 
Moin moin,

vielleicht hilft dir die EN_SETFOCUS und EN_KILLFOCUS Msg weiter. Die werden erzeugt, wenn ein Element den Focus bekommt oder verliert. Da muss dann auch nix vererbt werden oder so, einfach nur den passenden Handler erzeugen und fertig.:-)

Gruss Michael
 
Bei meiner Entwicklungsumgebung gibts es im ClassWizard leider keine "EN_SetFocus" Funktionsmöglichkeit.

Kann ich diese den auch per "Hand" einbinden? Wo muß ich alles, was eingeben? Wird diese Funktion dann auch angesprochen?
 
Also ich habe die Funktionen jetzt eingebaut aber sie werden nicht angesprochen. Wie sieht den der genaue funktionsaufruf aus.
 
Zurück