2009-04-09 3 views
0

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

+0

вы просто не должны .... –

+0

В данном конкретном случае это для цветового пробоотборника. – 2009-04-09 17:11:47

ответ

2

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

This one - это более полная утилита, давайте сделаем то, что вы хотите. Разница заключается в захвате остановок на комбинацию клавиш [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» вместе с Mouse Procedure.

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

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

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