首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++Builder 定制系統選單:添加「前端顯示」切換功能

     編輯:關於C++

實現思路

系統選單無可視化組件,需通過 API 動態修改:GetSystemMenu 獲取句柄,AppendMenu 添加項目,WM_SYSCOMMAND 消息處理點擊事件。

完整實現步驟

1. FormCreate 初始化系統選單


void __fastcall TForm1::FormCreate(TObject *Sender) {
    AppendMenu(GetSystemMenu(Handle, FALSE), MF_SEPARATOR, 0, "");
    AppendMenu(GetSystemMenu(Handle, FALSE), MF_STRING, 200, "前端顯示(&A)");
}

2. 聲明消息處理映射 (Unit1.h)


#include 
// ...
public:
    MESSAGE void __fastcall SystemMenuCommand(TWMMenuSelect &Msg);
BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_SYSCOMMAND, TWMMenuSelect, SystemMenuCommand)
END_MESSAGE_MAP(TForm)

3. 處理邏輯:切換 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 提供視覺反饋。
  • 命令 ID (200) 需在 WM_SYSCOMMAND 中精確匹配。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved