C++ MFC應用程序開發實例


MFC:微軟基礎類(Microsoft Foundation Classes),同VCL類似,是一種應用程序框架,隨微軟Visual C++ 開發工具發布。作為Application Framework,MFC的使用只能提高某些情況下的開發效率,只起到輔助作用,而不能替代整個Win32 程序設計。

本次主要以Windows下Visual Studio 2019環境下如何搭建MFC應用開發環境,創建MFC項目以及實例程序來對C++ MFC應用程序開發來做一個歸納整理。

一、搭建開發環境

由於Visual Studio 2019在導入.NET 桌面程序開發工具和依賴的時候默認沒有勾選MFC應用程序開發所需的“適用於最新v142 生成工具的C++ MFC(包括用於開發MFC應用程序的標頭和庫,包含多字節字符集)”,所以在新建項目時無法創建MFC應用程序。如下:

 

 在勾選了“適用於最新v142 生成工具的C++ MFC”之后,重新啟動Visual Studio 2019;滿足MFC開發的條件,便可新建MFC 應用程序。如下:

 至此,Windows下基於Visual Studio 2019的C++ MFC應用開發所需的環境基本配置完畢。

二、創建MFC程序

 

 輸入項目名稱、選擇項目存放位置,點擊“確定”按鈕。出現“MFC 應用程序 應用程序類型選項”對話框,選擇“基於對話框”應用程序類型,這樣,一個簡單的MFC 對話框應用程序開發項目就已經建好。

三、MFC編程實例

(1)在窗體添加控件

右鍵點擊窗體,選擇添加變量,如下:

比如添加一個按鈕(Button):

(2)修改屬性以及添加對應函數

在添加完一個控件(按鈕)之后,右鍵點擊按鈕選擇屬性,便可以編輯它的屬性;雙擊按鈕可以自動生成按鈕的點擊時間處理函數(沒有定義按鈕點擊事件處理函數之前)。如下:

(3)程序文件說明

  1)頭文件***Dlg.h (***指項目名,下同)

  主要定義和聲明了對話框ID和主要的函數。

#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_MULTITHREAD_DIALOG };
#endif

  public:
    afx_msg void OnBnClickedButtonS();
    afx_msg void OnBnClickedButtonM();
    afx_msg void OnBnClickedButton3();
  };

  2)源文件***Dlg.cpp

  主要實現了頭文件中定義的函數,以及控件對應的事假處理函數。

void CMultiThreadDlg::OnBnClickedButtonM()
{
    // TODO: 在此添加控件通知處理程序代碼
    //DWORD startTime = GetTickCount();//計時開始

    GetDlgItem(IDC_BUTTON_S)->EnableWindow(FALSE);
    GetDlgItem(IDC_BUTTON_M)->EnableWindow(FALSE);

    CDC* dc = GetDC();
    CRect rt;
    GetClientRect(rt);
    dc->FillSolidRect(0, 0, rt.Width(), rt.Height() - 70, RGB(240, 240, 240));//刷新背景
    dc->TextOut(97, 290, TEXT("Thread 1"));
    dc->TextOut(277, 290, TEXT("Thread 2"));
    dc->TextOut(457, 290, TEXT("Thread 3"));

    //初始化線程的參數
    Info[0].hWnd = Info[1].hWnd = Info[2].hWnd = GetSafeHwnd();
    Info[0].nOffset = 10; Info[1].nOffset = 190; Info[2].nOffset = 370;
    Info[0].clrRGB = RGB(255, 0, 0); Info[1].clrRGB = RGB(0, 255, 0); Info[2].clrRGB = RGB(0, 0, 255);
    //創建線程
    for (int i = 0; i < 3; i++)
    {
        hThead[i] = CreateThread(NULL, 0, ThreadProc, &Info[i], 0, &dwThreadID[i]);
    }
    ReleaseDC(dc);

    //DWORD endTime = GetTickCount();//計時結束
    //CString sTime;
    //sTime.Format(_T("The run time is: %d 毫秒"), endTime - startTime);
    //MessageBox(sTime);

    //使能按鈕
    GetDlgItem(IDC_BUTTON_S)->EnableWindow(TRUE);
    GetDlgItem(IDC_BUTTON_M)->EnableWindow(TRUE);
}


void CMultiThreadDlg::OnBnClickedButton3()
{
    // TODO: 在此添加控件通知處理程序代碼
    CRect rectDlg;
    GetClientRect(rectDlg); // 得到客戶區的位置和大小
    //GetWindowRect(rectDlg);//獲得窗體在屏幕上的位置大小
    ScreenToClient(rectDlg);

    CRect rectS, rectM;
    GetDlgItem(IDC_BUTTON_S)->GetWindowRect(&rectS);//獲取控件相對於屏幕的位置
    ScreenToClient(rectS);//轉化為對話框上的相對位置
    GetDlgItem(IDC_BUTTON_M)->GetWindowRect(&rectM);//獲取控件相對於屏幕的位置
    ScreenToClient(rectM);//轉化為對話框上的相對位置
}

  3)資源文件***.rc下的Dialog文件夾下的IDD_***_DIALOG,即對話框(關掉對話框后雙擊這個文件就可以重新打開了)。

(4)運行效果

最后,整個項目我已經打包上傳至個人gitlab:https://gitlab.com/JC_peng/mfc-demo;需要的自行下載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM