CRichEditCtrl :: GetSelText () funktioniert nicht richtig
-
22-09-2019 - |
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?
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.