Ich habe mir nen kleinen Editor zusammengebastelt u.a. mit einem std. Dialog für Farben. Dabei ist mir aufgefallen, dass nie die Farbe rauskam ,die ich ausgewählt habe. Ich habe daher mal ein wenig nachgeschaut und bin dann darauf gestoßen, dass es sich bei den Farbangaben in DWORD um COLORREF handelt und da stand dann:
0x00bbggrr
so die Konvertierung sieht aber so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
inline operator DWORD () const
{
return ((a >= 1.0f ? 255 : a <= 0.0f ? 0 : (DWORD)(a * 255.0f)) << 24) |
((r >= 1.0f ? 255 : r <= 0.0f ? 0 : (DWORD)(r * 255.0f)) << 16) |
((g >= 1.0f ? 255 : g <= 0.0f ? 0 : (DWORD)(g * 255.0f)) << 8) |
(b >= 1.0f ? 255 : b <= 0.0f ? 0 : (DWORD)(b * 255.0f));
}
|
Das gleiche prob nur anders rum:
|
C-/C++-Quelltext
|
1
2
|
inline tbColor(const DWORD c) : r(TB_COLOR_CONV * (float)(BYTE)(c >> 16)), g(TB_COLOR_CONV * (float)(BYTE)(c >> 8)), b(TB_COLOR_CONV * (float)(BYTE)(c)), a(TB_COLOR_CONV * (float)(BYTE)(c >> 24)) {}
|
Da habe ich ein paarmal nachschauen müssen, bis ich bemerkte, dass es die falsche Reihenfolge hatte. Nachdem ich die b durch g ersetzt habe und umgekehrt, ging es aber ganz normal.
Gibt es ihrgendwelche anderen DWORD Angaben, oder war es nur ein kleiner Fehler?