4

編集ウィンドウを作成しました。1つの文字列を一方の行に表示し、もう一方の文字列をもう一方の行に表示したいのですが、実行しているコードでは2番目の文字列しか表示されません。以下は私のコードスニペットです:

hWndEdit = CreateWindow("EDIT", // We are creating an Edit control
                                NULL,   // Leave the control empty
                                WS_CHILD | WS_VISIBLE | WS_HSCROLL |
                                WS_VSCROLL | ES_LEFT | ES_MULTILINE |
                                ES_AUTOHSCROLL | ES_AUTOVSCROLL,
                                10, 10,1000, 1000,
                                hWnd,
                                0,
                                hInst,NULL);
SetWindowText(hWndEdit, TEXT("\r\nFirst string\r\n"));

SetWindowText(hWndEdit, TEXT("\r\nSecond string"));

出力: 出力

4

2 に答える 2

9

SetWindowText()ウィンドウの内容全体を一度に置き換えるため、最後の行のみが表示されます。

両方の行を一度に表示する場合は、次の1回の呼び出しでそれらを連結するだけですSetWindowText()

SetWindowText(hWndEdit, TEXT("\r\nFirst string\r\n\r\nSecond string"));

一方、異なる時間に挿入する場合は、EM_SETSELメッセージを使用して編集カレットをウィンドウの最後に配置してから、EM_REPLACESELメッセージを使用して現在のカレットの位置にテキストを挿入する必要があります。記事:

編集コントロールにテキストをプログラムで追加する方法

例えば:

void AppendText(HWND hEditWnd, LPCTSTR Text)
{
    int idx = GetWindowTextLength(hEditWnd);
    SendMessage(hEditWnd, EM_SETSEL, (WPARAM)idx, (LPARAM)idx);
    SendMessage(hEditWnd, EM_REPLACESEL, 0, (LPARAM)Text);
}

AppendText(hWndEdit, TEXT("\r\nFirst string\r\n"));
AppendText(hWndEdit, TEXT("\r\nSecond string"));
于 2013-03-16T08:10:05.207 に答える
2
hWndEdit = CreateWindow("EDIT", // We are creating an Edit control
                                NULL,   // Leave the control empty
                                WS_CHILD | WS_VISIBLE | WS_HSCROLL |
                                WS_VSCROLL | ES_LEFT | ES_MULTILINE |
                                ES_AUTOHSCROLL | ES_AUTOVSCROLL,
                                10, 10,1000, 1000,
                                hWnd,
                                0,
                                hInst,NULL);
        SetWindowText(hWndEdit, TEXT("\r\nFirst string\r\n\r\nSecond string"));

また

        SetWindowText(hWndEdit, TEXT("\r\nFirst string\r\n"));

        char* buf = malloc(100);
        memset(buf, '\0', 100);

        GetWindowText(hWndEdit, (LPTSTR)buf, 100);
        strcat(buf, "\r\nSecond string");
        SetWindowText(hWndEdit, (LPTSTR)buf); 
于 2013-03-16T08:05:59.393 に答える