Добрый день!
Нужно реализовать прилипания окна к краю экрана (например, пока только к правому), это с горем пополам получилось с помощью следующего кода со своим обработчиком WM_MOVING:
| Код | //В классе формы private: // User declarations void __fastcall CatchDrag(TMessage &Msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_MOVING, TMessage, CatchDrag); END_MESSAGE_MAP(TForm)
|
| Код | //Реализация void __fastcall TCallForm::CatchDrag(TMessage &Msg) { TForm::Dispatch(&Msg); if(Msg.Msg == WM_MOVING) { PRECT pCurrentRec = PRECT(Msg.LParam); int LeftBeforeMove = pCurrentRec->left; //Текущие координаты при перемещение верхнего левого окна формы int TopBeforeMove = pCurrentRec->top; if (LeftBeforeMove+CallForm->Width >= (Screen->DesktopWidth - 20) && LeftBeforeMove+CallForm->Width <= (Screen->DesktopWidth)) { CallForm->Left = Screen->DesktopWidth - CallForm->Width + 3; } } }
|
CallForm - моя форма, прилипает она к краю при приближении к краю менее 20 пикселей. Все работает, но коряво. Т.е. при приближение формы к краю она липнет, но тут же отлипает и возвращается на исходную позицию, где курсор... Либо если аккуратно не двигать курсором после прилипания - она прилипает, но при отпускание мыши - возвращается назад, т.е. то туда, то назад. Думал, может быть программно менять расположение курсора на экране, типа как он должен быть после прилипания на объекте (он получается смещен на 20 px), но потом посмотрел как реализовано в том же винампе и аналоге и понял, что это не выход, так как там курсор после прилипания к краю остается на своем прежнем месте. В чем загвоздка, подскажите как исправить!!! |