当前位置:网站首页>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();
}

边栏推荐
- vs2019 桌面程序快速入门
- Base de données Advanced Learning Notes - - SQL statements
- Project practice - background employee information management (add, delete, modify, check, login and exit)
- Introduction and use of automatic machine learning framework (flaml, H2O)
- Learning question 1:127.0.0.1 refused our visit
- One click extraction of tables in PDF
- [Thesis Writing] how to write function description of jsp online examination system
- DICOM: Overview
- 引入了junit为什么还是用不了@Test注解
- Julia 1.6 1.7 common problem solving
猜你喜欢

One click extraction of tables in PDF

Install mysql5.5 and mysql8.0 under windows at the same time

QT creator create button

AcWing 242. A simple integer problem (tree array + difference)

double转int精度丢失问题

Swagger, Yapi interface management service_ SE

Image recognition - pyteseract TesseractNotFoundError: tesseract is not installed or it‘s not in your path

Why can't I use the @test annotation after introducing JUnit

vs2019 第一个MFC应用程序

Case analysis of data inconsistency caused by Pt OSC table change
随机推荐
图像识别问题 — pytesseract.TesseractNotFoundError: tesseract is not installed or it‘s not in your path
QT creator support platform
Learn winpwn (2) -- GS protection from scratch
机器学习笔记-Week02-卷积神经网络
Neo4j installation tutorial
In the era of DFI dividends, can TGP become a new benchmark for future DFI?
MTCNN人脸检测
vs2019 第一个MFC应用程序
Cookie setting three-day secret free login (run tutorial)
MySQL主从复制、读写分离
Solve the problem of installing failed building wheel for pilot
Base de données Advanced Learning Notes - - SQL statements
Did you forget to register or load this tag 报错解决方法
报错解决 —— io.UnsupportedOperation: can‘t do nonzero end-relative seeks
How to set up voice recognition on the computer with shortcut keys
QT creator shape
Data dictionary in C #
[recommended by bloggers] C WinForm regularly sends email (with source code)
Ansible practical Series III_ Task common commands
[recommended by bloggers] C # generate a good-looking QR code (with source code)