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

TangramMini 組件開發教程(三):對話框尺寸自適應、標籤管理與視窗持久化

     編輯:關於VC++

前言

承接前兩篇,本教程將簡單對話框升級為具備「視窗尺寸自適應、分頁標題自定義、啟動預設分頁、框架狀態儲存/還原」的軟體雛形。

1. 對話框尺寸自適應:WM_SIZE + MoveWindow

修改對話框屬性

  • Properties → Styles → Border: Resizing
  • 勾選 Minimize box、Maximize box
  • 勾選 Clip children (減少縮放閃爍)

響應 WM_SIZE

// ClassWizard 添加 WM_SIZE 訊息處理
void CTutorial1Dlg::OnSize(UINT nType, int cx, int cy) {
    CDialog::OnSize(nType, cx, cy);
    if (IsWindow(m_wndMiniCtrl.m_hWnd)) {
        m_wndMiniCtrl.MoveWindow(0, 0, cx, cy, FALSE);
    }
}

初始化時同步尺寸

BOOL CTutorial1Dlg::OnInitDialog() {
    // ... 既有初始化 ...
    CRect rt;
    GetClientRect(&rt);
    m_wndMiniCtrl.MoveWindow(0, 0, rt.Width(), rt.Height(), FALSE);
    return TRUE;
}

2. 選單列與退出機制

  • Insert → Resource → Menu → IDR_MENU1
  • File → Exit (ID_FILE_EXIT)
  • ClassWizard 為 CTutorial1Dlg 添加 OnFileExit COMMAND 處理
void CTutorial1Dlg::OnFileExit() {
    m_wndMiniCtrl.Save();      // 儲存框架狀態 (分頁位置、視窗安裝等)
    CDialog::OnOK();           // 正常關閉對話框
}

對話框屬性 → General → Menu: IDR_MENU1

3. 分頁標題自定義:SetCaption

BOOL SetCaption(LPCTSTR strObjName, LPCTSTR strCaption);
m_wndMiniCtrl.SetCaption(_T("page1"), _T("Main"));
m_wndMiniCtrl.SetCaption(_T("page2"), _T("About"));
  • strObjName:XTML 中定義的頁面/空白視圖物件名稱
  • strCaption:新標題文字

4. 啟動預設分頁:SetActive

BOOL SetActive(LPCTSTR strObjName);
m_wndMiniCtrl.SetActive(_T("page1")); // 確保每次啟動顯示 Main 頁

5. 安裝 About 對話框到 Page2

  1. 新增 CAboutDlg : public CDialog,Style=Child, Border=None,隱藏 OK 按鈕
  2. 主對話框成員:CAboutDlg* m_pAboutDlg;
  3. 初始化建立並安裝:
    m_pAboutDlg = new CAboutDlg(this);
    m_pAboutDlg->Create(IDD_ABOUT_DIALOG, this);
    m_wndMiniCtrl.SetWnd(_T("page2"), (long)m_pAboutDlg->GetSafeHwnd());
    // 注意:安裝後可 delete m_pAboutDlg,視窗由 TangramMini 管理
    // 若需保持指標可不 delete,但在 OnDestroy 中需 DestroyWindow
    

執行效果

Main 頁面

About 頁面

  • 分頁標題顯示「Main」「About」
  • 視窗可拖曳縮放,TangramMiniCtrl 完整填滿客戶區
  • 切換至 About 頁關閉程式,重新啟動仍顯示 Main 頁 (SetActive 生效)
  • 框架狀態 (分頁位置、視窗安裝) 自動儲存/還原

API 總結表

方法用途參數
MoveWindow(x,y,cx,cy)調整 TangramMiniCtrl 本身大小標準 MFC 視窗方法
Save()持久化框架狀態無
SetCaption(objName, caption)修改分頁/視圖標題物件名、新標題
SetActive(objName)設定啟動顯示分頁物件名
SetWnd(objName, hWnd)安裝視窗到空白視圖物件名、HWND

總結

短短幾個 API 呼叫,賦予對話框專業軟體級介面能力:自適應佈局、分頁管理、狀態持久化、模組化視窗組合。這正是 TangramMini 「低代碼框架、高靈活業務」的設計哲學體現。

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