OnCtlColor Problem
-
Trotz Eintrag in der Messagemap
IMPLEMENT_DYNAMIC(CMyView, CView) ///////////////////////////////////////////////////////////////////////////// // Message map BEGIN_MESSAGE_MAP(CMyView,CView) //{{AFX_MSG_MAP(CMyView) // NOTE - the ClassWizard will add and remove mapping macros here. ON_WM_CTLCOLOR() //}}AFX_MSG_MAP END_MESSAGE_MAP() HBRUSH CMyView::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor) { return 0; }
wird OnCtlColor nicht aufgerufen, OnPaint aber z.B. wird aufgerufen. Woran könnte es liegen?
-
kommt drauf an wer das aufrufen soll, also dein view ruft so weit ich weis kein OnCtlColor auf. Aber steuerelemente sollten das aufrufen solange sie nicht an was anderes gebunden sind wie menü oder die schaltflächen unter dem menü
-
Ich mache im CMyView Sachen wie DrawText oder Polyline, dass sollte wohl reichen?
Oder gibt es etwas, womit ich den Aufruf forcieren kann/muss?
-
ne warum sollte DrawText OnCtlColor aufrufen, wenn du die Textfarbe einstellen willst, dann solltest du CDC::SetTextColor() benutzen. OnCtlColor wird wie gesagt nur für Ctrl aufgerufen um die Farben einstellen zu können, DrawText ist ein einfacher Draw von Text auf deinen View.
-
Das Verfahren in Windows ist so:
Wenn ein Standard-Windows-Control eine WM_PAINT Nachricht bekommt, dann initialisiert es den DC wie es ihn braucht, sendet WM_CTLCOLOR... an das Parent und bekommt, den Brush für den Background und die Farben werden gesetzt. Dann ruft das Control z.zb. DrawText auf oder was auch immer...Ein Control ist also selbst Verantwortlich für den Aufruf von WM_CTLCOLOR...
-
Versuch's x mit "ProcessWindowMessage()" vielleicht kannst Du da WM_CTLCOLOR abfangen. Das ist immer mein Not-Anger; ich kenne diese Probleme...in "ProcessWindowMessage()" konnte ich auf manche Nachrichten reagieren. Es kann auch sein das Du das von CMainFrame aus erledigen mußt. (Was eine schmutzige Programmierung zu folge hat; Globale Zeiger und so was böses) Hier merkt man wieder...es lebe die API
MFC is was für faule
-
Versuch's x mit "ProcessWindowMessage()" vielleicht kannst Du da WM_CTLCOLOR abfangen. Das ist immer mein Not-Anger; ich kenne diese Probleme...in "ProcessWindowMessage()" konnte ich auf manche Nachrichten reagieren. Es kann auch sein das Du das von CMainFrame aus erledigen mußt. (Was eine schmutzige Programmierung zu folge hat; Globale Zeiger und so was böses) Hier merkt man wieder...es lebe die API
MFC is was für faule
Neeeeeeeeeeeeeeeeeeeeeeeiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiin, schon wieder doppelt
-
Und was soll bitte ProcessWindowMessage tun?
Er wundert sich, dass sein DrawText in einem Fenster sich keine Farben übe WM_CTLCOLOR holt...
Wenn er selbst keine Nachricht sendet, wird diesnur beio Standard Controls bei nicht überschriebenem WM_PAINT Handler passieren.
-
'tschuldigung...(bitte Uhrzeit beachten)...Ich habe das mit "OnDrawItem()" verwechselt. Da es jetzt auch schon nach 23 Uhr ist...LOGOUT