Question

MFC fichier: winctrl4.cpp

(C: \ Program Files \ 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);
}

J'ai un problème bizarre, quand je l'appelle cela, il ne retourne que le premier caractère de la chaîne sélectionnée. cr est correctement réglée, mais après être ::SendMessage(m_hWnd, EM_GETSELTEXT,... la chaîne entière n'est pas présent.

J'ai vu un comportement similaire dans my code personnalisé en raison de problèmes WCHAR (caractère de deux octets contenant un zéro dans un octet) lorsque CHAR était attendu. Mais cela fait partie du MFC / Win32! Est-il possible mon fichier .rc ensembles quelque chose de mal? Y at-il un style Créer relatif à ce sujet? Ou, puisque nous créons un CFont pour le contrôle en question, pourrait que foirer?

Était-ce utile?

La solution

Ce n'est pas le code source correcte MFC, avez-vous édité? L'utilisation CStringA et LPSTR est tout à fait inappropriée, le code réel utilise CString et LPTSTR pour que Unicode est géré correctement. Oui, comme affiché le code ne reviendrait un caractère.


En voyant la version aidé. Le bug est décrit dans cette

scroll top