Window编程笔记(5)->从Win32过渡到MFC工程

    科技2026-04-03  17

    #include<afxwin.h> //MFC中的核心头文件、不需要添加Windows.h头文件。

    //MFC: Microsoft Foundation Classes (微软基础类库)

    C++类的形式,更方便的开发程序,把功能相近的一些Windows API函数、模块,一类的形式进行封装、统一管理: 好处:可以重用、代码数据更加严谨、提供程序员的开发效率。

    MFC的发展: 缺点:想要去做好,非常漂亮的软件,耗时,耗力。

    esayX: 它的封装,不是特别合理,没有以面向对象的思维来开发,个人开发, 轻巧duilib: 开源的, Qt: C++类库,非常全面,非常丰富,提供的界面设计,非常方便 自己开发属于自己的界面库。

    为什么还要去学习MFC: 可学习之处。

    //MFC程序三部曲 1、建立CWinApp的派生类 2、重写InitInstance虚函数 3、定义CWinApp派生的全局对象

    #include<afxwin.h> #include"resource.h" //对话框光联类,每一个类,光联一个对话框资源 Class CMainDlg::public CDialog { private: HICON m_hIcon; //成员变量,图标句柄 public: enum{IDD=IDD_MAIN_DLG}; //枚举,自己新建的对话框的属性名字 public: CMainDlg(): CDialog(IDD_MAIN_DLG){} //对话框初始化函数 //对话框生成了,只不过还没有显示而已 virtual BOOL OnInitDialog() //WM_INITDIALOG消息,类向导->重写虚函数 { //设置对话框窗口标题 //::SetWindowText(); SetWindowText(L"我是小陈同学"); //修改程序的图标 //加载图标 hInstance //MFC中如何获取实例句柄: //1.AfxGetInstanceHandle(); //2.AfxGetApp()->m_hInstance; //3.m_hIcon=AfxGetApp()->LoadIcon(IDI_CON1); //1.m_hIcon=::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1)); //2.m_hIcon=::LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON1)); m_hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);//IDI_CON1需要在vs2003编辑器添加图标.ico SetIcon(m_hIcon,TRUE); //小图标 SetIcon(m_hIcon,FALSE); //大图标 //MFC基本的一些数据类型,先弹出Afx对话框,弹出一个静态对话框 //一.字符串 CString //C++ string //CString str=L"这是第一个表达方式"; //AfxMessageBox(str); //CString str1("这是第二个表达方式"); //AfxMessageBox(str1); CString str2="Hello World"; //CString str2="我是中国人"; //CString str2; int nlength=str.GetLength();//字符串中字符的个数 str2.Empty();//把str2里面的字符串清空 if(str2.IsEmpty()==TRUE) { //弹出对话框有两种表达方式 //第一种用: AfxMessageBox(); AfxMessageBox(L"程序异常"); //第二种用: ::MessageBox(); ::MessageBox(NULL,L"程序异常",L"提示",MB_OK); EndDialog(IDCANCEL); } else { ::MessageBox(NULL,L"确定开启应用程序?",L"提示",MB_OK); } //wchar_t ch=str2.GetAt(2); //wchar_t ch=str2.str2[2]; //修改字符,从第0个下标修改 //str2.SetAt(0,L'w'); //AfxMessageBox(str2); //连接起来,str2的字符串+str5的L宽字符"->123",+=也是连接操作 CString str5=str2+L"->123"; str5+="456"; AfxMessageBox(str5); //字符串截取:HelloWorld //CString str3=str2.Mid(2,3); //CString str3=str2.Left(5); //CString str3=str2.Right(5); //AfxMessageBox(str3); //字符串大小写变换:小写变大写HelloWorld->HELLOWORLD=MakeUpper //CString str3=str2.MakeUpper(); //大写变小写 //CString str3=str2.MakeLower(); //AfxMessageBox(str3); //替换:1.把自身替换,每次做替换或者做其他功能时要弹一下方框 //str2.Replace(L"Hello",L"123"); //str2.Replace(L"1",L"0");:2.把当个字符替换: //AfxMessageBox(str2); //插入 //str2.Insert(2,'3');//从第二个单词插入一个3; //AfxMessageBox(str2); //删除 //str2.Delete(2,3); //AfxMessageBox(str2); //格式化 //int year=2020; //int month=4; //int day=20; //CString str3; //str3.Format(L"%d年%d月%d日 %s",year,month,day,L"22:00:00"); //CString str3 = L"C:\\Users\\Administrator\\Desktop\\FirstMFC\\FirstMFC\\res\\test.exe"; //str3 = str3.TrimLeft(); //str3 = str3.TrimRight(); //int pos=str3.Find('i',7); //int pos=str3.ReverseFind('\\');//显示最后一个\\后面的内容 //if(pos!=-1) //{ //str3=str3.Mid(pos+1); //} //AfxMessageBox(str3); //wchar_t arr[100]; //wcscpy(arr,str3.GetBuffer()); //CPoint类 点 //POINT CPoint //获取鼠标当前的坐标位置 //CPoint pt; //GetCursorPos(&pt); //CString str; //str.Format(L"当前鼠标坐标:%d,%d,",pt.x,pt.y); //AfxMessageBox(str); //pt.Offset(-200,300); //CSize 类大小 //CSize size(600,400); //四。CRect 类 区域 //RECT 左,上,右和下四个符号 CRect rect(10,10,300,200); int nwidth=rect.Width(); int nheight=rect.Height(); //IsRectEmpty //两点 一条线,空区域 //IsRectNull 四个值,全为0 //rect.InflateRect(10,10);下,右各加10,上,左各减10, 0,210,0,310; rect.DeflateRect(10,10);//上,左各加10,下,右各减10, 20,190,20,290; //矩形正常化 CRect rect2(300,200,10,10); rect.NormalizeRect(); //五。时间 CTime 类 CTime time=CTime::GetCurrentTime(); //第一个表达方式 //int nyear=time.GetYear(); //int nmonth=time.GetMonth(); //int nday=time.GetDay(); //int nminte=time.GetMinute(); //int nsecond=time.GetSecond(); //int ndayofweek=time.GetDayOfWeek(); //CString str4; //str4.Format(L"当前时间:%d-%d-%d %d:%d:%d 星期%d",nyear,nmonth,nday,nminte,nsecond,ndayofweek); //第二个表达方式 CString str4=time.Format(L"当前时间:%Y:%m:%d %H:%M:%S"); SetWindowText(str4); return TRUE; } DECLARE_MESSAGE_MAP() //控件响应 afx_msg void OnBnClicedOK();//双击按钮对话框控件,自动添加这段代码 }; //关联类 class CMyApp:public CWinApp { public: //构造函数和析构函数可写可不写 CMyApp(){} ~CMyApp(){} //看做是入口函数,MFC的所有代码都从这里开始 //InitInstance: MFC的初始化过程,启动管理 //目的:InitInstance->为了初始化应用程序,虚函数 virtual BOOL InitInstance() { //MessageBox:Window API //:: 如果::的前面是没有类名来修饰,那么,表示调用的是全局函数,Windows API //MFC里面的函数和Windows API里面的函数名字都是一样的 //::MessageBox(NULL,L"这是MFC程序",L"提示",MB_OK); //AFX这个前缀,Application Framework,一个团队的名字 //Application Framework 技术团队 //凡是Afx开头的函数,都表示全局函数,都能再MFC工程中使用 //AfxMessageBox(L"这是我的一个MFC程序"); //第一个方法:CDialog dlg(IDD_MAIN_DLG); //dlg.DoModal(); //弹出一个静态对话框 //第二个方法: CMainDlg dlg; //弹出一个静态对话框 return TRUE;//TURE:表示初始化成功,返回FALSE表示关闭应用程序 //第一个对话框窗口 } //负责清理操作,可写可不写 int ExitInstance() { return CWinApp::ExitInstance(); } }; CMyApp theApp; //WinMain函数无需再写,MFC已经在内部实现了WinMain函数了. //int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR ipCmdLine,int nCmdshow) //{ //MessageBox(NULL,L"这是Win32程序",L"提示",MB_OK); //return 0; //}BEGIN_MESSAGE_MAP(CMainDlg,CDialog) //END_MESSAGE_MAP() BEGIN_MESSAGE_MAP(CMainDlg,CDialog) ON_BN_CLICKED(IDOK,&CMainDlg::OnBnClickedOK) END_MESSAGE_MAP() //点击按钮关闭程序 void CMainDlg::OnBnClickedOK() { //CDialog::OnOK(); if(IDOK!=NULL) { ::MessageBox(NULL,L"点击确定按钮",L"提示",MB_OK); } else { EndDialog(IDCANCEL); } }

    程序运行如图所示:

    Processed: 0.013, SQL: 9