title: vs2019 安装配置MFC
time: 2019年8月27日22:55:57

<>vs2019 MFC

<>安装MFC

*
打开vs安装程序

*
选中c++桌面开发

*
选择Visual Studio扩展开发

*
(若想快速配置)选择C++ MFC 生成工具(x86 和 x64)进行安装

*
选择修改,等待安装

*
创建新项目,选择MFC应用

<>空项目 配置MFC 快速构建

* 新建头文件 #include<afxwin.h>//mfc头文件 //应用程序类CWinApp,定义MyAPP类,作为派生类(子类) class
MyApp : public CWinApp { public: //基类的虚函数(接口),子类去实现 //MFC程序的入口地址 virtual BOOL
InitInstance(); };//定义类结尾要加; class MyFrame:public CFrameWnd { public: MyFrame();
//构造函数 };
*
新建源文件
#include "mfc.h" MyApp myapp; //表示调用头文件的构造函数 MyFrame::MyFrame() { //创建入口 Create
(NULL, TEXT("我的第一个MFC窗口")); } //实现父类方法 BOOL MyApp::InitInstance() { //1、创建框架类对象
MyFrame* myframe = new MyFrame; //调用上面的定义的方法 //2、显示窗口 myframe->ShowWindow(
SW_SHOWNORMAL); //3、更新窗口 myframe->UpdateWindow(); //4、保存框架类对象指针 m_pMainWnd =
myframe; return TRUE;//初始化正常,返回true }
*
项目----属性----配置属性----高级----MFC的使用设为在共享DLL中使用MFC

*
运行

*
无法解析的外部符号 _main,该符号在函数 "int __cdecl invoke_main(void)"报错

* 项目----属性----配置属性----链接器----系统----子系统设为窗口Windows
<>消息映射

*
声明宏,写到.h中
//声明消息映射宏,必须在类声明中(相当于开启的入口) DECLARE_MESSAGE_MAP();
*
分界宏
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)//开始 END_MESSAGE_MAP()//结束
*
找消息宏,放在分界宏中间
//分界宏 //定义消息宏,必须在类实现中 BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)//开始
ON_WM_LBUTTONDOWN()//鼠标左键按下 ON_WM_CHAR()//键盘 ON_WM_PAINT()//绘图 END_MESSAGE_MAP()
//结束
*
找函数原型,声明写到.h中
//函数的声明 //鼠标 afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //键盘
afx_msgvoid OnChar(UINT, UINT, UINT); //绘图 afx_msg void OnPaint();
*
函数的实现,写到.cpp中
void MyFrame::OnLButtonDown(UINT nFlags, CPoint point) { //底层的方式 /*TCHAR
b[1024]; wsprintf(b, TEXT("x = %d,y = %d"), point.x, point.y); MessageBox(b);*/
//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() {
CPaintDCdc(this); char str[1024] = TEXT("Inifited");//不能用String dc.TextOutA(100
, 100, str); dc.TextOutA(100, 200, TEXT("harder")); dc.Ellipse(100, 100, 200,
200); }
*
头文件
#include<afxwin.h>//mfc头文件 //应用程序类CWinApp,定义MyAPP类,作为派生类(子类) class MyApp :
public CWinApp { public: //基类的虚函数(接口),子类去实现 //MFC程序的入口地址 virtual BOOL
InitInstance(); };//定义类结尾要加; class MyFrame:public CFrameWnd { public: MyFrame();
//构造函数 //声明消息映射宏,必须在类声明中(相当于开启的入口) DECLARE_MESSAGE_MAP(); //函数的声明 //鼠标 afx_msg
void OnLButtonDown(UINT nFlags, CPoint point); //键盘 afx_msg void OnChar(UINT,
UINT, UINT); //绘图 afx_msg void OnPaint(); };
*
源文件
#include "mfc.h"//引入头文件 MyApp myapp; //表示调用头文件的构造函数 MyFrame::MyFrame() { //创建入口
Create(NULL, TEXT("我的第一个MFC窗口")); } //分界宏 //定义消息宏,必须在类实现中 BEGIN_MESSAGE_MAP(
MyFrame, CFrameWnd)//开始 ON_WM_LBUTTONDOWN()//鼠标左键按下 ON_WM_CHAR()//键盘 ON_WM_PAINT
()//绘图 END_MESSAGE_MAP()//结束 void MyFrame::OnLButtonDown(UINT nFlags, CPoint
point) { //底层的方式 /*TCHAR b[1024]; wsprintf(b, TEXT("x = %d,y = %d"), point.x,
point.y); MessageBox(b);*/ //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); char str[1024] =
TEXT("Inifited"); dc.TextOutA(100, 100, str); dc.TextOutA(100, 200, TEXT(
"harder")); dc.Ellipse(100, 100, 200, 200); } //实现父类方法 BOOL MyApp::InitInstance(
) { //1、创建框架类对象 MyFrame* myframe = new MyFrame; //调用上面的定义的方法 //2、显示窗口 myframe->
ShowWindow(SW_SHOWNORMAL); //3、更新窗口 myframe->UpdateWindow(); //4、保存框架类对象指针
m_pMainWnd= myframe; return TRUE;//初始化正常,返回true }
*
Windows字符集

*
c++中的string操作
#include<string> #include <iostream> using namespace std; int main() {
//使用string 插入#include <string> string s = "hello"; cout << s << endl; const char
* c = s.c_str();//string 类型转换为char类型,要在前面加上const cout << c << endl;//输出c指针指向的内容
cout<< *c << endl;//输出c指针指向的第一个字符 cout << *(c + 1) << endl;//输出c指针指向的第二个字符 cout
<< *c + 1 << endl;//输出c指针指向的第一个字符的下个ASCII码的序号 cout << char(*c + 1) << endl;
//把ascii码转为字符 //出现 "const char *" 类型的值不能用于初始化 "char *" 类型的实体
//右键项目->属性->C/C++->语言->符合模式:选择否 //统计多字节的长度 char* ch = "helloWorld"; int num =
strlen(ch); cout << num << endl; //统计宽字节的字符串长度 wchar_t* wc = L"start"; int num2
= wcslen(wc); cout << num2 << endl; return 0; }
*
多字节字符串转宽字节L
//默认是Unicode,宽字节,而“aaa”是多字节,要想能输出,需要把aaa前加个L,转为宽字节 MessageBox(L"baa");
*
声明宽字节字符串 wchar_t
wchar_t* wc = L"start";
*
统计宽字节字符串 wcslen
int num2 = wcslen(wc);
*
Text做了自适应编码转换
//而加上Text则是,自适应编码的转换 MessageBox(TEXT("aaa"));
//TChar()也是自适应的编码的转换。所以在mfc中建议使用TChar()而不是Char
*
char*与CString的转换
//char* 与CString之间的转换 //1、char*转CString char* p = "right"; CString cs = CString
(p);//调用有参构造函数。 //2、CString转char* CStringA csa = cs; char* ps = csa.GetBuffer();
//若想string与CString转换,需要先把string转换为char* 再让char*与CString转换
*
利用vs向导创建mfc

* 流程
* 单个文档
* MFC standard
* 完成
* 视图
* 类视图
* 添加鼠标、键盘、绘图
* 框架窗口是视窗口的父窗口,视窗口覆盖在框架窗口之上,所以要在视窗口添加消息
* 右击CMFCView的属性,点击消息,选中自己需要的add就行了

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信