2013-07-22 4 views
0

Мне нужно скрыть курсор, когда нажаты левая и правая кнопки. Оказывается, мой код работает как ожидалось, за исключением незначительного сглаживания с движением мыши.ShowCursor не действует до тех пор, пока мышь не будет перемещена.

Когда я вызываю курсор ShowCursor (FALSE), курсор скрывается, как ожидалось. После этого, когда я вызываю ShowCursor (TRUE), курсор не появляется снова до следующего перемещения мыши. Мое мнение - его просто не нарисовано до появления события мыши. Есть ли способ заставить курсор перерисовываться?

Код:

void SG::CursorManager::hideCursor(void) { 
    while(ShowCursor(FALSE) >= 0); 
} 

void SG::CursorManager::showCursor(void) { 
    while(ShowCursor(TRUE) <= 0); 
} 

ответ

6

Если я правильно понял, как курсор работать в Windows, вы должны вызвать SetCursor(IDC_...) сделать курсор видимым немедленно.

Дело в том, что курсор обычно устанавливается из окна внизу, в качестве ответа на сообщение WM_SETCURSOR. Идея ShowCursor() заключается в том, что она отключает/разрешает сообщение WM_SETCURSOR. При отключении cursr он также делает SetCursor(NULL) так, что курсор исчезает. Но при включении курсора он не может позвонить SetCursor(IDC_...), потому что он не знает, какой курсор должен отображаться. Поэтому он ждет, пока не будет сформирован следующий WM_SETCURSOR, пока он не будет перемещен.

+0

Прохладный разъяснения. Но, к сожалению, это не сработало для моего дела. Я попытался SetCursor (LoadCursor (GetModuleHandle (NULL), IDC_HAND)), а также попытался установить положение курсора (SetCursorPos (current.x + 100, current.y);), чтобы искусственно запустить mousemove - ни одна из них не работала. Я использую OIS в качестве библиотеки входных событий. Как я знаю, он использует внутренний ввод по умолчанию. Может быть, это как-то связано с моей проблемой. – Alex

+0

Есть ли способ генерировать искусственное сообщение WM_SETCURSOR? – Alex

+0

@ user1480424: Вы можете отправить его вручную с помощью 'SendMessage()', но вам нужно выяснить, что такое 'wParam' и' lParam'. – rodrigo

Смежные вопросы