我用多行编辑控件创建了一个简单的窗口:

Edit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), NULL,
                    WS_CHILD | WS_VISIBLE | ES_MULTILINE,
                    20, 200, 200, 200,
                    hWnd, (HMENU)EDIT, GetModuleHandle(NULL), NULL);

如果我使用WM_SETTEXT消息设置文本,则不会收到错误提示,但是如果我使用EM_REPLACESEL
我收到错误5(ERROR_ACCESS_DENIED):
SendMessage(GetDlgItem(hWnd, EDIT), EM_REPLACESEL, 0, (LPARAM)TEXT("\r\nSome text"));
if (GetLastError()) {
    /* Error 5 ERROR_ACCESS_DENIED */
}

EM_SETSEL也存在同样的问题:
SendMessage(GetDlgItem(hWnd, EDIT), EM_SETSEL, (WPARAM)(0),(LPARAM)(-1));
SendMessage(GetDlgItem(hWnd, EDIT), EM_REPLACESEL, 0, (LPARAM)TEXT("\r\nSome text"));
if (GetLastError()) {
    /* Error 5 ERROR_ACCESS_DENIED */
}

我注意到,如果我在EM_REPLACESEL之前发送WM_SETFOCUS消息,则没有错误:
SendMessage(GetDlgItem(hWnd, EDIT), WM_SETFOCUS, (WPARAM)GetDlgItem(hWnd, EDIT), 0);
SendMessage(GetDlgItem(hWnd, EDIT), EM_REPLACESEL, 0, (LPARAM)TEXT("\r\nSome text"));
if (GetLastError()) {
    /* NO ERRORS */
}

我该如何解决这个问题?
每次要将一些文本附加到编辑框时,是否都必须在EM_REPLACESEL之前发送WM_SETFOCUS消息?

感谢帮助!

最佳答案

您可以先简单地使用EM_SETSEL,然后再进行EM_REPLACESEL

例:

SendMessage(hwnd, EM_SETSEL, WPARAM(0), LPARAM(-1) );
SendMessage(hwnd, EM_REPLACESEL, WPARAM(TRUE), LPARAM(str) );

关于c++ - WinAPI-将文本追加到编辑框的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3396046/

10-11 19:53
查看更多