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

Visual C++ MFC 入門導論:事件驅動程式設計與 Windows 應用程式開發基石

     編輯:關於VC++

MFC:專業 Windows 開發的加速器

Visual C++ 不只是編譯器,更是整合式開發環境 (IDE)。MFC (Microsoft Foundation Classes) 以 C++ 面向對象特性封裝 Windows API,提供:

  • 跨平台相容:Win32s, Windows 95/98/NT/2000/XP... 至今 Windows 11 皆支援
  • 代碼精簡:消除數百行「樣板代碼」(註冊視窗類別、訊息迴圈、建立視窗...)
  • 效能無損:薄封裝層,必要時可直接呼叫 API
  • 開發加速:數千行經測試優化的核心代碼 (視窗管理、繪圖、文件序列化、資料庫、網路...)

Windows 使用者介面詞彙表

控制項MFC 類別典型用途
靜態文字標籤CStatic標題、說明、分組框架
按鈕CButton命令觸發、核取方塊、選項按鈕
編輯框CEdit單行/多行文字輸入
清單方塊CListBox單選/多選清單
組合方塊CComboBox下拉式清單 + 編輯
捲軸CScrollBar捲動、數值輸入
單選按鈕CButton (BS_RADIOBUTTON)互斥選項
核取方塊CButton (BS_CHECKBOX)獨立開關選項

視窗類型

  • 框架視窗 (SDI):單一文件介面,標準主視窗 (記事本、計算機)
  • MDI 框架:多文件介面,主視窗含多個子視窗 (Word、Excel、VC++ IDE)
  • 模態對話框:獨佔輸入焦點,必須關閉才能回父視窗
  • 非模態對話框:浮動面板,可與主視窗並行操作

事件驅動程式設計範式

核心概念對照

觀點使用者程式設計師
介面元素按鈕、捲軸、選單、圖示子視窗 (HWND)、控制項物件
動作滑鼠點擊、鍵盤輸入訊息 (WM_COMMAND, WM_LBUTTONDOWN...)
回應視覺回饋、功能執行訊息處理函數、命令處理器

傳統 API vs MFC 處理流程

// 傳統 C + Win32 API (簡化)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        case WM_CREATE:  // 建立子控制項
            CreateWindow("BUTTON", "Exit", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 
                         50,50,100,30, hWnd, (HMENU)IDC_EXIT, hInst, NULL);
            break;
        case WM_COMMAND:
            if (LOWORD(wParam) == IDC_EXIT && HIWORD(wParam) == BN_CLICKED)
                PostQuitMessage(0);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}

// MFC 方式
class CMyWnd : public CFrameWnd {
    CButton m_btnExit;
    afx_msg void OnExit();
    DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
    ON_BN_CLICKED(IDC_EXIT, OnExit)
END_MESSAGE_MAP()

void CMyWnd::OnExit() { PostQuitMessage(0); }

// 建構函數中:
m_btnExit.Create("Exit", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(50,50,150,80), this, IDC_EXIT);

MFC 自動化處理項目

  • 按鈕按下視覺反白 (按下/釋放狀態切換)
  • 焦點管理 (Tab 鍵切換、預設按鈕)
  • 訊息分派 (依控制項 ID 路由至對應處理函數)
  • 視窗建立/銷毀序列、重繪、大小調整

第一個 MFC 程式:完整建置流程

原始碼 (hello.cpp)

#include 

class CHelloApp : public CWinApp {
public:
    virtual BOOL InitInstance();
};

CHelloApp HelloApp;  // 全域唯一應用程式物件

class CHelloWindow : public CFrameWnd {
    CStatic* m_pLabel;
public:
    CHelloWindow();
};

BOOL CHelloApp::InitInstance() {
    m_pMainWnd = new CHelloWindow();
    m_pMainWnd->ShowWindow(m_nCmdShow);
    m_pMainWnd->UpdateWindow();
    return TRUE;
}

CHelloWindow::CHelloWindow() {
    Create(NULL, _T("Hello World!"), WS_OVERLAPPEDWINDOW, CRect(0,0,200,200));
    CRect r(50,80,150,150);
    m_pLabel = new CStatic();
    m_pLabel->Create(_T("hello world"), WS_CHILD|WS_VISIBLE|SS_CENTER, r, this);
}

VC++ 6.0 經典 IDE 操作步驟

  1. 啟動 VC++ → Window → Close All 清理環境
  2. File → New → Projects → Win32 Application → 名稱 hello
  3. File → New → Files → C++ Source File → 貼上代碼 → 存為 hello.cpp
  4. Project → Add To Project → Files → hello.cpp
  5. Project → Settings → General → "Use MFC in a Shared DLL" (關鍵!)
  6. Build → Build hello.exe → Build → Execute hello.exe

預期執行結果

  • 標準框架視窗:標題列 "Hello World!"、系統選單、最小化/最大化/關閉鈕
  • 客戶區中央:置中文字 "hello world" 的靜態標籤
  • 完整視窗操作:拖曳移動、邊框縮放、最小化到工作列、最大化、關閉結束程式
  • 所有行為零代碼實作 — MFC 框架自動提供

專案管理策略

策略適用場景操作
獨立目錄/專案教學、小工具、獨立模組每專案一目錄,FileView/ClassView 清晰
方案含多專案實務系統:EXE + DLL + Static Lib + 測試專案VS 方案 (.sln) 管理相依性、統一建置
單目錄切換原始檔空間受限、快速原型Project → Remove/Add Files 切換 main cpp

學習路線圖

  1. 第一部分 (本章):MFC 概念、Hello World、IDE 操作
  2. 第二部分:程式架構深度剖析 (CWinApp, CFrameWnd, InitInstance, 訊息迴圈)
  3. 第三部分:控制項樣式定制 (CStatic 文字、框架、字體、顏色)
  4. 第四部分:事件驅動核心 — 訊息映射 (CButton, CScrollBar, WM_SIZE, WM_TIMER)
  5. 進階主題:對話框、文件/視圖架構、資料庫、網路、OLE/COM、多執行緒、ActiveX 控制項...

給初學者的建議

  • 先跑起來:照著步驟建置成功,獲得成就感
  • 再看懂架構:理解三大物件 (App, Frame, Control) 關係
  • 善用線上說明:F1 查詢 CFrameWnd::Create, SS_CENTER, WS_OVERLAPPEDWINDOW
  • 動手修改:改標題、改文字、改座標、加按鈕、改字體 — 體驗即時回饋
  • 不要背誦:理解模式 (兩階段建構、訊息映射、虛擬函數覆寫) 比記憶 API 更重要

從 VC6 到現代開發的演進

雖然 VC++ 6.0 (1998) 是經典教學基準,但現代 Visual Studio (2019/2022) 提供:

  • Unicode 預設、安全 CRT、C++11/14/17/20 支援
  • IntelliSense、程式碼分析、Git 整合、Live Share
  • Windows SDK 10/11、UWP/WinUI 3 整合、.NET 互通
  • MFC 仍內建並持續更新 (最新 v143 工具組支援 Win11 SDK)

核心架構不變:本教程的 MFC 基礎概念在現代 VS 完全適用,僅專案建立方式現代化。

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