【MFC】學習與問題整合

須要源碼聯繫郵件:kangxlchn@163.comhtml

1.新建一個MFC工程(基於對話框)

環境:vs2017 windows

 

 通通NEXT函數

 

 

 

 新建完成後打開MFCPrj.cpp文件工具

 

打開類試圖spa

 

 

每建立一個MFC項目,默認包含3個類,「關於」對話框、主對話框類、初始化項目的App類3d

 

雙擊.rc文件能夠打開資源視圖code

 

而後雙擊IDD_MFCPRJ_DIALOG就能夠打開可視化編輯的窗口htm

若是打不開,看這裏對象

 

 打開工具箱就能夠往裏拖各類控件了。。。blog

 

 

 -------------截至這裏,基本全部的窗口都打開了,如今開始講一些代碼-----------

2.代碼

項目生成後,都會有一個屬於App類的theApp對象,對本應用程序實例化。

// CMFCTest1App 構造

CMFCTest1App::CMFCTest1App()
{
    // 支持從新啓動管理器
    m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

    // TODO:  在此處添加構造代碼,
    // 將全部重要的初始化放置在 InitInstance 中
}


// 惟一的一個 CMFCTest1App 對象

CMFCTest1App theApp;

 

 

應用程序建立完成,程序開始運行,進入消息循環,windows程序的事件都是消息驅動的,每產生一個消息就觸發一個響應事件,消息和事件經過聲明消息映射DECLARE_MESSAGE_MAP()聯繫在一塊兒。 
默認包含三個消息:

 BEGIN_MESSAGE_MAP(CMFCTest1Dlg, CDialogEx)
    ON_WM_SYSCOMMAND()   //響應控制指令
    ON_WM_PAINT()         //響應繪圖消息,用於刷新窗口
    ON_WM_QUERYDRAGICON() //當用戶拖動最小化窗口時取得光標
END_MESSAGE_MAP()

 

 

 

 當應用程序關閉時,會發送WM_CLOSE消息,程序相應後結束。在類嚮導(右擊工程/ctrl+shift+x)中能夠添加消息處理函數。 

 

 

 

void CMFCPrjDlg::OnClose()
{
    // TODO: 在此添加消息處理程序代碼和/或調用默認值
    if (MessageBox(_T("肯定退出嗎"), _T("提示"), MB_YESNO | MB_ICONWARNING) == IDNO)
    {
        return;
    }

    CDialog::OnClose();
}

 

 

 

 

應用程序經過定義,初始化,由winmain開始,註冊、建立、顯示窗口,消息響應,程序終止,結束運行週期

 

 

3.對話框類

afx_msg宏 afx_msg宏沒有任何語法上的實際意義。afx_msg宏表示聲明的是一個消息響應函數。
DoDataExchange函數 用於存放各種控件的變量信息
OnInitDialog函數 用於初始化對話框
OnSysCommand系統指令響應函數,默認處理窗口最小化和最大化指令等 OnPaint繪圖消息響應函數
調出類嚮導 項目
->類嚮導,快捷鍵Ctrl+shilft+X

 

 

4.添加按鈕

 將默認對話框中的靜態文本和原有按鈕刪除,添加新的按鈕1  2 ,在屬性頁中能夠查看並設置。通常只須要修改兩個屬性,「Caption」和「ID」,前者是按鈕的文本,後者是其惟一標識。 

 爲按鈕添加事件處理函數

實現按鈕的功能 
添加按鈕的控件型變量,變量命名通常以「m_」開頭,後面部分爲按鈕功能簡要說明。 

 

 

 

在初始化函數OnInitDialog中修改Exit對話框不可用

// TODO:  在此添加額外的初始化代碼
    m_Exit.EnableWindow(FALSE);

 

 

雙擊按鈕就進入代碼:添加處理事件

void CMFCPrjDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知處理程序代碼
    CString str;
    m_Enable.GetWindowTextW(str);
    if (str == "使能")
    {
        m_Exit.EnableWindow(TRUE);
        m_Enable.SetWindowTextW(_T("使不能"));
    }
    else
    {
        m_Exit.EnableWindow(FALSE);
        m_Enable.SetWindowTextW(_T("使能"));
    }
}


void CMFCPrjDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知處理程序代碼
    SendMessage(WM_CLOSE, 0, 0);
}
相關文章
相關標籤/搜索