Все очень просто. Оконной процедуре посылается сообщение WM_LBUTTONDOWN, если нажата левая клавиша мыши и WM_LBUTTONUP, если она отпущена. С правой аналогично.
Во всех этих сообщениях значение lParam содеpжит позицию мыши. Hижнее слово - это x-кооpдината, веpхнее слово - y-кооpдината веpхнего левого угла клиентской области окна. wParam содеpжит инфоpмацию о состоянии кнопок мыши, Shift'а и Ctrl'а.
Например:
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
<...>
static POINT curs_cord; //структура curs_cord типа POINT будет содержать коорд. курсора
static bool MouseClick=FALSE; //переменная состояния клавиши мыши, изначально - "не нажата"
HDC hdc;
PAINTSTRUCT ps;
<...>
switch (uMsg)
{
case WM_LBUTTONDOWN: //если нажата лев. клавиша.. .
MouseClick=TRUE;
break;
case WM_MOUSEMOVE: //если мышь переместили
curs_cord.x = LOWORD(lParam); //сохраняем свежие значения местонахождения
curs_cord.y = HIWORD(lParam);
InvalidateRect(hWnd, NULL, 0); //заставляем послать процедуре WM_PAINT
break;
case WM_LBUTTONUP: //если лев. клавиша отпущена.. .
MouseClick=FALSE;
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
if(MouseClick){ //если кнопка была нажата
COLORREF color1 = RGB(255,0,0);
SetPixel(hdc, curs_cord.x, curs_cord.y, color1); //то рисуем кубик из 4 пикселов
SetPixel(hdc, curs_cord.x+1, curs_cord.y, color1);
SetPixel(hdc, curs_cord.x, curs_cord.y+1, color1);
SetPixel(hdc, curs_cord.x+1, curs_cord.y+1, color1);
}
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
Такая программка будет рисовать линии из красных точек мышью, пока нажата левая клавиша.
На полную оконную процедуру не притендую )), очертил так, чтобы было понятно, что где.
Другие языки программирования и технологии
WinApi + мышь. как проверить, нажата ли кнопка мыши?..
Подучи сообщения. Все вопросы типа "как проверить" в WinApi сводятся к вопросу "какое сообщение (и каким образом) обработать".
Похожие вопросы
- Объясните, пожалуйста, что за "много действий"? Нажать на кнопку "Подписаться" - это много действий?
- как отключить имитацию нажатия правой кнопки мыши на палншете wacom intuos pen and touch?
- Вопрос про usb мыши?
- 2 системных блока + 2 монитора + 2 мыши - куда деваться?
- Вопрос к дизайнерам про коврик для мыши и про саму мышь
- Мышь дизайнера...
- Как вернуть вращение детали при нажатии колёсика мыши в SolidWorks?
- Помогите, как копировать и вставить текст, тлько при помощи горячих клавиш а не правой кнопки мыши ???
- Как в visual basic сделать запуск алгоритма щелчком прав. кнопки мыши? Как связать 2 формы и вывести их на экран вместе?
- Как защитить фото от копирования? Желательно, отключить правую кнопку мыши или, может, есть другие варианты?