Alle Farben
-
Hallo!
Ich wähle mittels CColorDialog eine Farbe und färbe damit anschließend ein Static-Control. An und für sich funktioniert dieser Vorgang.
Ärgerlicherweise gibt es aber Farben, die zwar im Farbdialog angezeigt werden (z.B. Pink), mit denen sich das Static aber nicht einfärben läßt - es wird grau - und ich vermute, daß das etwas mit einer begrenzten Farbpalette zu tun haben wird.
Weiß jemand, was ich dagegen tun kann?
Vielen Dank um voraus!
-
a9 Passiert das auch in einem True-Color-Mode?
Wenn ja machst du was falsch.Wenn's nur im 16/256-Farb-Modus auftritt machst du was anderes falsch (ich hör mich an wie ein Orakel)
Wenn's nur im Hi-Color-Modus auftritt - seltsam, die im H-Color-Modus darstellbaren Farben sind zwar für das menschliche Auge ncht kontinuierlich, aber ein pink ist schon drin.
Und ein bissl code - wie du malst, und was für eine COLORREF du tatsächlich verwendest wenn's nicht klappt - wäre hilfreich.
-
Hallo Peterchen!
Danke für Deine rasche Antwort.
Mein Rechner war auf 16 Bit High Colour eingestellt. Ich hab' ihn auf 24 Bit True Colour geändert. Trotzdem derselbe Effekt.
Ich hole mir die neue Farbe von CColorDialog .. m_colX = dlg.GetColor();
Dann stoße ich das Neuzeichnen des Controls an .. pWnd->Invalidate(TRUE);
In OnCtlColor wird das Static-Control mit m_colX eingefärbt.Das funktioniert auch mit verschiedenen (nicht allen) Grüntönen, sogar mit Blaugrün und mit Ocker, mit Knallgelb (mit Hellgelb nicht), mit Knallpink (mit Hellrosa nicht), mit Windowsblau (mit den meisten anderen Blautönen nicht), ...
Am Code scheint es nicht zu liegen.
Ich dachte nur, daß man vielleicht irgendwo für das ganze Programm gültig einen Farbmodus festlegen kann??
-
Poste mirr mal bitte trotzdem den Code

OnCtlColor soll nur einen HBRUSH zurückgeben, mit dem das Static gezeichnet werden soll, aber nix malen.
-
HBRUSH CMyClass::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);CBrush Bn;
if (pWnd->GetDlgCtrlID()==IDC_STfarbeN0)
{
pDC->SetBkColor(m_colN0);CBrush Bn;
Bn.CreateSolidBrush(m_colN0);
hbr=Bn;
Bn.DeleteObject();
}
......
return hbr;
}
-
HBRUSH CMyClass::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);CBrush Bn;
if (pWnd->GetDlgCtrlID()==IDC_STfarbeN0)
{
pDC->SetBkColor(m_colN0);CBrush Bn;
Bn.CreateSolidBrush(m_colN0);
hbr=Bn;
Bn.DeleteObject();
}
......
return hbr;
}
-
Da haben wir doch schon den schlimmfinger...
... hbr=Bn; Bn.DeleteObject(); // Hier wird das Windows-Objekt gelöscht... } ...... return hbr; // aber der Aufrufer braucht es ja noch!richtiger code kommt heut abend - muß erstmal bissl arbeiten
