ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
1909
1909
EMPFEHLEN
-
Hi
ich hab einen COLORREF wert welchen ich in CString umwandenl möchte und dann wieder von CString in COLORREF.
Ist das überhaubt möglich ? Geht das ?
Hab leider bis jetzt nichts gefunden
Indian
-
Ein COLORREF ist ja nur ein Typedef für ein DWORD, dazu müsste es Millionen Umwandel-Beispiele geben.
CString.Format( "%0x", rgbColor ) sollte das in Hex-Darstellung in den CString fummeln.
Ansonsten die üblichen DWORD in CString-Umwandel-Funktionen.
-
DWORD nach CString hatte ich gerade gefunden, geht genauso wie du es gesagt hast. Jedoch ich finde leider nicht von CString nach DWORD. Habe alles mögliche schon gefunden .
-
ich glaub ich bin zu blöd um eine funktion zu finden welche einen CString in DWORD umwandelt. Kennst du eine ?
-
atoi sollte das machen, macht auch keine Probleme mit dem Vorzeichen (sage ich mal so).
-
lol.. ich hatte es gerade vor 5 minuten ausprobiert und mein ColorDialog hat durch atoi denn richtigen wert sogar angezeigt
danke schön
-
einmal so
Code :1 2 3
CString strColor; COLORREF m_rgbColor = picker.GetRGB(); strColor.Format("%02X%02X%02X",GetRValue(m_rgbColor),GetGValue(m_rgbColor),GetBValue(m_rgbColor));
und einmal so:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
int _httoi(const TCHAR *value) { struct CHexMap { TCHAR chr; int value; }; const int HexMapL = 16; CHexMap HexMap[HexMapL] = { {'0', 0}, {'1', 1}, {'2', 2}, {'3', 3}, {'4', 4}, {'5', 5}, {'6', 6}, {'7', 7}, {'8', 8}, {'9', 9}, {'A', 10}, {'B', 11}, {'C', 12}, {'D', 13}, {'E', 14}, {'F', 15} }; TCHAR *mstr = _tcsupr(_tcsdup(value)); TCHAR *s = mstr; int result = 0; if (*s == '0' && *(s + 1) == 'X') s += 2; bool firsttime = true; while (*s != '\0') { bool found = false; for (int i = 0; i < HexMapL; i++) { if (*s == HexMap[i].chr) { if (!firsttime) result <<= 4; result |= HexMap[i].value; found = true; break; } } if (!found) break; s++; firsttime = false; } free(mstr); return result; } COLORREF HexToRGB(CString strHex) { int iRed = _httoi(strHex.Left(2)); int iGreen = _httoi(strHex.Mid(2, 2)); int iBlue = _httoi(strHex.Right(2)); return RGB(iRed,iGreen,iBlue); } // hier siehts dann in aktion aus CString strColor = FFFFFF; COLORREF rgbColor; rgbColor = HexToRGB(m_strColor);
hoffe das hilft
-
thx, aber ich hatte es schon gelöst
-
Sorry, aber wo hast du die Hex-Routine her? Die ist umständlich Quadrat.
Alleine die Hexmap, den zweiten Eintrag kann man sich einfach über Subtraktion errechnen. Ein einfacher String wäre da besser, wenn nicht ganz auf IF-Abfragen umsteigen.
Und wenn ich das bFirstTime richtig interpretiere, klappt das nur für zwei Zeichen lange Hex-Strings, weil bFirstTime nie wieder true ist. Die Hex-Strings können aber dafür ein 0x vorne dran haben
Nachtrag: Nimm's mir nicht krumm, ich will den Code nicht runtermachen, aber es gibt da einfach wesentlich einfachere Methoden.
-
nimms nicht übel, hast ja recht
aber ich bin zu faul da weiter anzupacken
der ohne probleme....und du kennst ja den spruch, repariere nichts, was nicht kaputt ist...
in diesem sinne
Ähnliche Themen
-
Problem mit CString
Von Hulewulle im Forum C/C++Antworten: 4Letzter Beitrag: 26.09.07, 13:51 -
CString to float bei Win CE
Von Wu-mc im Forum C/C++Antworten: 12Letzter Beitrag: 17.12.05, 23:15 -
CString in int
Von thodtie im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 04.11.04, 16:55 -
CList<CString,CString> list; einer Funktion übergeben ?
Von Indian im Forum C/C++Antworten: 15Letzter Beitrag: 26.10.04, 15:06 -
CString
Von kerian im Forum C/C++Antworten: 2Letzter Beitrag: 09.10.03, 20:36





Zitieren
Login






