Форум: "WinAPI";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
ВнизПлоское окно & меню Найти похожие ветки
← →
toaster © (2005-05-30 14:51) [0]Как сделать форму плоской? Т.е. нужно убрать 3d-рамку.
Такой код не работает:
procedure TMainForm.CreateParams (var Params : TCreatePatams);
begin
inherited;
Params.Style := WS_CAPTION + WS_POPUP + WS_VISIBLE;
Params.ExStyle := 0;
end;
У окна всё равно есть 3Д-рамка.
Заголовок обязательно должен остаться, поэтому bsNone не подходит.
И еще: как полностью перерисовывать popup- и main-меню? Там та же проблема с 3Д-рамкой, которую не нужно рисовать.
Заранее благодарен.
← →
DVM © (2005-05-30 15:10) [1]
> Заголовок обязательно должен остаться, поэтому bsNone не
> подходит.
Рамка и заголовок рисуются вместе. Точнее заголовок расположен на рамке. Бывает окно с рамкой без заголовка, но заголовок без рамки - вряд ли.
Вывод - делать свою иммитацию заголовка.
← →
toaster © (2005-05-30 15:21) [2]Имитация загловка не подходит, т.к mainmenu в таком случае будет выше заголовка.
← →
DVM © (2005-05-30 15:22) [3]
> т.к mainmenu в таком случае будет выше заголовка.
Да ну? Смотря как иммитировать.:)
← →
DVM © (2005-05-30 15:41) [4]
> toaster © (30.05.05 15:21) [2]
Когда окну приходит WM_NCCALCSIZE можно задать любой размер неклиентской области окна - меню останется внутри клиентской, а на неклиентской рисуй заголовок.
← →
toaster © (2005-05-30 15:49) [5]А можно про это поподробнее?
В MSDN как-то непонятно написано, не могли бы вы небольшой примерчик подкинуть?
← →
Игорь Шевченко © (2005-05-30 15:55) [6]DVM © (30.05.05 15:41) [4]
Вроде как меню (которое menubar) тоже относится к неклиентской области.
← →
alpet © (2005-05-30 16:01) [7]Перехвати WM_NCPAINT сообщение, не трогая стили и рисуй рамку как тебе нужно.
← →
DVM © (2005-05-30 16:18) [8]
> Игорь Шевченко © (30.05.05 15:55) [6]
> DVM © (30.05.05 15:41) [4]
>
> Вроде как меню (которое menubar) тоже относится к неклиентской
> области.
Может быть и так, проверить надо.
> toaster © (30.05.05 15:49) [5]
> А можно про это поподробнее?
http://www.firststeps.ru/mfc/winapi/win/r.php?141
← →
toaster © (2005-05-30 16:18) [9]> alpet
Мне рамка не нужна совсем. Я так полагаю, в настройках системы сей параметр можно выставить любым, также как и размер заголовка. Мне надо, чтобы окно программы при любых настройках системы выглядело так, как я задумал. Конечно, можно самому все контролы, рамку, меню рисовать, но писать всё это слишком долго.
Кроме того, хотелось бы узнать, как это делать правильно с точки зрения корректности поведения окна (хочется, чтобы вело себя стандартным образом, но рисовалось так, как мне надо).
А насчёт меню может подскажет кто? Как НЕ рисовать его 3Д-рамку?
Через MeasureItem/OwnerDraw можно самому нарисовать всё, кроме рамки.
В JEDI-VCL есть компоненты TJvMainMenu & TJvPopupMenu, но они рисуют только определённый набор стилей (Standard, XP, etc). Более того, со стилем XP все менюшки плоские => это можно сделать без полного написания замены менюшек. Хотя кто знает, как это в jvcl сделано... Хотя похоже на то, что это стандартное меню с собственной перерисовкой.
← →
DVM © (2005-05-30 16:20) [10]
> alpet © (30.05.05 16:01) [7]
> Перехвати WM_NCPAINT сообщение, не трогая стили и рисуй
> рамку как тебе нужно.
Если он не будет трогать стили рамка у окна все равно будет.
← →
DVM © (2005-05-30 16:22) [11]
> А насчёт меню может подскажет кто? Как НЕ рисовать его 3Д-рамку?
Забей, я пытался долго сделать - невозможно это. Особенно во всяких XP.
TJvMainMenu & TJvPopupMenu тоже подглючивают при перерисовке рамки так же как и у меня.
← →
alpet © (2005-05-30 16:24) [12]DVM © (30.05.05 16:20) [10]
Вообще то не будет, хотя для этого возможно придется стиль класса окна регулировать. Только вот перерисовка неклиенской области окна дело очень и очень туманное, и в MSDN отображено не совсем верно, так что лучше за нее и не браться, а на самом деле поискать более легкие пути.
← →
DVM © (2005-05-30 16:26) [13]
> Только вот перерисовка неклиенской области окна дело очень
> и очень туманное
это точно
← →
Игорь Шевченко © (2005-05-30 16:26) [14]
> А насчёт меню может подскажет кто? Как НЕ рисовать его 3Д-рамку?
Использовать свои оконные классы, как, например, в MS Office или в Developer Express (Express Bars), та самая имитация меню.
← →
toaster © (2005-05-30 16:27) [15]> DVM
За ссылку спасибо, но дословно перевести статью из MSDN я и сам мог.
Для меня остался неясным смысл этой статьи. Мне не понятно, к примеру, как указать системе, что рамка у моего окна должна быть шириной 0 пикселей, заголовок - 10 пикселей.
Насчёт примера: я его просил, надеясь на то, что по счастливому стечению обстоятельств вам приходилось решать похожую задачу, вам не будет жалко поделиться рабочим кодом и вам не будет жалко потратить немного своего свободного времени, чтобы менее опытный прграммист быстрее с этим разобрался. Если же нет - буду сам разбираться, MSDN читать обучен.
← →
Игорь Шевченко © (2005-05-30 16:30) [16]DVM © (30.05.05 16:18) [8]
А что там проверять, создаешь окно с меню, обводишь рамкой клиентскую область окна.
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
procedure FormPaint(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Brush.Color := RGB(255,0, 0);
Canvas.FrameRect (ClientRect);
end;
end.
← →
toaster © (2005-05-30 16:34) [17]У меня голова уже кругом идёт. В одном месте говорят, что это сделать можно и надо, здесь мне говроят, что это слишком сложно, и лучше за это не браться..
Хотя я видел несколько программ, где менюшки были в XP-cтиле, вроде нигде не глючили (Iintranet Chat, там даже тень от меню сделана).
В Trillian"e весь интерфейс похож на стандартный по поведению, но выглядит интереснее. Хотя, как я понял, он весь самодельный.
Всем спасибо, у меня вопросов больше нет..
Буду эксперементировать c WM_NC***...
← →
Игорь Шевченко © (2005-05-30 16:39) [18]toaster © (30.05.05 16:34) [17]
Сделать можно, но сложно.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.016 c