[VC++]Dialog Hintergrundfarbe ändern

03/17/2009 12:43 Adroxxx#1
[VC++]Dialog Hintergrundfarbe ändern

Dies soll ein kleines Tutorial werden wie man unter Vistual C++ (MFC) die Hintergrundfarbe eines Dialoges ändert. Dies gibt auch auch die Grundlage alle Elemente in einem Dialog zu gestalten. Ich arbeite in diesem Tutorial mit Visual Studio 2005. Aber es sollte auch Problemlos mit einer neueren Version funktionieren. Mit älteren Versionen sprich Visual Studio 6 geht es auch so, nur dort müsst ihr es über den Klassenassistent machen.


#Inhalt:
[-]Dialog erstellen
[-]OnCtlColor hinzufügen
[-]Nachwort




[-]Dialog erstellen

Als erstes erstellen wir unseren Dialog als MFC Anwendung.
In unserem Fall nenne ich den Dialog ColorDialog.

[Only registered and activated users can see links. Click Here To Register...]


Als Anwendungstyp nehmen wir Dialogfeldbasierend.

[Only registered and activated users can see links. Click Here To Register...]


ActiveXSteuerelemente Deaktivieren wir, den Rest kann man so belassen.

[Only registered and activated users can see links. Click Here To Register...]

Und somit haben wir nun einen Leeren Dialog.


[-]OnCtlColor hinzufügen

Wir gehen zunächst in die Ressourcenansicht und wählen den Hauptdialog aus.
[Only registered and activated users can see links. Click Here To Register...]

Dann klicken wir auf den Hauptdialog und gehen in die Eigenschaften.
[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

So in den Eigenschaften sind nun Verschiedene Filter. Es gibt Eigenschaften, Meldungen und Steuerelementereignisse. Wir gehen in die Meldungen [Only registered and activated users can see links. Click Here To Register...] und sehen nun alle Meldungen. Wir suchen WM_CTLCOLOR und fügen es hinzu.
[Only registered and activated users can see links. Click Here To Register...]

Nachdem wir das getan haben, springen wir automatisch in die Funktion.

PHP Code:
HBRUSH CColorDialogDlg::OnCtlColor(CDCpDCCWndpWndUINT nCtlColor)
{
    
HBRUSH hbr CDialog::OnCtlColor(pDCpWndnCtlColor);

    
// TODO:  Ändern Sie hier alle Attribute für den DC.

    // TODO:  Gib einen anderen Pinsel zurück, wenn der Standard nicht erwünscht ist.
    
return hbr;

Nun ändern wir
PHP Code:
HBRUSH hbr CDialog::OnCtlColor(pDCpWndnCtlColor); 
in
PHP Code:
HBRUSH hbr CreateSolidBrush(RGB(25500)); 
Und nun haben wir einen Roten Dialog! Wenn ihr die Farbe ändern wollt müsst ihr nur den RGB Farb Code umändern. Außerdem sollte man noch
PHP Code:
pDC->SetBkMode(TRANSPARENT); 
Hinzufügen. Damit die Hintergrundfarbe vom Text durchsichtig ist.


[-]Nachwort

Dieses Tutorial ist zwar nichts Weltbewegendes, aber bietet einem eine Grundlage um Dialoge zu verändern.
Einige Funktionen die noch nützlich sind :

PHP Code:
pDC->SetBkColor(RGB(255,0,0)); 
Damit kann man die Hintergrundfabre vom Text ändern. Aber falls man den Mode auf Transparent gestellt hat, sieht man das natürlich nicht.

PHP Code:
pDC->SetTextColor(RGB(0,255,0)); 
Damit kann man die Textfarbe ändern. Am besten schaut ihr euch die MSDN an, dort findet ihr noch einiges an nützlichen Funktionen!

Ich hoffe ich konnte euch das Leben mit MFC etwas erleichtern ;)
03/17/2009 12:52 FreaKzzz#2
gute arbeit!
03/17/2009 13:04 NBA#3
Ist jetzt aber nicht VC++ Express oder? Das express sieht leicht anders aus..

edot: haste ja gepostet...
03/17/2009 13:08 Adroxxx#4
Quote:
Originally Posted by NBA View Post
Ist jetzt aber nicht VC++ Express oder? Das express sieht leicht anders aus..

Quote:
Originally Posted by Adroxxx
Ich arbeite in diesem Tutorial mit Visual Studio 2005.
:P

Ja 2008 Express sieht leicht anders, aber wenn man bissl damit gearbeitet hat, weiß man ja wo die Meldungen sind usw.
03/17/2009 13:09 NBA#5
Habs bereits gesehen :) Vom Prinzip her ist es doch eh das gleiche, nur das express wohl nichts kostet...
03/17/2009 13:13 Adroxxx#6
Express unterstützt glaub ich irgendwas nicht. Und MFC ist nicht standardmäßig eingebunden. Also war früher so, keine Ahnung ob die das jetzt geändert haben.
03/17/2009 13:26 NBA#7
Ich kann unter express keine MFC anwendungen machen...soll ich ma nen upload machen?
03/17/2009 13:29 Adroxxx#8
Quote:
Originally Posted by NBA View Post
Ich kann unter express keine MFC anwendungen machen...soll ich ma nen upload machen?
....

Quote:
Originally Posted by Adroxxx
Express unterstützt glaub ich irgendwas nicht. Und MFC ist nicht standardmäßig eingebunden. Also war früher so, keine Ahnung ob die das jetzt geändert haben.
Wie gesagt ist wohl noch so, das Express kein MFC hat. Musste entweder MFC Trial laden oder eine gecrackte Fullversion.
03/17/2009 13:34 NBA#9
-.- Da bleib ich lieber bei meinen konsolenanwendungen:
-Einfach zu bedienen
-Man braucht keine Maus
-Einfacher zu coden (aus meiner sicht)
Nur wie bringt man es dazu, die console nicht zu schliessen...

und wieso bist du immer schneller als ich?
03/17/2009 13:38 Adroxxx#10
Quote:
Originally Posted by NBA View Post
-.- Da bleib ich lieber bei meinen konsolenanwendungen:
Konsolenanwendungen unter Windwos ftl!
Quote:
Originally Posted by NBA View Post
-Einfach zu bedienen
o.O Wenn du einen Bot schreibst, wo du mehrere Einstellmöglichkeiten hast, ist das ziemlich umständlich. Unter Windows gibts imo keine ncurses oder so um ein Menü zu machen. Wobei das imo auch umständlich ist.
Quote:
Originally Posted by NBA View Post
-Man braucht keine Maus
Brauchst du bei Dialogen auch nicht. STRG+TAB & Enter FTW!
Quote:
Originally Posted by NBA View Post
-Einfacher zu coden (aus meiner sicht)
MFC macht das meiste automatisch. Musst nur an der Funktionalität bissl was machen. Ist IMO um einiges einfacher als die GUI mit winapi aufzubauen!

wieso schneller?
03/17/2009 13:51 NBA#11
Weil man gar kein GUI braucht, sondern es ganz consolenbasiert machen kann!
03/17/2009 13:56 Adroxxx#12
Du kannst aber ein Komplexes Programm nicht in der Konsole machen. Benutzerfreundlichkeit ftw! Gut wenn du einen Bot machst, wo man nix einstellen kann oder so, geht das noch. Oder einfache Skripte hast. Aber sobald der Benutzer eingaben machen muss, zwischen verschiedenen Optionen auswählen kann usw. ist Konsole FAIL!

Ich kann dir später mal ne PM mit der GUI von meinem Bot schicken, dann wirste sehen das da eine Konsolenanwendung fehl am Platz wäre. Ganz einfach weil es viel viel zu unübersichtlich wäre.
03/18/2009 08:46 BlackFog#13
1.) Sehr nettes Tutorial , danke.
2.) Sobald das Programm nur mehr als 5-6 Benutzereingaben erfordert und man etwas Komfort erreichen möchte, ist eine GUI definitiv vorzuziehen. Bei kleinen Programmen mit denen man schnell etwas testen möchte ist das natürlich sinnfrei.

Mfg
Blackfog
05/24/2009 16:39 daniel_5592#14
Adroxxx where is the download link??? i cannot find it
05/24/2009 19:49 Adroxxx#15
Download link for what? o.O