Я создал простое окно с многострочным элементом управления Edit:
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 */
}
Я заметил, что если я отправлю сообщение WM_SETFOCUS до EM_REPLACESEL, то ошибки не будет:
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 */
}
Как я могу решить эту проблему?Нужно ли мне отправлять сообщение WM_SETFOCUS перед EM_REPLACESEL каждый раз, когда я хочу добавить какой-либо текст в мой блок редактирования?
Спасибо за помощь!