Я создал простое окно с многострочным Edit Control:
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 каждый раз, когда я хочу добавить какой-либо текст в свое поле редактирования?
Спасибо за помощь!
SetLastError(0)
отправите сообщениеEM_REPLACESEL
? - person Adam Rosenfield   schedule 22.01.2011