傳統 Win32/MFC/WTL 開發痛點:底層 API 繁雜 (CreateWindowEx、WM_* 消息、C 結構)、資源 ID 管理繁瑣、事件處理需手動查詢 e.sender。eGUI++ 目標:純 C++ 類別操作、零 windows.h、編譯期安全、IntelliSense 全程輔助。
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); // 或用戶關閉視窗自動失效
屬性支援運算子重載,旗標以巢狀枚舉 + 代碼補全呈現:
w->text = "hello"; w->text += " world";
w->style |= w->style.tiled; // 旗標補全
property<int, os::win_xp> some_prop; // 作業系統版本約束,編譯期檢查
typedef form dialog;
msg_box<mb::ok | mb::cancel>("確定?") == mb::ok; // 編譯期驗證按鈕組合合法性
「新增類別」精靈生成 .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);
_form_resource.h。list_ctrl->bind(employees) 同步 STL 容器與 UI。「eGUI++ 讓 GUI 程式設計再次成為享受。」—— 專案網址:torjo.com