(二)一个MFC程序,消息映射,纯代码
1.应用程序类 CWinApp
CWinApp 类
派生出 Windows 应用程序对象的基类
2.框架类 CFrameWnd
提供 Windows 单文档界面 (SDI) 重叠式或弹出框架窗口功能,并提供管理窗口的成员。
class CFrameWnd : public CWnd
错误
1>------ 已启动生成: 项目: mfc, 配置: Debug Win32 ------ 1>mfc.cpp 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\atlmfc\include\afx.h(24): fatal error C1189: #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] 1>已完成生成项目“mfc.vcxproj”的操作 - 失败。 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
解决:
fatal error LNK1561: 必须定义入口点”解决方法
建立了一个空项目。 添加了一个 Hello.cpp 和 Hello.h 然后,编译的时候,报错:“fatal error LNK1561: 必须定义入口点” 网上找了许久,发现一个解决方法。 解决方案上,右键->属性->链接器->高级->入口点,设置成:WinMainCRTStartup 另一方法是: 解决方案上,右键->属性->链接器->系统->子系统,下拉框选择:窗口 (/SUBSYSTEM:WINDOWS)
1,有且只有一个全局应用程序类对象
2,在程序入口函数实现功能 InitInstance()
A,给框架类MyFrame 对象动态分配空间(自动调用它的构造函数)
a,框架类MyFrame 对象构造函数里创建窗口 CWnd::Create
B,框架类对象显示窗口 CWnd::ShowWindow
C,框架类对象更新窗口 CWnd::UpdateWindow
D,保存框架类对象指针 CWinThread::m_pMainWnd
PostMessage 与 SendMessage
https://blog.csdn.net/xiaodan007/article/details/7681031
消息映射
#include "mfc.h" // 有且只有一个全局的应用程序类对象 MyApp myApp; BOOL MyApp::InitInstance() { /* 1,创建框架类对象 2,显示窗口 3,更新窗口 4,保存框架类对象指针 */ MyFrame *frame = new MyFrame; frame->ShowWindow(SW_SHOWNORMAL);// 显示窗口 frame->UpdateWindow();// 更新窗口 m_pMainWnd = frame; // 保存框架类对象指针 return true; } // 定义消息宏 BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd) ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() MyFrame::MyFrame() { // CWnd 类的成员函数 CWnd::create // CFrameWnd 继承于 CWnd Create(NULL, TEXT("MFC")); // 调用以创建并初始化与关联的 Windows 框架窗口CFrameWnd对象。 } void MyFrame::OnlButtonDown(UINT, CPoint) { // CWnd::MessageBox MessageBox(TEXT("鼠标左键")); }
#pragma once #include <afxwin.h> //1.应用程序类 CWinApp,派生类(子类) class MyApp : public CWinApp { public: // 基类的虚函数 // 派生类只是重写 // MFC 程序入口地址 virtual BOOL InitInstance(); private: }; //2.框架类 CFrameWnd, 派生类(子类) class MyFrame : public CFrameWnd { public: MyFrame(); // 声明消息映射宏 DECLARE_MESSAGE_MAP(); afx_msg void OnlButtonDown(UINT,CPoint); private: };
增加画图消息处理
#include "mfc.h" // 有且只有一个全局的应用程序类对象 MyApp myApp; BOOL MyApp::InitInstance() { /* 1,创建框架类对象 2,显示窗口 3,更新窗口 4,保存框架类对象指针 */ MyFrame *frame = new MyFrame; frame->ShowWindow(SW_SHOWNORMAL);// 显示窗口 frame->UpdateWindow();// 更新窗口 m_pMainWnd = frame; // 保存框架类对象指针 return true; } // 定义消息宏 BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd) ON_WM_LBUTTONDOWN() ON_WM_PAINT() END_MESSAGE_MAP() MyFrame::MyFrame() { // CWnd 类的成员函数 CWnd::create // CFrameWnd 继承于 CWnd Create(NULL, TEXT("MFC")); // 调用以创建并初始化与关联的 Windows 框架窗口CFrameWnd对象。 } void MyFrame::OnlButtonDown(UINT, CPoint) { // CWnd::MessageBox MessageBox(TEXT("鼠标左键")); } void MyFrame::OnPaint() { CPaintDC cdc(this); cdc.TextOutA(100,100,TEXT("hello world")); }
#pragma once #include <afxwin.h> //1.应用程序类 CWinApp,派生类(子类) class MyApp : public CWinApp { public: // 基类的虚函数 // 派生类只是重写 // MFC 程序入口地址 virtual BOOL InitInstance(); private: }; //2.框架类 CFrameWnd, 派生类(子类) class MyFrame : public CFrameWnd { public: MyFrame(); // 声明消息映射宏 DECLARE_MESSAGE_MAP() afx_msg void OnlButtonDown(UINT,CPoint); afx_msg void OnPaint(); private: };