003
02.08.2002, 16:34 Uhr
Uwe
C/C++ Master (Administrator)
|
Hallo, Sorry mein Fehler, ich hab das Bsp. aus einer FormView gezogen. Man sollte doch eben genauer lesen So jetzt zum Problem: Das Editview ist nichts anderes als ein "großes" CEdit und hat somit auch alle seine Vor- und Nachteile geerbt. Du mußt dann zusätzlich =WM_CTLCOLOR überschreiben (NICHT WM_CTLCOLOR). Dazu mußt du mit dem Klassenassi eine neue Behandlungsroutine für Windowsnachrichten einfügen und zwar für "Untergeordnetes MDI-Fenster". Das füllst Du z.b. so:
C++: |
HBRUSH CMdiView::CtlColor(CDC* pDC, UINT nCtlColor) { pDC->SetBkColor(RGB(0,0,255)); pDC->SetTextColor(RGB(0,0,0)); HBRUSH hbr = CreateSolidBrush(RGB(0,0,255)); return hbr; //return NULL; }
|
Das war Nummer eins. Beim zweiten Problem mußt Du folgendes wissen: Wenn du mit dem Assi eine MDI-Anwendung erstellst ist die CMDIFrameWnd Klasse die Basis für CMainFrame. Um den Mdiclientbereich (MDICLIENT) "anzuzapfen" mußt Du einen kleinen Umweg gehen. In der CMDIFrameWnd Klasse existiert eine HWND Membervariable (m_hwndMDIClient), welcher wir uns bedienen können. Dazu sind folgende Schritte notwendig: 1. Eine neue Klasse mit dem Assi erstellen und diese von CWnd ableiten (CMDIClientWnd). 2. CMDIClientWnd benutzen um MDICLIENT zu subklassen. - in der CMainFrame Klasse eine öffentliche Variable
C++: |
CMDIClientWnd m_wndMDIClient
|
anlegen - OnCreate() in CMainFrame wie folgt verändern:
C++: |
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;
if (!m_wndMDIClient.SubclassWindow (m_hWndMDIClient)) { TRACE ("Failed to subclass MDI client window\n"); return (-1); } //... }
|
Jetzt kannst Du den Assi nutzen und in deiner NEUEN KLASSE folgendes einfügen:
C++: |
BOOL CMDIClientWnd::OnEraseBkgnd(CDC* pDC) { CBrush backBrush(RGB(0,0,255)); CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect; pDC->GetClipBox(&rect); pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY); pDC->SelectObject(pOldBrush); return TRUE; //return CWnd::OnEraseBkgnd(pDC); }
|
-- "Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."
Bis dann... Uwe |