MFC/QT 學習筆記(二)——MFC入門

MFC以C++形式封裝了Windows APIwindows

 

//實踐數組

編寫MFC須要的頭文件#include <afxwin.h>app

 

程序執行流程:框架

    • 實例化應用程序對象(有且只有一個)
    • 執行程序入口函數 InitInstance
    • 給框架類MyFrame對象動態分配空間(自動調用他的構造函數),在其構造函數內部,經過CWnd::Create 建立窗口
    • 框架類對象顯示窗口 CWnd::ShowWindow
    • 框架類對象更新窗口 CWnd::UpdateWindow
    • 保存框架類對象指針 CWinThread::m_pMainWnd

文件名:mfc.h函數

#include <afxwin.h>//mfc頭文件

//應用程序類CWinApp,派生類
Class MyApp: public CWinApp{
    public:
        virtual BOOL InitInstance(); //基類的虛函數,派生類只是重寫,MFC程序的入口地址
};

//框架類CFrameWnd ,派生類MyFrame
Class MyFrame: public CFrameWnd{
    public:
        MyFrame();//構造函數
        DECLARE_MESSAGE_MAP()//消息映射宏,聲明必須用在類聲明中,即 .h 文件中
        afx_msg void OnLButtonDown(UINT,CPoint)//鼠標聲明,value
        afx_msg void OnChar(UINT,UINT,UINT)//鍵盤聲明
        afx_msg void OnPaint()//繪畫
};

 

文件名:mfc.cppthis

#include "mfc.h"//對應類聲明的頭文件

MyApp app;//有且僅有一個全局的應用程序類對象

BOOL MyApp::InitInstance(){//程序入口地址
    MyFrame *frame=new MyFrame;//1.建立框架類對象

    frame->ShowWindow(SW_SHOWNORMAL);//2.顯示窗口
    frame->UpdateWindow();//3.更新窗口

    m_pMainWnd=frame;//4.保存指向應用程序主窗口的指針,實現自動管理
    return TRUE;//初始化正常則返回true
}

//分界宏
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
    ON_WM_LBUTTONDOWN()//鼠標左鍵按下 key
    ON_WM_CHAR()//鍵盤按下
END_MESSAGE_MAP()

MyFrame::MyFrame(){
    Create(NULL,TEXT("mfc"));//建立窗口
}

void MyFrame::OnLButtonDwon(UNIT,CPoint point){//鼠標按下
/*
    TCHAR buf[1024];//TCHAR 是MFC中的字符數組
    wsprintf(buf,TEXT("x=%d,y=%d"),point.x,point.y);//轉譯
    MessageBox(buf);//區別於底層的MessageBox,MFC中實則是MessageBox method 在MSDN中可查
*/
    //mfc中的字符串 CString
    CString str;
    str.Format(TEXT("x=%d,,,y=%d"),point.x,point.y);//格式化
    MessageBox(str);
}

void MyFrame::OnChar(UNIT key,UNIT,UNIT){//鍵盤按下
    CString str;
    str.Format(TEXT("按下了 %c 鍵"),key);
    MessageBox(str);
}

void MyFrame::OnPaint(){//繪畫
    CPaintDC dc(this);//this指定繪圖設備
    //幫助文檔,在CDC裏找其餘能畫的圖形
    dc.TextOutW(100,100,TEXT("爲了部落"));
    dc.Ellipse(10,10,100,100);//畫橢圓,兩點鎖定矩形內切圓
}

 

幫助文檔:《VC++之MFC類庫中文手冊》。最上面是層次結構;最下面是消息映射宏。編碼

查找Create要搜索 :CFrameWnd::Createspa

 

ps:右鍵項目->屬性->常規->MFC的使用->在共享DLL中使用MFC指針

 

//理論code

  • 消息映射機制

即將消息和成員函數互相關聯的表,MFC中沒有事件和信號橋的概念,只有每一個消息映射一個函數

 ps:消息映射宏查找,在中文手冊最下面。

 

聲明宏:

DECLARE_MESSAGE_MAP()

分界宏:

BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)

END_MESSAGE_MAP()

 

程序執行流程:

    • 聲明宏 寫到 .h 中
    • 分界宏 寫到 .cpp 中
    • 找消息宏 寫到 分界宏 中
    • 把函數原型聲明 寫到 .h 中
    • 函數實現 寫到 .cpp 中

 

  • windows 字符集 

MessageBox(TEXT(「aaa」));

 

TEXT 自適應編碼轉換(即,定義裏可定製多字節和寬字節):

右鍵項目->屬性->常規->字符集->使用多字節字符集/使用Unicode字符集

Ps:TCHAR 也有自適應編碼轉換

  

「aaa」   多字節:一個字符對應一個字節

L「aaa」 寬字節:一個字符對應多個字節 Unicode:UTF-8 3個;GBK 2個;

 

多字節轉爲寬字節:MessageBox(L 「aaa」);

 

//統計字符串長度

int num=0;

char *p="aaa";
num=strlen(p);

wchar_t *p2="bbbb";
num=wcslen(p2);

 

//char* 與 CString 之間的轉換

C++ string 與 MFC CString 不可直接轉換,要經過 char * .c_str();

//char*->CString
char *p3="ccc";
CString str=CString(p3);

//CString->char*
CStringA tmp=str;
char *pp=tmp.GetBuffer();
相關文章
相關標籤/搜索