MFC入门——学习笔记

    xiaoxiao2023-10-17  149

    微软基础类库(英语:Microsoft Foundation Classes,简称MFC)

    一个微软公司提供的类库(class libraries),C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

    MFC把Windows SDK API函数包装成了几百个类,MFC给Windows操作系统提供了面向对象的接口,支持可重用性、自包含性以及其他OPP原则。MFC通过编写类来封装窗口、对话框以及其他对象,引入某些关键的虚函数(覆盖这些虚函数可以改变派生类的功能)来完成,并且MFC设计者使类库带来的总开销降到了最低。

     

    编写MFC程序需要包含#include <afxwin.h>头文件

    如何新建?

     

    新建一个头文件和源文件

     

    //mfc.h

    #include <afxwin.h> //编写MFC程序需要包含#include <afxwin.h>头文件 /* MFC应用程序的核心就是基于CWinApp类的应用程序对象。 CWinApp提供了消息循环来检索消息并将消息调度给应用程序窗口。 还包括可被覆盖的、用来自定义应用程序行为的主要虚函数。 */ class MyApp :public CWinApp //CWinApp应用程序类 { public: virtual BOOL InitInstance();//程序的入口函数InitInstance() }; /* CFrameWnd是从CWnd(窗口基类)派生出来的。CFrameWnd模仿框架窗口行为,我们可以把框架窗口作为顶层窗口看待,它是应用程序与外部世界的主要接口。 */ class MyFrame :public CFrameWnd //窗口框架类 { public: MyFrame(); /* 将消息映射添加到一个类中所做的全部工作: 1) 所操作类中,声明消息映射宏。 2) 通过放置标识消息的宏来执行消息映射,相应的类将在对BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。 */ DECLARE_MESSAGE_MAP()//所操作类中,声明消息映射宏。 afx_msg void OnLButtonDown(UINT, CPoint); afx_msg void OnChar(UINT, UINT, UINT); afx_msg void OnPaint(); };

    mfc.cpp

    #include "mfc.h" MyApp app; //一个MFC程序可以有且仅有一个应用程序对象,此对象必须声明为在全局范围内有效,以便它在程序开始时即在内存中被实例化。 /* InitInstance的目的是给应用程序提供一个自身初始化的机会,其返回值决定了框架接下来要执行的内容,如果返回FALSE将关闭应用程序, 如果初始化正常返回TRUE以便允许程序继续进行。此函数是MFC应用程序的入口。 */ BOOL MyApp::InitInstance()// { //创建窗口 MyFrame * frame = new MyFrame;//给框架类MyFrame对象动态分配空间 //显示和更新 frame->ShowWindow(SW_SHOWNORMAL);//框架类对象显示窗口CWnd::ShowWindow frame->UpdateWindow();//框架类对象更新窗口CWnd::UpdateWindow m_pMainWnd = frame; //保存框架类对象指针CWinThread::m_pMainWnd return TRUE; //返回正常初始化 } //分界宏 BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)//通过放置标识消息的宏来执行消息映射,相应的类将在对BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。 ON_WM_LBUTTONDOWN() //鼠标左键按下 ON_WM_CHAR() //键盘 ON_WM_PAINT() //绘图宏 END_MESSAGE_MAP() MyFrame::MyFrame()//自动调用的构造函数,在其构造函数内部,通过CWnd::Create创建窗口 { Create(NULL, TEXT("mfc")); //lpszClassName指定了窗口基于WNDCLASS类的名称,为此将其设定为NULL将创建一个基于已注册的WNDCLASS类的默认框架窗口 //lpszWindowName参数指定将在窗口的标题栏出现的文字。 } void MyFrame::OnLButtonDown(UINT, CPoint point) { /*TCHAR buf[1024]; wsprintf(buf, TEXT("x = %d, y =%d"), point.x, point.y); MessageBox(buf);*/ //mfc中的字符串 CString CString str; str.Format(TEXT("x = %d ,,,, y = %d "), point.x, point.y); MessageBox(str); } void MyFrame::OnChar(UINT key, UINT, UINT) { CString str; str.Format(TEXT("按下了%c 键"), key); MessageBox(str); } void MyFrame::OnPaint() { CPaintDC dc(this); //CDC里找其他的能画的图形 dc.TextOutW(100, 100, TEXT("为了部落")); //画椭圆 dc.Ellipse(10, 10, 100, 100); //多字节转为 宽字节 //TEXT是由自适应编码的转换 // TCHER 自适应编码的转换 //MessageBox(L"aaa"); //统计字符串长度 int num = 0; char * p = "aaaa"; num = strlen(p); //统计宽字节的字符串长度 wchar_t * p2 = L"bbbb"; num = wcslen(p2); //char * 与 CString之间的转换 C++ string .c_str(); //char* -> CString char * p3 = "ccc"; CString str = CString(p3); //CString -> char * CStringA tmp; tmp = str; char * pp = tmp.GetBuffer(); }

     

     

    最新回复(0)