По моему замыслу окно должно раскрываться на весь экран по альт+ентер, оно раскрывается, но обратно схлопывается при повторном нажатии альт+ентер неправильно.
uses Windows, Messages;
var C: TWndClass; H: hWnd; A: THandle; M: TMsg;
const acc: array [0 .. 2] of word = (fVirtKey or fAlt, vk_Return, 1);
function WP(H: hWnd; M: uInt; W: wParam; L: lParam): longint; stdcall; begin Result := 0; case M of wm_Command: begin case LoWord(W) of 1: begin if IsZoomed(H) then begin ShowWindow(H, sw_Restore); SetWindowLong(H, gwl_Style, ws_OverlappedWindow or ws_Visible); вот в этом месте!!! end else begin SetWindowLong(H, gwl_Style, integer(ws_PopUp or ws_Visible)); ShowWindow(H, sw_ShowMaximized); end; end; end; end; wm_Destroy: begin PostQuitMessage(0); Exit; end; end; Result := DefWindowProc(H, M, W, L); end;
развернулось во весь экран и без рамки, вернулось с рамкой и кнопками закрыть, развернуть. а надо как? чтобы маленькое окно тоже было без рамки? или у большого была рамка?
TarasBer
2.12.2010 18:16
> вернулось с рамкой и кнопками закрыть, развернуть.
Блин, почему тогда у меня вернулось без рамки...
Добавлено через 2 мин. А, оно только рисуется без рамки, а если его свернуть-развернуть, то рамка появляется. Короче, надо какую-то перерисовку добавить походу. Посылка wm_Paint не помогла, UpdateWindow не помогает, что такое...
volvo
2.12.2010 18:21
Используй RedrawWindow для перерисовки окна. Обязательно в последнем параметре укажи RDW_FRAME...
TarasBer
2.12.2010 18:51
> Обязательно в последнем параметре укажи RDW_FRAME...
А во втором и третьем? Ну в первом я указал H, а вот дальше... nil и 0 не прокатывают.
Client
2.12.2010 18:53
h,0,0,RDW_FRAME отработало
volvo
2.12.2010 18:54
RedrawWindow(H, nil, 0, RDW_FRAME or RDW_INVALIDATE);
должно восстановить рамку. Трудно вслепую советовать, я сейчас под Семеркой, тут рамка появляется сразу, без перерисовки окна...
TarasBer
2.12.2010 18:55
InvalidateRect(H, nil, False); тоже не помог...
Добавлено через 2 мин. > h,0,0,RDW_FRAME отработало
Ну у тебя и так работало.
> RedrawWindow(H, nil, 0, RDW_FRAME or RDW_INVALIDATE)
Нифига...
Если что, у меня классическая тема, всё выключено, кроме галочки "отображать содержимое при перетаскивании", она мне нужна для отладки интерфейса. Выключение галочки не помогло.
volvo
2.12.2010 19:33
SetWindowPos(H, 0, 0, 0, 0, 0, SWP_FRAMECHANGED or SWP_NOZORDER or SWP_NOMOVE or SWP_NOSIZE);
после смены стиля - тоже не помогает? SWP_FRAMECHANGED как бы должно намекнуть системе, что надо перерисовать заголовок...
TarasBer
2.12.2010 19:58
О, а вот через SetWindowPos заработало. Проверю дома заодно. Просто прикол из 1го поста проявился на двух хрюшах, настроенных одинаково. Только у одной сервис-пак второй, у другой третий.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.