Я могу вызвать setfocus и setcapture с помощью механизма переключения, а в OnLButtonDown убедитесь, что сообщение не передается, но похоже, что он не срабатывает, как только вы нажмете клик. Есть ли способ убедиться, что окно, которое имеет захват и фокус, не дает его?Блокировка фокуса и захвата в определенное окно
ответ
Для выбора цвета попробуйте прочитать 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, с которыми я связал вас, есть много информации, которая должна помочь вам, не говоря уже о том, хотите ли вы согласиться с вместо этого вторая ссылка идеально подходит для вас.
Надеюсь, что это поможет.
вы просто не должны .... –
В данном конкретном случае это для цветового пробоотборника. – 2009-04-09 17:11:47