使用SDK实现MFC模式的处理方法(一)

原创 2008年09月30日 17:07:00
一.起子
     没有,想用SDK而已, 程序看的清爽. 讨厌mfc许多麻烦的代码.有时候明明很简单,却只好用mfc,不爽.
二.构想
     如果你尝试模仿mfc, 你就会发现似乎有一道过不去的坎, 你想实现自己的CWnd, CDialog, 可是发现很难实现复用. 因为你的"CWnd,CDialog"似乎必须要有一个尾巴, 这个尾巴就是WndProc, 一个被要求是__stdcall 的函数.  
     假设,你实现了你的基类: CMyWindow, 然后你的程序中有两个窗口: CPigWnd 和 CWolfWnd. 你如何使用一个WndProc来处理两个窗口? 你的基类设计也已经失败了.
     实际上,mfc使用了一种 很麻烦的技术实现如何让每一个类只与一个窗口句柄想关联, 而mfc只有一个WndProc,叫什么AfxWndProc之类的, 在这个AfxWndProc中, 他会检查 HWND hwnd 参数, 然后通过 FromHandle() ,使hwnd 转换为CWnd, 然后才调用CWnd类的消息处理函数. 这个是非常麻烦的过程, 想想看MFC把hwnd都存在一个表格中, 然后需要的时候通过HashTable来定位.  从这点看,不得不说SDK的实现非常优雅,准确的说,很纯洁.
    其实在::CreateWindowEx 中有一个 LPVOID lpParam参数,允许用户传递一个值和hwnd捆绑起来, 许多人就这样实现了捆绑.如果真的那么完美就好了, 可问题是这个参数只在WM_CREATE消息时才传递出来, 也就是说只有在这个时候CMyWindow才有机会和句柄绑定, 可是在WM_CREATE之前的消息对于CMyWindow来说都不可见(尽管这些消息也许并不重要,可是最为一个基类,这样的缺陷还是致命的)
    怎么办? 如果有一个WndProc能有一个this指针,指向各自的类,那该有多好啊~
    这是一个称为动态函数的技术, 
    1.我们事先制造一个WndProc的模板,里面有一个叫pThis的指针,他有一个特征值. 
    2.CMyWindow在构造时, 复制WndProc的模板, 然后把pThis的值,改写成CMyWindow实例的this指针.
    3.在CreateWindow时, WNDPROC 就使用CMyWindow的WndProc.
通过这几步, 很完满的实现了句柄与类的绑定, 相信也比MFC的实现清晰许多,(我一直觉得,MFC是M$的技术人员卖弄技术的产品)

SDK中使用mfc

1.在stdafx.h中所有的头文件之前加入如下头文件:  #include                   //   MFC   core   and   standard   compon...
  • nanjian011
  • nanjian011
  • 2015年06月29日 18:00
  • 684

在SDK程序中使用MFC中的辅助类

在SDK程序中使用MFC中的辅助类     由于MFC中的辅助类,如CFileDialog,CFileFind,CString等使用起来非常的方便     如果用API来完成相应的工作,则需要自己...
  • chinafe
  • chinafe
  • 2008年04月01日 18:35
  • 1113

在mfc中使用cef实现webkit的浏览器(一)-准备工作

首先,下载一个cef的开发包,我下载的是 cef_binary_3.2171.1901_windows32 这个版本的(下载链接)。 下载完成解压后,用vs打开,编译其中的 libcef_dll...
  • long12310225
  • long12310225
  • 2017年08月31日 08:58
  • 448

MFC与SDK的区别

先来看一下,什么是MFC,什么是SDK吧,        SDK   ---Software   Development   Kit (软件开发包)         MFC   ---Micr...
  • yu12345678900
  • yu12345678900
  • 2015年05月05日 14:01
  • 826

[每日一学]MFC学习笔记——自定义消息的使用

简单概要 windows的消息机制在前面的几章已经介绍过了,今天来学习一下自定义消息。 预备知识 看完前几章的文章。 具体步骤 新建一个工程,名称为“MyMe...
  • kingsollyu
  • kingsollyu
  • 2012年12月11日 12:05
  • 4545

在非mfc程序中使用CString类

在非mfc程序中使用CString类       CString在当今软件设计界里还是小有名气的,说它是MFC中使用的最多的类一点也不过,然而在使用sdk编windows程序的时候,确...
  • henry19850318
  • henry19850318
  • 2011年09月28日 09:37
  • 1928

MFC绘图控制-映射模式

MFC绘图控制-映射模式。
  • mengwang024
  • mengwang024
  • 2014年11月20日 19:49
  • 1186

利用海康威视sdk 预览摄像机

using PreviewDemo; using System; using System.Collections.Generic; using System.ComponentModel; ...
  • xiaoereee
  • xiaoereee
  • 2017年02月22日 15:38
  • 1540

微信扫码支付模式一

微信支付文档1、生成二维码 2、二维码回调 3、支付成功回调 4、监听是否成功 4、错误解决方案官方上说的这里就不提了。 官方文档地址简单理解的流程: 1、开发者设置微信参数生成二维码 ...
  • csdn_Info
  • csdn_Info
  • 2017年05月31日 15:15
  • 1284

Java消息中间件学习笔记四 -- ActiveMQ的使用,【队列模式】

JMS代码演练使用JMS接口规范连接ActiveMQ 创建生产者 创建发布者 创建消费者 创建订阅者 首先回顾一下JMS编码结构之间的关系使用idea创建maven项目引入依赖: ...
  • Winter_chen001
  • Winter_chen001
  • 2017年11月01日 20:58
  • 179
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用SDK实现MFC模式的处理方法(一)
举报原因:
原因补充:

(最多只允许输入30个字)