Консультация № 137176
17.05.2008, 09:20
0.00 руб.
0 2 2
Добрый день!
Подскажите пожалуйста, как решить проблему, возникающую при обработке перемещения окна? Дело в том, что при быстром перемещении, мышь "теряет окно по пути" =)
Обрабатывать wm_ncmousemove ?

Приложение:
// глобальноbool drMOVE=false;int drOLDX,drOLDY;// WndProccase WM_MOUSEMOVE: if(drMOVE==true){ WORD xPos=LOWORD(lParam), yPos=HIWORD(lParam); GetWindowRect(hWnd, &CLRECT); MoveWindow(hWnd, CLRECT.left-drOLDX+xPos, CLRECT.top -drOLDY+yPos, CLRECT.right - CLRECT.left, CLRECT.bottom - CLRECT.top, true); } break;case WM_LBUTTONDOWN: WORD nCapHeight = GetSystemMetrics(SM_CYCAPTION); WORD xPos=LOWORD(lParam), yPos=HIWORD(lParam); if(yPos<=nCapHeight){ drMOVE=true;drOLDX=xPos;drOLDY=yPos; } break;case WM_LBUTTONUP: drMOVE=false; break;

Обсуждение

Неизвестный
18.05.2008, 16:00
общий
это ответ
Здравствуйте, Dadrum!

Используйте SetCapture, когда происходит клик, тогда все сообщения от мыши будут идти к вам, даже если мышь вышла за пределы окна. На отпускании не забудьте ReleaseCapture.
Неизвестный
19.05.2008, 06:42
общий
это ответ
Здравствуйте, Dadrum!

лучше для перемещения окна использовать сообщение WM_NCHITTEST, которое прилетает в обработчик, чтобы узнать у него, в какой части окна находится мышь. Это через это сообщение система узнаёт, где заголовок, где бордеры, где что. Соответсвенно, нужно просто самому вернуть нужно значение в нужном месте и система всё сделает сама.
Форма ответа