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

MFC 實戰:點擊切換文本、加法計時器、窗體伸縮三合一示例

     編輯:C++ 入門

MFC 實戰:點擊切換文本、加法計時器、窗體伸縮三合一示例

本文通過一個完整的 MFC 對話框程序,演示三個常見交互功能的實現:靜態文本點擊切換、兩數相加計算器、窗體動態伸縮。代碼結構清晰,適合初學者理解 MFC 消息映射、控件變量、窗口位置管理。

功能一:點擊文本切換顯示

在對話框編輯器中添加靜態文本控件(ID: IDC_LAB_NUM1),設置屬性 Notify = True 以接收點擊消息。雙擊控件生成 OnStnClickedLabNum1 處理函數:

void CMFCTestDlg::OnStnClickedLabNum1() {
    CString str; GetDlgItem(IDC_LAB_NUM1)->GetWindowText(str);
    if (str == _T("Num1")) GetDlgItem(IDC_LAB_NUM1)->SetWindowText(_T("數字1"));
    else GetDlgItem(IDC_LAB_NUM1)->SetWindowText(_T("Num1"));
}

功能二:加法計算器

添加三個編輯框(IDC_TXT_NUM1, IDC_TXT_NUM2, IDC_TXT_NUM3)和按鈕(IDC_BTN_ADD)。為前三個控件添加 int 類型變量 m_num1, m_num2, m_num3。按鈕處理:

void CMFCTestDlg::OnBnClickedBtnAdd() {
    UpdateData(TRUE);  // 從控件讀取數據到變量
    m_num3 = m_num1 + m_num2;
    UpdateData(FALSE); // 將變量寫回控件
}

功能三:窗體伸縮

添加按鈕 IDC_BTN_FLEX(初始文本「打開>>」)和靜態分割線 IDC_PIC_SPLIT(Visible=False, Sunken=True)。定義靜態 CRect 變量記錄大小:

static CRect rectBig, rectSmall, rectSplit;

初始化收縮狀態(OnInitDialog):

GetWindowRect(&rectBig);                    // 完整窗口大小
GetDlgItem(IDC_PIC_SPLIT)->GetWindowRect(&rectSplit);
rectSmall = rectBig;
rectSmall.right = rectSplit.right;          // 收縮寬度至分割線
SetWindowPos(NULL, 0, 0, rectSmall.Width(), rectSmall.Height(), SWP_NOMOVE|SWP_NOZORDER);

伸縮切換邏輯:

void CMFCTestDlg::OnBnClickedBtnFlex() {
    CString str; GetDlgItemText(IDC_BTN_FLEX, str);
    if (str == _T("收縮<<")) {
        SetDlgItemText(IDC_BTN_FLEX, _T("打開>>"));
        SetWindowPos(NULL, 0, 0, rectSmall.Width(), rectSmall.Height(), SWP_NOMOVE|SWP_NOZORDER);
    } else {
        SetDlgItemText(IDC_BTN_FLEX, _T("收縮<<"));
        SetWindowPos(NULL, 0, 0, rectBig.Width(), rectBig.Height(), SWP_NOMOVE|SWP_NOZORDER);
    }
}

關鍵技術點總結

  • 靜態控件響應點擊:必須設置 Notify = True,否則不發送 STN_CLICKED 消息。
  • UpdateData(TRUE/FALSE):實現控件與變量雙向數據傳輸,DDX 機制核心。
  • GetWindowRect + SetWindowPos:以屏幕坐標操作窗口大小位置,SWP_NOMOVE 保持位置不變。
  • 靜態 CRect 保存狀態:避免重複計算,確保伸縮精確可逆。

完整項目結構

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