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

WTL 入門實戰(上):從安裝精靈到 SDI 狀態列多欄位圖示與文字顯示

     編輯:關於VC++

Windows Template Library (WTL) 以模板實現極輕量級 GUI 框架,無需 MFC DLL,執行檔最小僅 24KB。本文記錄 WTL 7.0 AppWizard 安裝、SDI 專案建立、核心類別架構解析,並實作多欄位狀態列(含圖示與文字)。

環境建置與專案建立

  1. 安裝 WTL70_AppWizard.msi,VC6 File → New 出現 ATL/WTL AppWizard。
  2. 選擇 SDI、不支援 Doc/View、無資料庫、無 COM。
  3. 將 WTL 16 個 .h 複製至 VC98/Include 或專案目錄。

核心架構解析

_Module 全域模組實例

對應 MFC theApp,型別 CAppModule,維護訊息迴圈 Map。

入口函數 _tWinMain

int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE, LPTSTR lpCmd, int nShow) {
    CoInitialize(NULL);
    DefWindowProc(NULL,0,0,0); // MSLU 相容
    AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES);
    _Module.Init(NULL, hInst);
    int nRet = Run(lpCmd, nShow);
    _Module.Term(); CoUninitialize(); return nRet;
}

訊息迴圈啟動 Run

int Run(LPTSTR lpCmd = NULL, int nShow = SW_SHOWDEFAULT) {
    CMessageLoop theLoop; _Module.AddMessageLoop(&theLoop);
    CMainFrame wndMain;
    if (wndMain.CreateEx() == NULL) return 0;
    wndMain.ShowWindow(nShow);
    int nRet = theLoop.Run();
    _Module.RemoveMessageLoop(); return nRet;
}

多欄位狀態列實作

資源準備

匯入三個圖示資源:IDR_DEFAULT、IDR_DATE、IDR_TIME。

主框架類別新增成員

class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame> {
    CMultiPaneStatusBarCtrl m_Mstatus; // 多欄狀態列
    // ...
};

OnCreate 初始化

static int panes[] = { IDR_DEFAULT, IDR_DATE, IDR_TIME };
static int widths[] = { 450, 200, 600 };

int CMainFrame::OnCreate(LPCREATESTRUCT lpCS) {
    CreateSimpleStatusBar(); // 建立基本狀態列
    m_Mstatus.SubclassWindow(m_hWndStatusBar); // 子類別化
    m_Mstatus.SetPanes(panes, _countof(panes), FALSE);
    m_Mstatus.SetPaneWidth(IDR_DEFAULT, 400);
    m_Mstatus.SetPaneWidth(IDR_DATE, 200);
    m_Mstatus.SetPaneWidth(IDR_TIME, 900);
    m_Mstatus.SetPaneIcon(IDR_DEFAULT, AtlLoadIconImage(IDR_DEFAULT, LR_DEFAULTCOLOR));
    m_Mstatus.SetPaneIcon(IDR_DATE, AtlLoadIconImage(IDR_DATE, LR_DEFAULTCOLOR));
    m_Mstatus.SetPaneIcon(IDR_TIME, AtlLoadIconImage(IDR_TIME, LR_DEFAULTCOLOR));
    m_Mstatus.SetPaneText(IDR_DATE, _T("WTL is very wonderful!"), 0);
    m_Mstatus.SetPaneText(IDR_TIME, _T("WWW.VCKBASE.COM"), 0);
    return 0;
}

關鍵優勢

  • 無 MFC DLL 相依,單檔部署極簡單。
  • 模板基底類別提供 CString、CRect、CWindow 等常用封裝。
  • 原始碼可讀性高,適合學習 Windows 核心視窗機制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved