Frage

MFC Datei: winctrl4.cpp

(C: \ Programme \ Microsoft Visual Studio 8 \ VC \ atlmfc \ src \ mfc)

CString CRichEditCtrl::GetSelText() const
{
    ASSERT(::IsWindow(m_hWnd));
    CHARRANGE cr;
    cr.cpMin = cr.cpMax = 0;
    ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
    CStringA strText;
    LPSTR lpsz=strText.GetBufferSetLength((cr.cpMax - cr.cpMin + 1)*2); 
    lpsz[0] = NULL;
    ::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpsz);
    strText.ReleaseBuffer();
    return CString(strText);
}

Ich habe ein seltsames Problem, wenn ich das nenne es gibt nur das erste Zeichen des gewählten Zeichenfolge. cr korrekt sein Satz aber nach ::SendMessage(m_hWnd, EM_GETSELTEXT,... die gesamte Zeichenfolge nicht vorhanden ist.

Ich sah eine ähnliches Verhalten in meinen benutzerdefinierten Code aufgrund WCHAR Fragen (Zwei-Byte-Zeichen einer Null in einem Byte enthalten), wenn CHAR erwartet wurde. Aber das ist Teil des MFC / Win32! Ist es möglich, meine RC-Datei setzt etwas falsch gemacht? Gibt es einen Stil erstellen diesbezüglich? Oder, da wir eine CFont für die Kontrolle in Frage schaffen, könnte , die schraubt oben?

War es hilfreich?

Lösung

Dies ist nicht der richtige Quellcode MFC, haben Sie es bearbeitet? Mit CStringA und LPSTR ist ziemlich unangemessen, der eigentliche Code verwendet CString und LPTSTR so dass Unicode korrekt behandelt. Ja, da der Code geschrieben würde nur ein Zeichen zurück.


half die Version sehen. Der Fehler ist in diesem

scroll top