unit dy219; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private procedure sysmenu(var msg: twmmenuselect);message wm_syscommand; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin i := getsystemmenu(handle,false); appendmenu(i,mf_separator,0,nil); appendmenu(i,mf_string,100,'我的菜單(&E)'); end; procedure TForm1.sysmenu(var msg: twmmenuselect); begin if msg.IDItem = 100 then showmessage('您選擇了自己添加的菜單!') else inherited; end; end.
API函數
function GetSystemMenu(hWnd:HWND;bRevert:BOOL):HMENU;stdcall;
參數說明:
hWnd: 所要取得系統菜單句柄的目標窗口句柄。
bRevert:是否修改原始菜單。
返回一個HMENU型的菜單句柄。
通過GetSystemMenu得到句柄后可以使用AppendMenu函數為系統菜單增加一個菜單項,該函數原型為:
function AppendMenu(hMenu:HMENU;uFlags,uIDNewItem:UNIT;lpNewItem:Pchar):BOOL;stdcall;
參數說明:
hMenu: 用GetSystemMenu函數得到的菜單句柄。
uFlag,uIDNewItem:菜單唯一標志,彈出菜單唯一標志。
lpNewItem:菜單的類型。
容易出現問題:
缺少代碼 message wm_syscommand;這句代碼的主要作用是:A window receives this message when the user chooses a commond from the window menu.而如果注釋了inherited ,則所有系統菜單都不能用。
http://blog.csdn.net/zang141588761/article/details/51992368