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

eGUI++:為原生 C++ 帶來 Windows Forms 風格的 GUI 開發體驗

     編輯:關於C++

設計初衷:隱藏 Win32 複雜度,回歸 C++ 本質

傳統 Win32/MFC/WTL 開發痛點:底層 API 繁雜 (CreateWindowEx、WM_* 消息、C 結構)、資源 ID 管理繁瑣、事件處理需手動查詢 e.sender。eGUI++ 目標:純 C++ 類別操作、零 windows.h、編譯期安全、IntelliSense 全程輔助。

核心架構特色

1. 智慧指標管理視窗生命週期

wnd<T> 為引用計數智慧指標,視窗銷毀由用戶關閉或 delete_() 觸發。存取已銷毀視窗拋出異常,支援 is_valid(w)、try_wnd_cast<T>() 安全檢查。

wnd<form> f = new_<form>(parent);
wnd<button> b = new_(f, rect(10,10,200,20));
b->events.click += &my_func;
delete_(b); // 或用戶關閉視窗自動失效

2. 屬性系統與旗標直觀操作

屬性支援運算子重載,旗標以巢狀枚舉 + 代碼補全呈現:

w->text = "hello"; w->text += " world";
w->style |= w->style.tiled; // 旗標補全
property<int, os::win_xp> some_prop; // 作業系統版本約束,編譯期檢查

3. 視窗分類:Control 與 Form

  • Control:顯示/編輯資料 (Button、Edit、List...)。
  • Form:容器,承載控制項與邏輯。對話框、訊息盒皆為 Form。
typedef form dialog;
msg_box<mb::ok | mb::cancel>("確定?") == mb::ok; // 編譯期驗證按鈕組合合法性

Form 開發:資源編輯器深度整合

「新增類別」精靈生成 .h/.cpp/_form_resource.h。資源編輯器中控制項名稱自動去除 IDC_ 前綴,直接映射為 wnd<T> 成員:

// login_form_resource.h (庫自動維護)
struct form_resource::login {
    wnd<edit> username, passw;
    wnd<button> ok, cancel;
    // 通知轉發樁碼自動生成...
};

使用時直接存取:passw->text == "secretword",visible = false 隱藏視窗。零 DDX、零訊息映射、零資源 ID 硬編碼。

事件與通知:雙向路由、易於擴充

  • 侵入式:繼承控制項覆寫 on_event(ev::type&)。ev:: 代碼補全列出所有事件,e. 顯示事件資料。
  • 非侵入式:non_intrusive_handler 監聽多視窗通用行為 (如調整大小、換膚)。
  • 通知即事件:WM_COMMAND/NOTIFY 自動路由至控制項再冒泡至父視窗。Form 中以 on_change(ev::change&, ctrl_name_) 區分來源控制項。
// Form 內處理特定控制項通知
void login::on_change(edit::ev::change&, username_) {
    cout << "name=" << username->text;
}
// 擴充 ListView:標籤編輯時顯示 ComboBox
struct list_with_combo : list {
    void on_begin_label_edit(ev::begin_label_edit& e) {
        e.allow_default = false; combo->rect(...); combo->visible = true;
    }
    wnd<combo_box> combo;
};

佈局與調整大小:宣告式關係定義

非侵入式 resize(ctrl, axis, mode):sizeable (隨視窗縮放)、moveable (隨視窗移動)。單行代碼替代手動 on_size 計算。

resize(name, axis::x, sizeable);
resize(desc, axis::x | axis::y, sizeable);
resize(ok, axis::x | axis::y, moveable);

Visual Studio 整合與未來展望

  • 專屬「新增 eGUI Form」精靈、類 VB 的屬性/事件面板 (已處理事件粗體顯示)。
  • 資源編輯器監視,自動同步 _form_resource.h。
  • 資料綁定願景:list_ctrl->bind(employees) 同步 STL 容器與 UI。

「eGUI++ 讓 GUI 程式設計再次成為享受。」—— 專案網址:torjo.com

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved