tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
1909
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Indian Indian ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    116
    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
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    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.
     

  3. #3
    Indian Indian ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    116
    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 .
     

  4. #4
    Indian Indian ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    116
    ich glaub ich bin zu blöd um eine funktion zu finden welche einen CString in DWORD umwandelt. Kennst du eine ?
     

  5. #5
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    atoi sollte das machen, macht auch keine Probleme mit dem Vorzeichen (sage ich mal so).
     

  6. #6
    Indian Indian ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    116
    lol.. ich hatte es gerade vor 5 minuten ausprobiert und mein ColorDialog hat durch atoi denn richtigen wert sogar angezeigt

    danke schön
     

  7. #7
    Thopeto Thopeto ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    227
    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
     

  8. #8
    Indian Indian ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    116
    thx, aber ich hatte es schon gelöst
     

  9. #9
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    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.
     

  10. #10
    Thopeto Thopeto ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    227
    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

  1. Problem mit CString
    Von Hulewulle im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 26.09.07, 13:51
  2. CString to float bei Win CE
    Von Wu-mc im Forum C/C++
    Antworten: 12
    Letzter Beitrag: 17.12.05, 23:15
  3. CString in int
    Von thodtie im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 04.11.04, 16:55
  4. Antworten: 15
    Letzter Beitrag: 26.10.04, 15:06
  5. CString
    Von kerian im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 09.10.03, 20:36