什么可能导致ShowCaret
和SetCaretPos
失败ERROR_ACCESS_DENIED
?
我正在创建插入符号WM_CREATE
并将插入符号显示在WM_COMMAND
. 我检查并CreateCaret
成功执行。
它们应该在同一个线程中运行。
我在调用之前使用SetScrollInfo
and来更新窗口的内容。但我不认为这些会导致失败..InvalidateRect
ShowCaret
ShowCaret
相关代码:
#define CHAR_WIDTH 7
#define CHAR_HEIGHT 12
case WM_CREATE:
CreateCaret(hWnd, NULL, CHAR_WIDTH, 2);
UpdateScrollbar(hWnd); // calls SetScrollInfo. initially nMin and nMax are both 0
return 0;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_OPENFILE:
if (DoOpenFile(hWnd))
{
InvalidateRect(hWnd, NULL, TRUE);
UpdateScrollbar(hWnd);
if (SetCaretPos(CHAR_WIDTH * 12, CHAR_HEIGHT - 1) == 0)
{
char ss[33];
sprintf_s(ss, "DEBUG 2: %d\n", GetLastError());
OutputDebugString(ss);
}
if (ShowCaret(hWnd) == 0)
{
char ss[33];
sprintf_s(ss, "DEBUG 3: %d\n", GetLastError());
OutputDebugString(ss);
}
}
break;
}
return 0;