Bunte Toolbars /CDialogBars
-
Hallo ForumNutzer,
ich möchte meine SDI-Anwendung farblich etwas aufpeppen und möchte links einen Roten Streifen und oben ein längliches Bild einfügen. Ich wollte das mir ToolBar oder CDialogBar machen aber die Klassen haben keine richtige Funktionen zum zeichnen bzw. sind die ToolBar Buttons grau, da sie nicht mit einer Funktion belegt sind.
Frage:
1. Wie füge ich einen roten Streifen an den linken SDI.Rand?
2. Wie füge ich ein einfaches Bild unter der Menüleiste ein?Grüße Micha
-
Verstehe ich nicht, CToolBar als auch CDialogBar haben WM_ERASEBKGND und WM_PAINT Handler.
OnEraseBkgnd würde sich hier IMHO anbieten, denn das Überschreiben von OnPaint führt meistens zu Problemen.
-
Hallo Martin,
ich bin jener mit der SDI-Anwendung und dem eingefügten PropertySheets. Ich bin noch Anfänger und deine Ausführung hat mir leider nicht so geholfen:
Wo würde ich denn die Handler einfügen?
Ich dachte man könnte sowas mit SetDialogBkColor lösen, aber die Beispiele, welche ich fand waren anders aufgebaut als mein Projekt. Kann man diese Funktion denn bei CDialogBar anwenden, und wenn ja: wie? (Die Lösung dessen würde mir aber nicht bei dem Problem mit dem Bild oben helfen)Zum Verstaändnis: SDI-Anwendung und im Editierfeld sind PropertySheets
Grüße und danke für eure Gedult im Vorraus:-)
Micha↓
-
Wenn Du handler in Klassen nutzen willst, dann musst Di die Klassen ableiten! D.h. eigene Klassen erzeugen und die bestehenden Objekte um die es geht (z.B. CToolBar) durch Deine Klasse ersetzen.
-
Ich bin das Problem jetzt mal angegangen und hab das mit der Hintergrundfarbe bei einer Dialogbar so gelöst:
beiON_WM_PAINT(IDD_COLOURED_DLGBAR, OnPaint)in der MessageMap
und dannvoid CMyColouredDlgBar::OnPaint() { CPaintDC pDC(this); CRect Rect; GetClientRect( &Rect ); pDC.FillSolidRect( &Rect, RGB(255,0,0)); }bei dem Hintergrundbild was in einer anderen Dialogbar erscheinen sollte gabs Probleme mit OnPaint (wie Martin schon sagte)und ich habs so gemacht:
ON_WM_ERASEBKGND(IDD_DIALOGBAR, OnEraseBkgnd)in MessageMap
undBOOL CMyDlgBar::OnEraseBkgnd(CDC* dc) { CRect Rect; GetClientRect( &Rect ); BITMAP bm; MyPic.GetObject( sizeof( bm ), &bm ); CDC SpeicherDC; SpeicherDC.CreateCompatibleDC( dc ); SpeicherDC.SelectObject( &MyPic ); ScreenToClient(&Rect); dc->SetStretchBltMode( HALFTONE ); dc->StretchBlt(0,0,Rect.Width(),Rect.Height(),&SpeicherDC, 0,0,bm.bmWidth,bm.bmHeight, SRCCOPY ); return true; }MyPic ist als CBitmap deklariert
Grüße und Dank an Martin
MichaEdit:
ich vergas noch eine Zeile aus OnInitDialog mitzusenden:MyPic.LoadBitmap( IDB_BITMAP );