MFC
wishfly
这个作者很懒,什么都没留下…
展开
-
VC MFC滚动条(CScrollBar)控件
这里不讲滚动条的使用方法了,只说怎么自绘滚动条控件。滚动条基本知识参考http://hi.baidu.com/3582077/blog/item/d30e5b38f8709aecb211c7c0.html(PS暂且先自绘水平滚动条,不考虑垂直滚动条,有了这个基础,后面会给出完整的例子,直接看代码就行了,不需要再说明了)自绘是在滚动条WM_PAINT消息处理函数里完成的。第一步是得知道,转载 2013-04-19 11:36:13 · 8336 阅读 · 0 评论 -
CRuntimeClass的应用
CRuntimeClass在MFC中的作用很重要,因为MFC利用它来进行类的动态确定,即是通过类变量来判定该变量是否为某一类的实例。由于指针的类 型是可以转换的,所以时常会出现从A到B的转换导致错误。而在MFC的各种书籍中对CRuntimeClass的介绍是比较少的,在这里总结它的一些用 法。1、动态确定类在MFC中CObject::IsKindOf( const CRuntimeClas转载 2013-03-19 14:25:18 · 1077 阅读 · 0 评论 -
说说MFC中CRuntimeClass和CObject之间的那点事
MSDN曰:对于MFC中每个从CObject派生的类来说,都有一个相关的CRuntimeClass结构体,在程序运行时可以访问该结构体来获取对象及其基类的信息。CRuntimeClass是一个结构体,并且其本身并没有基类。在运行时确定一个对象的类型是很重要的,尤其是在做类型检查时;而c++语言本身并不支持运行时类信息。CObject和CRuntimeClass是MFC中两个非常重要的类转载 2013-03-19 14:23:31 · 5567 阅读 · 0 评论 -
CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别
class CWnd : public CCmdTarget{ public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual void PreSubclassWindow(); BOOL SubclassWindow(HWND hWnd); };转载 2013-04-01 10:00:09 · 845 阅读 · 0 评论 -
MFC程序启动过程
// appcore.cppCWinApp::CWinApp(LPCTSTRlpszAppName){ if (lpszAppName !=NULL) m_pszAppName = _tcsdup(lpszAppName); else m_pszAppName = NULL; // initializ原创 2013-03-31 23:27:34 · 2202 阅读 · 0 评论 -
CCreateContext
OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)virtual BOOL CreateView(int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext);CCreateCon转载 2013-03-31 17:10:59 · 3523 阅读 · 0 评论 -
MFC消息映射和命令路由
//wincore.cppBOOL CWnd::CreateEx(DWORDdwExStyle,LPCTSTRlpszClassName, LPCTSTR lpszWindowName, DWORDdwStyle, int x, int y,intnWidth,int nHeight, HWND hWndParent, HMENUnIDo原创 2013-03-31 22:48:29 · 2113 阅读 · 0 评论 -
CListView::GetListCtrl是如何将CListView*转换为CListCtrl*的
程序员的兴奋之处在于,总有些时候你会觉得自己TM像从没学过一样。。。看了这篇文章,我就觉得自己像没学过MFC一样。。看来得把学习MFC源码列入学习计划了。一石三鸟: MFC使用得更好; 提升C++功力; 深入的探索Windows消息机制。记得一年前读过《深入浅出MFC》的,奈何那时是硬着头皮读的,没基础,读着收获不大,现在有必要进行真正的参悟了。 查看MFC中与CL转载 2013-03-31 16:56:44 · 2042 阅读 · 0 评论 -
VC++窗口的创建过程
在Windows中运行的程序,大多数都有一个或几个可以看得见的窗口,而在这些窗口被创建起来之前,操作系统怎么知道该怎样创建该窗口,以及用户操作该窗口的各种消息交给谁处理呢?所以VC在调用Windows的API(CreateWindow或者CreateWindowEx)创建窗口之前,要求程序员必须定义一个窗口类(不是传统C++意义上的类)来规定所创建该窗口所需要的各种信息,主要包括:窗口的消息处理函转载 2013-03-30 20:20:50 · 1962 阅读 · 0 评论 -
CREATESTRUCT与WNDCLASS的关系
随笔一般我们说的窗口类就是WNDCLASS,它是个结构,用来存储窗口本身的一些信息。我们所说的设计一个窗口,也就是初始化WNDCLASS对象的成员变量。它包含着图标、光标、背景画刷的句柄,菜单栏的指针,窗口类风格等信息。其中,最关键的是成员变量lpszClassName,这是一个指针,指向这个窗口类的唯一名称标示(字符串),在注册完该窗口类之后,就可以用这个指针来找到标示,从而找到转载 2013-03-30 17:35:18 · 1911 阅读 · 0 评论 -
CWnd::CreateEX中HOOK函数作用
用最基本的一句话概述,钩子函数起了很大作用。故事是这样的,有些漫长,也需要些耐心。MFC中消息分为3类: 1. WM_COMMAND:所有的UI组件和加速键都会产生这种消息,所有派生于CCmdTarget的类都有能力处理该消息 2. 标准消息:除WM_COMMAND之外的WM_xx消息都是标准消息,派生于CWnd的类都有能力处理该消息 3. 控件通知消息转载 2013-03-30 21:40:25 · 2656 阅读 · 0 评论 -
CREATESTRUCT-style
扩展窗口风格:WS_EX_ACCEPTFILES 指明用这个风格创建的窗口能够接受拖放文件。 · WS_EX_CLIENTEDGE 指明窗口具有3D外观,这意味着,边框具有下沉的边界。 · WS_EX_CONTEXTHELP 在窗口的标题条中包含问号。当用户单击问号时,鼠标光标的形状变为带指针的问号。如果用户随后单击一个子窗口,子窗口将接收到一个WM_HELP消息。 · WS转载 2013-03-30 17:36:15 · 2233 阅读 · 0 评论 -
MFC源代码的头文件源文件切换,以及源代码的挖掘和学习
转自:http://blog.csdn.net/liquanhai/article/details/7074825 MFC的源代码可以说是微软共享给广大程序员的一笔很宝贵的财富,尤其是调试的时候会调试进去,让我们看到“有代码有真相”。无幻兄弟已经总结过两种方法查看MFC源代码。笔者再在此基础上锦上添花。 一:快速实现类浏览的方法 首先介绍一个快速实现转载 2013-03-31 12:40:17 · 1059 阅读 · 0 评论 -
CListCtrl 的自绘
自行绘制 ClistCtrl 的列表项,可以利用列表框的 NM_CUSTOMDRAW 消息,该消息由控件向它的父窗口发送,告诉父窗口它的绘图操作。如果绘图操作不需要父窗口参与,可以使用该控件的 ON_NOTIFY_REFLECT 宏处理它的 NM_CUSTOMDRAW 消息。它的处理函数的参数中包含 NMHDR,在 CUSTOMDRAW 的通知下 NMHDR 可以被转换成为 NMLVCUS转载 2013-03-29 00:54:32 · 878 阅读 · 0 评论 -
ON_MESSAGE ,ON_COMMAND, , ON_NOTIFY
对这几个消息的理解要先了解一下Window消息的背景。 在Windows3.1里,控件会将mouse, keybord等等的消息通知它的父窗口, 使用的消息就只有WM_COMMAND, 事件种类和控件ID被包含在wParam中, 控件的句柄包含在lParam中。由于wParam和 lParam已经满了,当控件要向父窗口发送其它特殊消息同时附带很多信息的时候就没有地方转载 2013-03-29 08:55:58 · 651 阅读 · 0 评论 -
了解CObject 和 CRuntimeClass
CObject和CRuntimeClass是MFC中两个非常重要的类/结构,绝大部分MFC类都是以CObject做为基类, CRuntimeClass结构同CObject密不可分,了解它们对于深入理解MFC具有重要意义。一、CRuntimeClass结构要理解CObject,我们先来看一下CRuntimeClass这个在MFC中至关重要的一个结构。每个从CObject中派生转载 2013-03-19 14:26:55 · 956 阅读 · 0 评论 -
DECLARE_DYNAMIC 和 DECLARE_DYNCREATE
这些类只要DECLARE_DYNAMIC:CObjectCCmdTargetCWinThreadCWinAppCMyWinAppCViewCDocument而这些类则要DECLARE_DYNCREATE:CWndCFrameWndCMyFrameWndCMyViewCMyDoc 什么宏都没有 不支持运行时类信息或序列化原创 2013-03-19 14:39:27 · 3553 阅读 · 0 评论 -
深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建)
第三章:MFC六大关键技术之仿真:类型识别 深入理解MFC的内部运行原理,是本次学习《深入浅出MFC》的主要目的。要模仿的六大技术包括:1:MFC程序的初始化过程。2:RTTI(Runtime type identification)运行时类型识别。3:Dynamic creation动态创建4:Persistence永久保存5:消息映射6:消息传递。转载 2013-03-19 14:28:52 · 1052 阅读 · 0 评论 -
GDI+编程基础(一)GDI+ Vs GDI
文章概要:GDI+:GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好。GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你还可能要知道设备,而GDI+是一个高层的API,你不必知道设备。例如你如果要设置某个控件的前景和背景色,只需设置BackColor和ForeColor属性。 一、GDI转载 2013-03-29 23:51:20 · 1030 阅读 · 0 评论 -
函数返回二维数组
#include "stdafx.h"#include //float **get_mem(int i, int j){ float **p = (float**)malloc(i * sizeof(float)); for( int m = 0; m { p[m] = (float*)malloc(sizeof(float)); } return p;原创 2013-04-10 17:41:33 · 742 阅读 · 0 评论 -
MFC的动态创建问题
http://bbs.csdn.net/topics/300109690 http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&site=&source=hp&q=MFC+%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8A%A8%E6%80%81%E5%88%9B%E5%BB%BA%E5%AF%B9转载 2013-03-22 10:00:56 · 796 阅读 · 0 评论 -
MFC漫谈(一)——RTTI
所有的这一系列的东西都来源于前天晚上的一个电话,内容大概是说: “ 你能教会我一个让我对 MFC 有点感觉的 Hello World 吗?我渴望一个像用 C 写的 Win32 Hello World 一样直观的例子。 ” 想想这曾经是我学习 MFC 的时候也想到过的问题。我是一个喜欢刨根问底的人,喜欢把事情搞明白,于是曾经很长的一段时间里,我都困惑在纷繁杂乱的代码里。现在回想起来,侯捷老师的《 D转载 2013-03-22 11:10:28 · 869 阅读 · 0 评论 -
ON_NOTIFY_REFLECT
http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&site=&source=hp&q=SendChildNotifyLastMsg&btnK=Google+%E6%90%9C%E7%B4%A2http://www.cnblogs.com/dayouluo/archive/2005/07/28/201651.html转载 2013-04-03 17:26:34 · 3928 阅读 · 0 评论 -
深度解析VC中的消息(下)
前面,我们分析了消息的基本理论和基本的函数及用法,接下来,我们将进一步讨论消息传递在MFC中的实现。MFC消息的处理实现方式初看MFC中的各种消息,以及在头脑中根深蒂固的C++的影响,我们可能很自然的就会想到利用C++的三大特性之一:虚拟机制来实现消息的传递,但是经过分析,我们看到事情并不是想我们想象的那样,在MFC中消息是通过一种所谓的消息映射机制来处理的。为什么呢?在潘爱民老师翻译转载 2013-04-03 17:22:06 · 734 阅读 · 0 评论 -
让人迷惑的Custom Draw与Owner draw
最近忙于美化界面,然而wince上面提供的功能比桌面上要少的多,网上可供选择的控件也少的可怜(后来发现还是有些的,没有调研就没有发言权啊!:()。好在功夫不负有心人,借鉴别人的代码,也给我倒腾出带图片的按钮、不规则形状按钮、可在每行中显示图片的listctrl。希望最近有时间可以把这些整理出来写成博客,这次先不提这。这里要说的让人迷惑的Custom Draw与Owner draw。可能有不少人转载 2013-04-03 17:19:15 · 863 阅读 · 0 评论 -
关于ListCtrol的owner-draw和custom-draw
一、所有者绘制(owner-draw)和自定义绘制(custom-draw)一、给控件添加排序功能report风格的list控件很多情况下都需要支持排序功能,而且最好支持按不同列进行排序。CListCtrl的类方法SortItems支持排序功能,但是在排序过程中,两个数据真正的比较过程是通过SortItems的第一个参数指向的回调比较函数来完成的。这个函数通过比较SetItemData函数转载 2013-04-03 17:17:55 · 1460 阅读 · 0 评论 -
CView类只能动态创建
// CATreeView 视图class CATreeView : public CTreeView{DECLARE_DYNCREATE(CATreeView)protected:CATreeView(); // 动态创建所使用的受保护的构造函数virtual ~CATreeView();public:#ifdef _D原创 2013-04-02 10:03:39 · 1695 阅读 · 0 评论 -
CScrollBar创建过程
CScrollBar m_wndSBHorz;VERIFY(m_wndSBHorz.Create(WS_VISIBLE|WS_CHILD|SBS_HORZ,rc, this, AFX_IDW_HSCROLL_FIRST));BOOL CScrollBar::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWn原创 2013-04-01 10:38:12 · 2469 阅读 · 0 评论 -
Document-View深入探讨
MFC之所以为应用程序框架,最重要的特征就是他能够将管理数据的程序代码和负责数据显示的程序代码分离开来。这种能力由文档视图结构提供。Document在MFC的CDocument中被实例化,它本身就是一个空壳,当开发自己的程序时,应该从CDocument派生出一个属于自己的CMyDocument类,并且在类中声明一些成员变量,用以容纳数据。然后再改写Serialize函数,CDocument派生自C原创 2013-04-01 23:55:09 · 6308 阅读 · 0 评论 -
MFC子窗口和父窗口(SetParent,SetOwner)
一、概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口。这个数据结构中有四个数据用来构建list,即child、sibling、parent、owner四个域。所以我们可以看到,窗口之间的关系有两种:owner-owned 关系和 parent-child关系。前者称之为拥有/被拥有关转载 2013-04-01 18:56:43 · 1056 阅读 · 0 评论 -
CView类创建过程
BOOL A::CreateView(LPCTSTR lpszLabel,CRuntimeClass * pViewClass, CCreateContext *pContext){CRect rect, client;ASSERT(pViewClass && pContext);//CWnd *pParent = NULL;CWnd *pWnd = NULL;in原创 2013-04-01 16:56:20 · 3959 阅读 · 0 评论 -
动态创建对象DECLARE_DYNCREATE(DECLARE_DYNAMIC/DEClARE_DYNAMIC)
IMPLEMENT_DYNAMIC是实现“运行时类型识别”宏,与之相对应的是DECLARE_DYNAMIC(声明“运行时类型识别”宏)。也就是说你在.CPP文件中如果看见有IMPLEMENT_DYNAMIC,则在.H文件中必定有DECLARE_DYNAMIC的声明。DECLARE_DYNAMIC/DEClARE_DYNAMIC是为了确定运行时对象属于哪一个类而定义的宏。DEClARE_DY转载 2013-03-19 15:26:31 · 2001 阅读 · 0 评论 -
MFC的一些宏的整理 (DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE)
代码实现(注:以下宏及其实现取自MFC)DECLARE_DYNAMICDefine:#define DECLARE_DYNAMIC(class_name) "public: " static const AFX_DATA CRuntimeClass class##class_name; " virtual CRuntimeClass* GetRu转载 2013-03-19 15:25:22 · 908 阅读 · 0 评论 -
SubclassWindow是MFC对子类化的简化
SubclassWindow是MFC对子类化的简化例:实现一个拖动的button,并在对话框中方便使用,假设对话框中安置了一个普通按钮IDOK。1.从CButton派生一个CMyButton,实现拖动功能2.得到句柄hOK=GetDlgItem(IDOK)->m_hWnd3.定义变量 CMyButton b; b.SubclassWindow(hOK);子类化就是改转载 2013-03-29 00:12:10 · 1383 阅读 · 0 评论 -
OnCmdMsg -- CFrameWnd::OnCmdMsg and CView::OnCmdMsg
/////////////////////////////////////////////////////////////////////////////// CFrameWnd command/message routingBOOL CFrameWnd::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* p原创 2013-03-15 11:09:38 · 989 阅读 · 0 评论 -
WM_COMMAND和WM_NOTIFY区别
对这几个消息的理解要先了解一下Window消息的背景。 在Windows3.1里,控件会将mouse, keybord等等的消息通知它的父窗口, 使用的消息就只有WM_COMMAND, 事件种类和控件ID被包含在wParam中, 控件的句柄包含在lParam中。由于wParam和 lParam已经满了,当控件要向父窗口发送其它特殊消息同时附带很多信息的时候就没有转载 2012-04-22 17:56:34 · 1624 阅读 · 0 评论 -
mfc对话框拖动
http://topic.csdn.net/u/20081016/10/315be2ba-5943-4431-b50e-a3236012dfe1.htmlhttp://blog.sina.com.cn/s/blog_7bddd8530100zxp9.htmlhttp://www.google.com.hk/#hl=zh-CN&newwindow=1&safe=strict&q=mfc%E5转载 2012-04-20 08:21:58 · 794 阅读 · 0 评论 -
Microsoft 已移除 MFC ISAPI 扩展 DLL 的 Visual Studio 2005 的模板。
MFC 类 ISAPI 扩展 DLL 模板使用的是 Visual Studio 2005 中仍然包含。 因此,Visual Studio 的早期版本中使用 ISAPI 扩展 DLL 模板创建的任何项目将仍然打开,并在 Visual Studio 2005 中编译。 对于新 ISAPI 筛选器或扩展开发,我们建议使用 ISAPI 入口点函数从 Microsoft Internet Informati转载 2010-01-05 02:53:00 · 1959 阅读 · 0 评论 -
VS2008 migration - missing afxisapi.h
Were in the process of migrating our projects from VS2005 to VS2008 and encountered this errors:"fatal error RC1015: cannot open include file afxisapi.rc fatal error C1083: Cannot open include file转载 2010-01-05 02:32:00 · 3589 阅读 · 0 评论 -
LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
LNK1112: module machine type x64 conflicts with target machine type X86 The problem has been solved. Many thanks to steve.Here is the solution, for those might have the same problem :)1. To ch转载 2009-12-31 02:38:00 · 9195 阅读 · 1 评论