何が原因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;