Форум: "WinAPI";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
ВнизSystem Menu Найти похожие ветки
← →
bent (2002-12-11 07:10) [0]Как вазвать системное меню окна? Иещё один вопрос: Можно ли добавить свой пункт в меню приложения(то, которое появляется, когда мы на кнопке приложения на таскбаре правой кнопкой тыркнем) и как это сделать?
← →
Song (2002-12-11 08:36) [1]Что значит "вызвать"?
Добавить пункт - InsertMenuItem()
← →
apay (2002-12-11 09:13) [2]Получить его:
var
SysMenu: HMENU;
...
SysMenu := GetSystemMenu( FormX.Handle, False );
переделываем его:
(см. "Menu Functions" в WinAPI help )
с помощью WinAPI >
Отобразить его:
TrackPopupMenuEx( SysMenu, ... );
P.S.
WinAPI help иногда и читать полезно!!!
← →
bent (2002-12-11 18:24) [3]Теперь ещё один вопрос. Меню появляется, но в WinAPI help пишут: "... The window does not receive a WM_COMMAND message from the menu until the function returns." А функция возвращает значение только после токо, как мы кликнем на какой-нибудь пункт в меню, так что форма не реагирует на WM_COMMAND, посылаемые ей меню. Так чёж делать-то?
← →
apay (2002-12-11 21:34) [4]WinAPI help иногда и читать полезно!!!
от системного меню идут WM_SYSCOMMAND
← →
bent (2002-12-11 22:05) [5]To apay © (11.12.02 21:34)
Да какая разница, форма то всё равно не риагирует
← →
Юрий Зотов (2002-12-11 23:23) [6]type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
end;
...
const
SC_MyMenuItem = WM_USER + 1;
procedure TForm1.FormCreate(Sender: TObject);
begin
AppendMenu(GetSystemMenu(Handle, FALSE), MF_SEPARATOR, 0, "");
AppendMenu(GetSystemMenu(Handle, FALSE), MF_STRING, SC_MyMenuItem, "Hello!")
end;
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MyMenuItem then ShowMessage("Hello!") else inherited
end;
← →
bent (2002-12-12 07:19) [7]To Юрий Зотов © (11.12.02 23:23)
Да добовлять пункт я умею, мне надо, чтобы форма реагировала на стандартные сообщения,но Win Help пишут:"The window does not receive a WM_COMMAND message from the menu until the function (TrackPopupMenuEx()) returns." Может есть какой-то другой срособ
отобразить системное меню?
← →
Юрий Зотов (2002-12-12 11:03) [8]Читаем исходный вопрос.
1. Как вызвать системное меню окна?
Ответ был дан - TrackPopupMenu(Ex).
2. Можно ли добавить свой пункт в меню приложения ... и как это сделать?
Ответ тоже был дан, в виде работающего примера.
Что же еще нужно-то? При чем тут WM_COMMAND и стандартные сообщения? Неясно.
Вы бы рассказали о задаче подробнее. Что-нибудь придумаем.
← →
bent (2002-12-12 15:50) [9]Я создаю форму без CaptionBar(вместо CaptionBar - label). И мне нужно, чтобы этот Label был похож на CaptionBar. И я хочу, чтобы при нажатие правой кнопки мыши на label"e появлялось системное меню формы со стандартными пунктами и при выборе одно из пунктов, приложение выполняло стандартное действие, соответствующее этому пункту меню(например при выборе пункта "свернуть" приложение сворачивалось в TaskBar).
← →
Cobalt (2002-12-13 01:22) [10]a-la apay ©
английский тоже неплохо учить вместе с русским
hWnd
Identifies the window that owns the shortcut menu. This window receives all messages from the menu. The window does not receive a WM_COMMAND message from the menu until the function returns.
------------------------------
Указывает окно, которое владеет шорткатами меню. Это окно получает все сообщения от меню (типа WM_MEASUREITEM and WM_DRAWITEM messages). Окно не получает сообщение WM_COMMAND от меню до тех пор, пока ф-ия не возвратит результат.
В общем, форма не будет замораживаться, потому, что (подозреваю), в этой ф-ии есть цикл приема-обработки сообщений. Имелось в виду, что как только один из пунктов будет выбран, то ф-ия вернет результат и в очереди будет сообщение WM_COMMAND.
← →
bent (2002-12-13 07:18) [11]Подождите, я чё-то не чё не понял. Что ине нужно сделать?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.055 c