当前位置:网站首页>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();
}
边栏推荐
- Codeforces Round #753 (Div. 3)
- Install mongdb tutorial and redis tutorial under Windows
- Learn winpwn (2) -- GS protection from scratch
- AI benchmark V5 ranking
- Software testing and quality learning notes 3 -- white box testing
- Codeforces Round #771 (Div. 2)
- Remember a company interview question: merge ordered arrays
- 机器学习--人口普查数据分析
- Swagger, Yapi interface management service_ SE
- 误删Path变量解决
猜你喜欢
QT creator specifies dependencies
Data dictionary in C #
Deoldify project problem - omp:error 15:initializing libiomp5md dll,but found libiomp5md. dll already initialized.
QT creator custom build process
自动机器学习框架介绍与使用(flaml、h2o)
一键提取pdf中的表格
Deoldify项目问题——OMP:Error#15:Initializing libiomp5md.dll,but found libiomp5md.dll already initialized.
Learn winpwn (3) -- sEH from scratch
MySQL主從複制、讀寫分離
学习问题1:127.0.0.1拒绝了我们的访问
随机推荐
数数字游戏
牛客Novice月赛40
Principes JDBC
Request object and response object analysis
学习问题1:127.0.0.1拒绝了我们的访问
DICOM: Overview
Knowledge Q & A based on Apache Jena
Detailed reading of stereo r-cnn paper -- Experiment: detailed explanation and result analysis
一键提取pdf中的表格
Pytorch基础
02-项目实战之后台员工信息管理
QT creator custom build process
[recommended by bloggers] C WinForm regularly sends email (with source code)
When you open the browser, you will also open mango TV, Tiktok and other websites outside the home page
自动机器学习框架介绍与使用(flaml、h2o)
MySQL master-slave replication, read-write separation
[蓝桥杯2020初赛] 平面切分
安装numpy问题总结
QT creator support platform
数据库高级学习笔记--SQL语句