質問

MFCファイル:winctrl4.cpp

(C:\ Program Files \ Microsoftビジュアル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);
}
私はそれだけで、選択した文字列の最初の文字を返し、これを呼び出すときに

私は、奇妙な問題を抱えています。 crが正しく設定されているが、::SendMessage(m_hWnd, EM_GETSELTEXT,...た後、全体の文字列が存在しません。

WCHARが予想されたときに

私が原因CHARの問題(1バイトにゼロを含む2バイト文字)にの私のの中でカスタムコードを同様の行動を見ました。しかし、これはMFC / Win32のの一部です!それは私の.rcファイルが何かを間違って設定可能ですか?これに関連し作成したスタイルはありますか?我々は問題のコントロールのためのCFontを作成するため、または、のこと

それをダウンさせる可能性があります
役に立ちましたか?

解決

これは正しいMFCソースコードではありません、あなたはそれを編集しましたか? CStringAとLPSTRを使用すると、Unicode文字が正しく処理されるように、実際のコードはCStringのとLPTSTRを使用して、非常に不適切です。はい、コードは一つだけの文字を返します掲載されます。

<時間>

バージョンを見ては、助けました。バグは<のhref = "https://connect.microsoft.com/VisualStudio/feedback/details/330199/cstring-crichedit-getseltext-has-a-bug-in-vs2008" のrel = "nofollowをnoreferrerこの中に記述されていますあなたは合理的にVS2008 SP1にアップグレードすることができない場合は「>フィードバックの記事。に、あなたはのCRichEditCtrlから独自のクラスを派生し、機能を置き換えることができます。たとえばます:

CString CRichEditCtrlFix::GetSelText() const
{
    ASSERT(::IsWindow(m_hWnd));
    CHARRANGE cr;
    cr.cpMin = cr.cpMax = 0;
    ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
    CString strText;
    LPTSTR 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);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top