什麼可能導致ShowCaret
和SetCaretPos
失敗,ERROR_ACCESS_DENIED
?ShowCaret和SetCaretPos與ERROR_ACCESS_DENIED失敗
我在WM_CREATE
創建插入符號和顯示WM_COMMAND
插入符。 我檢查了並且CreateCaret
正在成功執行。
他們應該在同一個線程中運行。
我使用SetScrollInfo
和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;
是窗口的窗口?由調用「ShowCaret」和「SetCaretPos」的進程創建?可能的故障模式是密碼保護的屏幕保護程序。哪個版本的操作系統? – 2013-03-02 15:56:38
@DavidHeffernan是我的窗口。 Windows 7 x64 – Josh 2013-03-02 15:59:37
您可以在代碼中顯示您調用這些API函數的位置,並讓我們看看您的錯誤檢查代碼。 – 2013-03-02 16:07:54