Здравствуйте alexalex, Вы писали:
A>Как таскать окно по экрану не за заголовок, а за любое место окна (формы)???
Тут все довольно просто: (см. WM_NCHITTEST). Перекрываешь его, проверяешь, если мышь находится в клиентской области, то возвращаешь HT_CAPTION (я точно имя не помню). Короче говоря, ьы как бы обманываешь вин, говоря ему, что клиент ареа то же, что и заголовок.
Do not fake yourself ;) ICQ#: 198114726
Re: Как таскать окно по экрану не за заголовок, а за
Здравствуйте alexalex, Вы писали:
A>Как таскать окно по экрану не за заголовок, а за любое место окна (формы)???
Нужно посылать в ответ на WM_MOUSEMOVE окну, которое нужно двигать, месседж WM_SYSCOMMAND с параметром SC_MOVE + 1, добавив при этом проверку на нажатие левой кнопки мыши:
// в процедуре диалога
case WM_MOUSEMOVE:
{
if( MK_LBUTTON == wParam )
{
SendMessage( hWnd, WM_SYSCOMMAND, SC_MOVE + 1, 0 );
// вместо 1 можно прибавлять любое число от 0x1 до 0xF, afair
}
}
break;
Кажется, ничего не напутал, нету под рукой ни MSDN, ни исходника...
Этим способом можно двигать любое окно, не обязательно сам диалог.
Кстати, этот метод не работает для правой кнопки.
---
С уважением,
Игорь
Re: Как таскать окно по экрану не за заголовок, а за
Здравствуйте alexalex, Вы писали:
A>Как таскать окно по экрану не за заголовок, а за любое место окна (формы)???
Самой хороший способ, который позволяет передвинать любое окно.
Единственный недостаток обработки HTCAPTION, что при двойном щелчке оно разворачивается
это может быть не совсем удобно, если у тебя использоуется не окно, а какой-нибудь
WinControl.
Поэтому, наверное самое лучшее
при WM_LBUTTONDOWN:
ReleaseCapture;
SendMessage(hWnd,WM_SYSCOMMAND, SC_MOVE or HTCAPTION, 0);