当前位置:网站首页>Vs2019 first MFC Application
Vs2019 first MFC Application
2022-07-06 11:24:00 【imxlw00】
Create project
The creation of the project is the same as before , Only the suffix of the source file this time is .cpp, because MFC By C++ Compiling , To write MFC The program needs to contain **#include <afxwin.h>** The header file .
Write code
mfc.h
#pragma once
#include <afxwin.h>
class MyApp :public CWinApp//CWinApp Application class
{
public:
// Program entrance
virtual BOOL InitInstance();
};
class MyFrame :public CFrameWnd
{
public :
MyFrame();
};
mfc.cpp
#include "mfc.h"
MyApp app;// Global application objects , There is and only one
BOOL MyApp::InitInstance()
{
// create a window
MyFrame* frame = new MyFrame();
// Display and update
frame->ShowWindow(SW_NORMAL);
frame->UpdateWindow();
// Save a pointer to the main window of the application
m_pMainWnd = frame;
// Return to normal initialization
return TRUE;
}
MyFrame::MyFrame()
{
Create(NULL, TEXT("mfc"));
}
Run the program
Configuration environment
Right-click the project properties
It shows an empty interface
Program execution flow
① When the program starts , Instantiate the application object first ( There is one and only one )
② The entry function of the execution program InitInstance()
③ To frame class MyFrame Object dynamically allocates space ( Automatically call its constructor ), Inside its constructor , adopt CWnd::Create create a window
④ Frame class object display window CWnd::ShowWindow
⑤ Frame class object update window CWnd::UpdateWindow
⑥ Save frame class object pointer CWinThread::m_pMainWnd
Message mapping
A message map is a table that associates messages with member functions . such as , The frame window receives a left mouse click message ,MFC The message map for this window will be searched , If there is a process WM_LBUTTONDOWN Message handler , Then call OnLButtonDown.
Here's all you've done to add a message map to a class :
1) In the operated class , Declare the message mapping macro .
2) Perform message mapping by placing a macro that identifies the message , The corresponding class will BEGIN_MESSAGE_MAP and END_MESSAGE_MAP Processing messages between calls to .
3) The corresponding message processing functions are declared in the class , Off class definition :
Add message processing
Let the program move !!!
// Declare macros Provide message mapping mechanism
DECLARE_MESSAGE_MAP()
afx_msg void OnLButtonDown(UINT, CPoint);
afx_msg void OnChar(UINT, UINT, UINT);
afx_msg void OnPaint();
// Boundary macro
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
ON_WM_LBUTTONDOWN() // Press the left mouse button
ON_WM_CHAR() // keyboard
ON_WM_PAINT() // Drawing macro
END_MESSAGE_MAP()
void MyFrame::OnLButtonDown(UINT, CPoint point)
{
/*TCHAR buf[1024]; wsprintf(buf, TEXT("x = %d, y =%d"), point.x, point.y); MessageBox(buf);*/
//mfc String in 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(" Press %c key "), key);
MessageBox(str);
}
void MyFrame::OnPaint()
{
CPaintDC dc(this); //CDC Look for other graphics that you can draw
dc.TextOutW(100, 100, TEXT(" For the tribe "));
// Drawing ellipse
dc.Ellipse(10, 10, 100, 100);
// Multi byte to Wide bytes
//TEXT Is the conversion by adaptive coding
// TCHER Conversion of adaptive coding
//MessageBox(L"aaa");
// Statistical string length
int num = 0;
char * p = "aaaa";
num = strlen(p);
// Count the string length of wide bytes
wchar_t * p2 = L"bbbb";
num = wcslen(p2);
//char * And CString Conversion between C++ string .c_str();
//char* -> CString
char * p3 = "ccc";
CString str = CString(p3);
//CString -> char *
CStringA tmp;
tmp = str;
char * pp = tmp.GetBuffer();
}
边栏推荐
- Ansible实战系列一 _ 入门
- Ansible practical Series II_ Getting started with Playbook
- AcWing 1298.曹冲养猪 题解
- 一键提取pdf中的表格
- vs2019 桌面程序快速入门
- AcWing 1298. Solution to Cao Chong's pig raising problem
- QT creator runs the Valgrind tool on external applications
- QT creator specifies dependencies
- Data dictionary in C #
- The virtual machine Ping is connected to the host, and the host Ping is not connected to the virtual machine
猜你喜欢
PyCharm中无法调用numpy,报错ModuleNotFoundError: No module named ‘numpy‘
Did you forget to register or load this tag
图像识别问题 — pytesseract.TesseractNotFoundError: tesseract is not installed or it‘s not in your path
Use dapr to shorten software development cycle and improve production efficiency
Neo4j installation tutorial
QT creator create button
QT creator specify editor settings
连接MySQL数据库出现错误:2059 - authentication plugin ‘caching_sha2_password‘的解决方法
AI benchmark V5 ranking
Learning question 1:127.0.0.1 refused our visit
随机推荐
使用lambda在循环中传参时,参数总为同一个值
Machine learning -- census data analysis
记一次某公司面试题:合并有序数组
Armv8-a programming guide MMU (2)
02 staff information management after the actual project
项目实战-后台员工信息管理(增删改查登录与退出)
FRP intranet penetration
Image recognition - pyteseract TesseractNotFoundError: tesseract is not installed or it‘s not in your path
Django运行报错:Error loading MySQLdb module解决方法
机器学习笔记-Week02-卷积神经网络
安全测试涉及的测试对象
Windows下安装MongDB教程、Redis教程
Remember a company interview question: merge ordered arrays
SSM integrated notes easy to understand version
[蓝桥杯2017初赛]方格分割
Unable to call numpy in pycharm, with an error modulenotfounderror: no module named 'numpy‘
One click extraction of tables in PDF
Install MySQL for Ubuntu 20.04
JDBC原理
Project practice - background employee information management (add, delete, modify, check, login and exit)