Блокировка фокуса и захват в определенное окно - PullRequest
0 голосов
/ 09 апреля 2009

Я могу вызвать setfocus и setcapture, используя механизм переключения, и в OnLButtonDown убедитесь, что сообщение не передается, но, похоже, это не сработает, когда вы щелкнете левой кнопкой мыши. Есть ли способ убедиться, что окно, которое имеет захват и фокусировку, не сдается?

1 Ответ

2 голосов
/ 10 апреля 2009

Для выбора цвета попробуйте прочитать эту статью о получении цветов из любого места на экране.

Эта - более полная утилита, позволяющая вам делать то, что вы хотите. Разница заключается в захвате остановок по комбинации клавиш [Alt + Ctrl + P], где вы хотите остановиться по щелчку.

Во второй ссылке вам будут полезны следующие вызовы функций:

SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
RegisterHotKey(m_hWnd, 0x1FEB, MOD_CONTROL | MOD_ALT, 0x50);

Первый сохраняет окно активным, а второй регистрирует Alt + Ctrl + P (и при нажатии на него окно получит событие WM_HOTKEY, при котором вы можете прекратить захват цветов). К сожалению, вы не можете использовать RegisterHotKey с кнопками мыши. Вы хотите, чтобы посмотреть в SetWindowsHookEx

С помощью SetWindowsHookEx вы можете быть уверены, что ваше приложение будет получать события даже без фокуса. Вызовите SetWindowsHookEx с хуком "WH_MOUSE" вместе с Процедура мыши .

Именно в этой процедуре вы получите сообщение мыши, прекратите захват, куда движется мышь (заблокируйте цвет), и используйте SetWindowPos, чтобы переместить ваше окно к вершине. Затем отмените регистрацию вашего хука с помощью UnhookWindowsHookEx .

Это довольно много вещей, которые вам, возможно, придется изучить, но на всех страницах MSDN, на которые я ссылался, есть масса информации, которая должна вам помочь, не говоря уже о том, готовы ли вы согласиться с ключом. комбинация вместо второй ссылки идеально подходит для вас.

Надеюсь, это поможет.

...