我用多行编辑控件创建了一个简单的窗口:
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/