一 窗口的创建(2)
1 加载菜单
2 调用CreateEx成员函数,注册窗口类/创建窗口
2.1 调用PreCreateWindow成员函数 设计并注册窗口类
1)调用AfxDeferRegisterClass全局函数设计窗口类
WNDCLASS wndcls;
wndcls.lpfnWndProc = DefWindowProc;
.....
并调用 AfxRegisterClass全局函数,在这个函数
中调用WIN32 API 函数::RegisterClass注册一个
局部窗口类 类名称为"AfxFrameOrView42sd"
2.2 调用AfxHookWindowCreate函数
1)利用::SetWindowsHookEx在程序中埋下一个类型
为WH_CBT的钩子。
2)将自己new的框架类对象地址(pFrame)保存到
当前程序线程信息中。
2.3 调用WIN32 API 函数 ::CreateWindowEx创建窗口
此函数一旦执行成功,马上执行钩子处理函数。
3 钩子处理函数
3.1 将 窗口句柄 和 框架类对象 建立一对一绑定关系
3.2 将 窗口处理函数 更改为
AfxWndProc(真正的窗口处理函数)
二 AfxWndProc(窗口处理函数)处理消息的执行过程
1 利用消息所属窗口句柄,找到和它绑定在一起框架类
对象地址(pFrame)。
2 利用框架类对象地址(pFrame)调用框架类的成员虚函
数(WindowProc),完成消息的处理。
MFC DAY02
时间: 2024-10-19 15:18:17
MFC DAY02的相关文章
C++MFC编程笔记day02 MFC消息映射机制、菜单资源使用
机制3:MFC消息映射机制: 类内声明,类外定义宏,绑定消息处理函数 派生自CCmdTarget 类内声明宏:DECLARE_MESSAGE_MAP() 类外添加实现宏: BEGIN_MESSAGE_MAP(类名,父类名) END_MESSAGE_MAP() //数据结构 struct AFX_MSGMAP_ENTRY { UINT nMessage; // 消息ID UINT nCode; // 通知码 UINT nID; // 控件ID或消息 UINT nLast
MFC总结
一MFC 的概念和作用 1 什么是MFC? 全称Microsoft Foundation Class Library 我们称之为 微软基础类库,封装了绝大部分WIN32 api 函数,还封装 了程序流程. 1.1 硬盘存在形式就是一个库(静态库/动态库) 1.2 原理上还是一个程序框架 2 为什么使用MFC? 基于框架编程,提供工作效率,减少开发周期,节约开发 成本. 二几个重要头文件 afx.h - MFC 绝大部分类的声明 afxwin.h - 包含了afx.h 和windows.h afx
MFC学习之路
一.接触MFC day01 1. 使用资源: ①insert resource,对话框资源 ②resource view下面,右键对话框,修改properties,重要的是资源ID,一般为IDD_Dialogxx ③对资源的操作一般都是通过类来完成,因此要操作资源需要为资源添加类,基类一般都是CDialog 注意:添加类后,在class view中没有该类的浏览信息 方法一:可以删除 .ncb文件(no compile browse 无编译浏览文件),重新编译一遍 方法二:在文件视图,右键工程
《深入浅出MFC》第七章 简单而完整:MFC骨干程序
不二法门:熟记MFC类层次结构.经常使用的主要MFC类:CWinApp, CWnd<-CView, CWnd<-CFrameWnd, CFrameWnd<-CMDIFrameWnd, CFrameWnd<-CMDIChildWnd, CWnd<-CDialog, CWnd<-CControlBar, CControlBar<-CStatusBar, CControlBar<-CToolBar, CCmdTarget<-CDocument, CCmdTa
深入浅出MFC——消息映射与命令传递(六)
1. 消息分类: 2. 万流归宗——Command Target(CCmdTarget): 3. "消息映射"是MFC内建的一个信息分派机制.通过三个宏(DECLARE_MESSAGE_MAP/BEGIN.../ON.../END...)完成消息网的建构. 4. 注意:CWinThread派生自CCmdTarget,但没有DECLARE_/BEGIN_/END_宏组. 5. 消息映射与虚函数: 6.
MFC控件使用技巧:List Control
1)每列内容过长,显示不完整 只有加载数据的情况下,才会出现水平滚动条 解决方案: 可以添加如下一个空的内容项: m_List.InsertItem(0,NULL);//为了显示进度条 2)不允许点击修改第一列(当然最多能够让我们改动的也只有他了) MFC默认情况下可以修改第一列,其他的不允许修改(需要定制DrawItem) 解决方案: Edit Labels 属性设置为 False 3)报表的形式表示 View 属性设置为 Report 4)注意:不要和列表框控件混淆(英文名: List Bo
【mfc】用对话框分页实现用户登录
所谓的对话框分页就是点击完一个对话框的按钮,切换到另一个对话框, 这样的对话框多用于一些需要用户登录才能够进行操作的软件, 下面就用对话框分页来实现用户登录系统 一.基本目标 有如下的程序,输入用户名与密码,如果用户名为admin,密码为123456,那么则成功登录,切换到一个有"欢迎登录"与"关闭"按钮的对话框 如果用户名或者密码输入错误则弹出提示, 点击关闭能够关闭这个程序,不弹出用户登录的对话框. 二.制作过程 1.首先如同之前的<[mfc]对于对话框程
DAY02 WINDOWS 实验报告
实验一 实验名称: ghost做系统的备份与还原 实验描述:对系统进行备份,可以使用户在电脑中病毒或出故障后,可以还原到一个比较纯净的系统环境 实验步骤: 步骤1:点击编辑虚拟机设置-CD/DVD-选择镜像文件-选择超级急救箱 步骤2:启动虚拟机-进入资源管理器-运行超级急救箱安装文件 步骤3:重启系统-选择超级急救箱-选择ghost32 for winpe 步骤4:进入PE系统以后,点击ghost32程序-选择local->partition->To image-下一步-选择要备份的分区-选
MFC中给控件添加变量,DoDataExchange中
DoDataExchange函数其实是一项数据动态绑定技术.比如你在写动态按钮过程中须对按钮添加变量时,怎么添加?控件类已经写好了,其变量是已经固定的.你要添加新的变量就要用到DoDataExchange函数. 你要在对话框的构造函数里面初始化一个变量,再用DoDataExchange函数将它绑定到你的动态按扭中,比如:DDX_Check(pDX, IDC_CHECK1, m_Lesson1);这就是将m_Lesson1(这是一个外部变量,其定义在对话框的构造函数里)绑定到IDC_CHECK1中