0

リッチエディット テキスト ボックスにメッセージを追加するコードは次のとおりです。

CHARFORMAT cf;
memset( &cf, 0, sizeof cf );
cf.cbSize = sizeof cf;
cf.dwMask = CFM_COLOR;
if (getuserofmessage(msg) == myname)
cf.crTextColor = RGB(0,0,255);// <----- the color of the text
else if (getuserofmessage(msg) == "admin")
cf.crTextColor = RGB(255,0,0);// <----- the color of the text
else
cf.crTextColor = RGB(55,200,100);// <----- the color of the text

SendMessage( hwnd , EM_SETCHARFORMAT, (LPARAM)SCF_SELECTION, (LPARAM) &cf);

/*SendMessage(hwnd, EM_SETSEL, 0, -1); 
    SendMessage(hwnd, EM_SETSEL, -1, -1); 
     SendMessage(hwnd, EM_REPLACESEL, 0, (LPARAM)msg.c_str());*/
     CHARRANGE cr;
cr.cpMin = -1;
cr.cpMax = -1;

// hwnd = rich edit hwnd
SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&cr);
SendMessage(hwnd, EM_REPLACESEL, 0, (LPARAM)msg.c_str());

リッチエディット テキストボックスの createwindow は次のとおりです。

hwnd=CreateWindowEx(WS_EX_CLIENTEDGE, RICHEDIT_CLASS, "",                   
ES_READONLY | WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
x,
y,
w,
h,
parent,
(HMENU)identifier,
GetModuleHandle(NULL),
NULL);

ただし、テキスト ボックス内のメッセージがすべて収まらない場合、自動的に下にスクロールしないため、ユーザーは常に下にスクロールする必要があります。この問題に直面している他のすべての参照は、.NET または c# にあります。追加後にカーソルをテキストボックスの一番下に設定することはできませんか? またはそのようなもの。どんな助けでも大歓迎です。ありがとう。

編集:追加してみました:

DWORD TextSize;
TextSize=GetWindowTextLength(hwnd);
SendMessage(hwnd,EM_SETSEL,TextSize,TextSize);
SendMessage(hwnd,EM_SCROLLCARET,0,0);

これは他の誰かのための解決策でしたが、私にとってはうまくいきませんでした。

4

3 に答える 3

2

SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, 0L);

テキストが挿入された後、私にとっては最適です。

于 2014-03-11T13:54:10.973 に答える
0

デルフィはこれを試してください。

SendMessage(RichEdit1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
于 2016-04-10T08:35:13.550 に答える