系統選單無可視化組件,需通過 API 動態修改:GetSystemMenu 獲取句柄,AppendMenu 添加項目,WM_SYSCOMMAND 消息處理點擊事件。
FormCreate 初始化系統選單
void __fastcall TForm1::FormCreate(TObject *Sender) {
AppendMenu(GetSystemMenu(Handle, FALSE), MF_SEPARATOR, 0, "");
AppendMenu(GetSystemMenu(Handle, FALSE), MF_STRING, 200, "前端顯示(&A)");
}
Unit1.h)
#include
// ...
public:
MESSAGE void __fastcall SystemMenuCommand(TWMMenuSelect &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SYSCOMMAND, TWMMenuSelect, SystemMenuCommand)
END_MESSAGE_MAP(TForm)
FormStyle 並更新選單狀態
void __fastcall TForm1::SystemMenuCommand(TWMMenuSelect &Msg) {
TForm::Dispatch(&Msg);
if (Msg.IDItem == 200) {
if (FormStyle == fsNormal) {
FormStyle = fsStayOnTop;
// 重建選單並標記勾選
AppendMenu(GetSystemMenu(Handle, FALSE), MF_SEPARATOR, 0, "");
AppendMenu(GetSystemMenu(Handle, FALSE), MF_STRING, 200, "前端顯示(&A)");
ModifyMenu(GetSystemMenu(Handle, FALSE), 200, MF_CHECKED, 200, "前端顯示(&A)");
} else {
FormStyle = fsNormal;
AppendMenu(GetSystemMenu(Handle, FALSE), MF_SEPARATOR, 0, "");
AppendMenu(GetSystemMenu(Handle, FALSE), MF_STRING, 200, "前端顯示(&A)");
}
}
}
GetSystemMenu(Handle, FALSE) 返回副本。MF_CHECKED 提供視覺反饋。WM_SYSCOMMAND 中精確匹配。