HDM_INSERTITEM nur bei Unicode



  • Hallo!

    Warum erhält ein gesubclasstes CHeaderCtrl (abgeleitet Klasse) nur die HDM_INSERTITEM Nachricht wenn Unicode aktiviert ist? Ich kann dazu nichts finden?

    Gibt es eine Möglichkeit dennoch an diese Nachricht zu kommen?


  • Mod

    Es bekommt HDM_INSERTITEMW wenn der Erzeuger es wohl auch als Unicode Fenster mit CreateWindow(Ex)W erzeugt hat und bedienen will. Es bekommt wohl HDM_INSERTITEMA wenn es mit CreateWindow(Ex)A erzeugt wurde.



  • Martin Richter schrieb:

    Es bekommt HDM_INSERTITEMW wenn der Erzeuger es wohl auch als Unicode Fenster mit CreateWindow(Ex)W erzeugt hat und bedienen will. Es bekommt wohl HDM_INSERTITEMA wenn es mit CreateWindow(Ex)A erzeugt wurde.

    Das ist ein Ansatz. Also ich bekomme NUR die HDM_INSERTITEMW egal ob Unicode oder Ansi Zeichensatz. Das ListCtrl ist auch eine abgeleitete Klasse, welche das Control per CListCtrl::Create(...) erzeugt.

    Hier verstehe ich nicht ganz warum bei ANSI trotzdem nur die "Unicode"-Nachricht gessendet wird?


  • Mod

    HaJo. schrieb:

    Das ist ein Ansatz. Also ich bekomme NUR die HDM_INSERTITEMW egal ob Unicode oder Ansi Zeichensatz. Das ListCtrl ist auch eine abgeleitete Klasse, welche das Control per CListCtrl::Create(...) erzeugt.

    Hier verstehe ich nicht ganz warum bei ANSI trotzdem nur die "Unicode"-Nachricht gessendet wird?

    Du erzeugst das Control nicht. Das CListCtrl erzeugt den Header.
    Und wenn Du XP-Themes verwendest, ann werden intern die meisten Fenster nicht mit MBCS sondern Unicode erzeugt.

    Das ist auch der Grund warum alle Programm die Themes verwenden Unicode sein sollten. Es gibt z.T. eigentümliche Seiteneffekte wen man XP-Themes in MBCS Programmen nutzt.

    Aber was ist eigentlich Dein Problem mit HDM_INSERTITEM?
    Wenn Du estwas subclassed dann musst Du eben Handler für HDM_INSERTITEMW und HDM_INSERTITEMA einbauen.

    Das muss man bei Tooltip-Handlern auch!



  • Martin Richter schrieb:

    Du erzeugst das Control nicht. Das CListCtrl erzeugt den Header. Und wenn Du XP-Themes verwendest, ann werden intern die meisten Fenster nicht mit MBCS sondern Unicode erzeugt.

    Achso. ich dachte wenn ich das das Eltern-Control erstelle (mit ANSI) wird auch das gesubclasste mit "ANSI" erstellt.

    Martin Richter schrieb:

    Das ist auch der Grund warum alle Programm die Themes verwenden Unicode sein sollten. Es gibt z.T. eigentümliche Seiteneffekte wen man XP-Themes in MBCS Programmen nutzt.

    Ich wüsste auch sonst keinen Grund - ohne Themes - warum man für Anwendungen die auf >= XP laufen sollen nicht nur Unicode nutzt.

    In diesem speziellen Fall liegt es am eigenen Datenbank-/Datei-Engine der nur ANSI unterstützt. Hier jedes mal die Datensätze zum Lesen/Schreiben zu konvertieren halte ich für ineffizient. Also nutzt die ganze Applikation ANSI-Zeichensatz.

    Btw: Ich nutze entweder Unicode oder die Zeichensatzeinstellung "not set". Wann und wofür benötige ich eigentlich MBCS?

    Martin Richter schrieb:

    Aber was ist eigentlich Dein Problem mit HDM_INSERTITEM?
    Wenn Du estwas subclassed dann musst Du eben Handler für HDM_INSERTITEMW und HDM_INSERTITEMA einbauen. Das muss man bei Tooltip-Handlern auch!

    Naja, ein Problem war eben die Unwissenheit. Ich dachte andere Nachrichten werden auch korrrekt auf *A/*W "gemappt". Dass ich es mal explizit angeben musste kam mir bis jetzt noch nicht unter.


  • Mod

    Die Ineffizienz Deines Programmes liegt bei Deinem Programm dann nicht im Unwandeln von MBCS nach UNICODE sondern in der UI.

    Alle *A Funktionen wandeln die internen Text nach Unicode um und rufen die *W Funktionen auf.
    Es ist also die Frage was hier ineffizient ist... 😉

    MBCS ist die Möglichkeit auch Sprachen darzustellen, deren Zeichensatz eben über den normalen 8bit Bereich hinausgeht. Hier gibt es dann Lead Bytes mit dem Nachteil, dass ein String der 10 Bytes Lang ist evtl nur 7 Zeichen enthält...
    Mitllweile ist aber auch Unicode mutiert und verwendet Lead-Words...
    Jochen hat einen Unicode Artikel hier geschrieben, lies den mal.



  • Martin Richter schrieb:

    Die Ineffizienz Deines Programmes liegt bei Deinem Programm dann nicht im Unwandeln von MBCS nach UNICODE sondern in der UI.

    Vielleicht ein kleines Verständnisproblem. Ich habe es noch gar nicht ausprobiert weil mir die Theorie schon missviel. Ich laden Datensätze aus der Daten. Dann wandel ich jeden Datensatz von ANSI nach Unicode. Das Programm arbeitet damit. Zum Speichern wird der Datensatz von Unicode nach ANSI gewandelt und dann gespeichert.
    Auch wenn ich nicht jeden Datensatz umwandel und ihn nur zum Anzeigen an die entsprechenden *W Funktionen übergebe muss ich ganz schon viel Code ändern.

    Martin Richter schrieb:

    Alle *A Funktionen wandeln die internen Text nach Unicode um und rufen die *W Funktionen auf.
    Es ist also die Frage was hier ineffizient ist... 😉

    Interessant. Also sind ALLE Windowsapplikationen in der "GUI-Schicht" Unicode?

    Martin Richter schrieb:

    MBCS ist die Möglichkeit auch Sprachen darzustellen, deren Zeichensatz eben über den normalen 8bit Bereich hinausgeht. Hier gibt es dann Lead Bytes mit dem Nachteil, dass ein String der 10 Bytes Lang ist evtl nur 7 Zeichen enthält...
    Mitllweile ist aber auch Unicode mutiert und verwendet Lead-Words...
    Jochen hat einen Unicode Artikel hier geschrieben, lies den mal.

    Werde ich mal lesen.
    Edit: In den Artikeln.


Anmelden zum Antworten