000
19.01.2004, 10:47 Uhr
proga
|
So, ich hoffe jemand kann mir helfen. Ich möchte ebenfalls die Farbe meiner Steuerelemente zur Laufzeit ändern. Ich habe mich hier auch schon umgeschaut, und gesehen, dass überall auf die Methode OnCtlColor bzw. auf die WM_CTLCOLOR-Message hingewiesen wird. Mein Problem ist, dass die Farbe sich ständig ändern soll. Je nachdem, welche Werte ich habe, möchte ich die Farbe meiner Steuerelemente anpassen. Die OnCtlColor-Funktion wird nur einmal aufgerufen, und zwar immer dann wenn der Dialog neugezeichnet wird. Also nehem ich an, ich muss die Wm_CTLCOLOR-Message an mein Steuerelement senden, damit die Methode auch dann aufgerufen wird, wenn ich das möchte. Ich habe es so versucht: Wenn ich weiss, dass sich ein Wert geänder hat, möchte ich die Farbe eines CStatic-Elements, in dem der Wert angezeigt wird ändern und rufe die folgende Zeile auf:
C++: |
m_InAbtastrate.SendMessage(WM_CTLCOLOR);
|
In der OnCtlColor-Methode ändere ich dann die Farbe:
C++: |
HBRUSH CBoeCOMPortDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { COLORREF colorBlue = RGB(68, 68, 230); COLORREF colorRed = RGB(253, 33, 28);
if (m_COMPort.IsOpen()) { if (nCtlColor == CTLCOLOR_STATIC) { switch (pWnd->GetDlgCtrlID()) { case IDC_INABTASTRATE: { if (m_Param.m_Abtastrate.m_Value <= m_Param.m_Abtastrate.m_MIN) { pDC->SetBkColor(colorBlue); return m_BlueBrush; } else if (m_Param.m_Abtastrate.m_Value >= m_Param.m_Abtastrate.m_MAX) { pDC->SetBkColor(colorRed); return m_RedBrush; } break; } } } }
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); }
|
Das funktioniert aber nicht. Wenn ich die Nachricht an das Steuerelemt sende, erhalte ich einen Fehler in der OnWndMsg-Methode von CWnd. Und zwar in der folgenden Zeile:
C++: |
CDC dcTemp; dcTemp.m_hDC = pCtl->hDC;
|
Hier stelle ich fest, dass pCtl = NULL ist. Warum, ist mir nicht klar.
Nun, wie mache ich es denn richtig ? Wie oben schon gesagt, ich möchte zur Laufzeit die Farbe der Steuerelemente ändern. Das mache ich in der OnCtlColor-Methode. ABER !!! Wie teile ich dem Framework mit, dass diese Methode aufgerufen wird ? |