
MFC
文章平均质量分 74
hi_dzj
msndzj@live.cn
展开
-
MFC学习笔记
<br /><br />1.Oncreate函数目前来看只运行了一次;<br /><br /><br />2.对于隐藏的this指针,不是类中的函数成员。当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行 ;<br /><br /><br />3.而当类中有虚函数是系统自动增加一个虚函数指针成员;<br /><br原创 2011-01-03 14:36:00 · 540 阅读 · 0 评论 -
调色板
<br />Windows 系统在支持硬件调色板的时候,遇到了些困难。如果 Windows 系统允许任何一个程序改变视频硬件调色板中RGB 颜色的设置,那么在系统中运行的每一个应用程序都将受影响。例如硬件调色板中的黑色被改为蓝色,那么每一个窗口中的所有黑色像素立即就会被改为蓝色。这就违反了 Windows 应用程序作为独立窗口运行,彼此互不干扰的基本原则。另一个问题是 Windows 程序可以在任何系统运行,而大多数系统中显示的颜色和 Super VGA 系统中的颜色数量不同。<br /> 为了解决上转载 2011-03-03 20:05:00 · 1665 阅读 · 0 评论 -
彩色图转灰度图的原理
彩色图转灰度图的原理和参考源码图像处理中,大部分的处理方法都需要事先把彩色图转换成灰度图才能进行相关的计算、识别。彩色图转换灰度图的原理如下:我们知道彩色位图是由R/G/B三个分量组成,其文件存储格式为BITMAPFILEHEADER+BITMAPINFOHEADER,紧跟后面的可能是:如果是24位真彩图,则每个点是由三个字节分别表示R/G/B,所以这里直接跟着图像的色彩信息;如果是8位(256色),4位(16色),1位(单色)图,则紧跟后面的是调色板数据,一个RGBQUAD类型的数组,其长度由BITMAP原创 2011-03-07 11:24:00 · 2322 阅读 · 1 评论 -
vc软件开发规范
<br />转载:vc软件开发规范 <br />-------------------------------------------------------------------------------- <br /> <br /> 一、程序风格: <br />1、严格采用阶梯层次组织程序代码: <br />各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对继行则要求再缩进4格。例如: <br />2、提示信息字符串的位置转载 2011-03-07 13:06:00 · 920 阅读 · 0 评论 -
WINDOWS 调色板
<br /><br />11.1调色板<br /><br />11.1.1 调色板的原理<br /> PC机上显示的图象是由一个个像素组成的,每个像素都有自己的颜色属性。在PC的显示系统中,像素的颜色是基于RGB模型的,每一个像素的颜色由红(B)、绿(G)、蓝(B)三原色组合而成。每种原色用8位表示,这样一个的颜色就是24位的。以此推算,PC的SVGA适配器可以同时显示224约一千六百多万种颜色。24位的颜色通常被称作真彩色,用真彩色显示的图象可达到十分逼真的效果。<br /> 但是,真彩色的显示需要大转载 2011-03-05 22:50:00 · 5716 阅读 · 0 评论 -
Debug转Release的一些经验(转)
<br /><br />经常在 优快云 上看见有人问 Debug 运行正常但 Release 失败的问题。以往的讨论往往是经验性的,并没有指出会这样的真正原因是什么,要想找出真正的原因通常要凭运气。最近我看了一些这方面的书,又参考了 优快云 上的一些帖子,然后深入研究了一下关于二者的不同。以下是我的一些体会,拿来与大家共享。 -------------------------------------- 本文主要包含如下内容: <br /> 1. Debug转载 2011-03-10 11:00:00 · 1362 阅读 · 0 评论 -
CRectTracker类的使用 (经典教学!!)
<br /><br />CRectTracker类的使用 <br />作者:二鸡蛋<br />CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类。你在Windows中经常看到这样的情况:它可以用做显示边界,你也可以扽它的八个角用来放大缩小,或做框选使用。如何通过编程来实现这种功能呢?这就是CRectTracker类的作用;<br /><br /> <br />(框选) (显示边界并可以缩放)<br />例子(源程序) <转载 2011-03-10 21:19:00 · 870 阅读 · 0 评论 -
SetBkMode与SetBkColor的区别(代码搞定一切!!)
<br /><br />#include<windows.h><br /> <br />LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);<br />int WINAPI WinMain(HINSTANCE hInstance,<br /> HINSTANCE hPrevInstance,<br /> PSTR szCmdLine,<br /> int iC转载 2011-03-11 09:38:00 · 5658 阅读 · 0 评论 -
VC _T的用途
<br /><br />VC++里面定义字符串的时候,用_T来保证兼容性。VC++支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。<br /><br />如果将来你不打算升级到unicode,那么也不需要_T。<br /><br />_t("hello world")<br />在ansi的环境下,它是ansi的,如果在unicode下,那么它将自动解释为双字节字符串,既unicode编码。 <br />这样做的好处,不管是a转载 2011-03-09 19:42:00 · 632 阅读 · 0 评论 -
特殊的WM_QUIT消息
<br />特殊的WM_QUIT消息<br /> 发送WM_QUIT消息可以让Window程序关闭,但经测试用下面程序却无法达到目的:<br /> CWnd *pWnd = CWnd::FindWindow(NULL, “My Window”);<br />HWND hWnd = pWnd->GetSafeHwnd();<br /> SendMessage(hWnd, WM_QUIT, 0, 0);<br /> 而经过尝试,发现用PostMessage却可以:<br /> Po转载 2011-03-14 16:30:00 · 943 阅读 · 0 评论 -
无效区域 更新区域 重画 WM_PAINT 的关系和机制(转载总结)
<br /><br />1. 系统何时发送WM_PAINT消息?<br /><br /> 系统会在多个不同的时机发送 WM_PAINT 消息:当第一次创建一个窗口时,当改变窗口的大小时,当把窗口从另一个<br /><br />窗口背后移出时,当最大化或最小化窗口时,等等,这些动作都是由系统管理的,应用只是被动地接收该消息,在消息处理<br /><br />函数中进行绘制操作;大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变的时候,这一<br /><br />般是通过 Inval转载 2011-03-14 20:15:00 · 4075 阅读 · 3 评论 -
C语言头文件的作用(转载)
<br />最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题.<br />学习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的思考过.概念上还是比较模糊的,只是之前的使用大多比较简单,并没有牵涉到太复杂的工程,所以定义和声明还是比较简单而明了了的.但是最近的大工程让我在这方面吃到了一点点苦头,虽然看了别人的代码能够很快的改正,但是这些改正背后的原因却不知道.我想大多数喜欢C语言的程序员应该是和我一样的,总喜欢去追究程序问题背后的底转载 2011-03-15 22:34:00 · 948 阅读 · 0 评论 -
资源的分配与释放
<br />资源 分配函数 清除函数 需要手动清除 <br />Accelerators LoadAccelerators N/A No <br />Atoms GlobalAddAtom GlobalFreeAtom Yes <br />Bitmaps CreateBitmap DeleteObject Yes * <br />CreateBitmapIndirect DeleteObject Yes * <br />CreateCompatibleBitmap DeleteObject Yes * <b转载 2011-04-15 22:13:00 · 852 阅读 · 0 评论 -
vc最小化到状态栏
<br /><br />最小化到状态栏<br />1.准备工作<br />l NOTIFYICONDATA 定义<br />NOTIFYICONDATA:结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对应的窗口等内容<br /> typedef struct—NOTIFYICONDATA { <br /><br /> DWORD cbSize; //以字节为单位的这个结构的大小 <br /><br />原创 2011-04-29 14:54:00 · 636 阅读 · 0 评论 -
vc最小化到状态栏
<br /><br />最小化到状态栏<br />1.准备工作<br />l NOTIFYICONDATA 定义<br />NOTIFYICONDATA:结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对应的窗口等内容<br /> typedef struct—NOTIFYICONDATA { <br /><br /> DWORD cbSize; //以字节为单位的这个结构的大小 <br /><br />原创 2011-04-29 14:54:00 · 572 阅读 · 0 评论 -
内存句柄HGLOBAL
<br />内存句柄HGLOBAL <br />HGLOBAL 这个是windows 定义的数据类型。<br />这是个句柄,标示一个内存区,不是指针。在对内存区的操作中,一般用指针,从这个handle可以得到指针,然后就可以对内存区进行操作了。 <br /> -------------------------------------------------- <br /> eg: 开一个200byte的内存区,在里面赋值 <br /> HGLOBAL hMemHandle转载 2011-03-03 16:08:00 · 560 阅读 · 0 评论 -
DeleteDC ReleaseDC DeleteObject之间的区别
<br /><br />DeleteDC <br /> <br /> <br />该函数删除指定的设备上下文环境(DC)。<br />原型:<br />BOOL DeleteDC(HDC hdc);<br />参数:<br />hdc:设备上下文环境的句柄。<br />返回值:<br /> 成功,返回非零值;失败,返回零。调用GetLastError获取扩展错误信息。<br />说明:<br /> 如果一个设备上下文环境的句柄是通过调用GetDC函数得到的,那么应用程序不能删除该设备上下文环境,它转载 2011-03-01 12:59:00 · 1584 阅读 · 0 评论 -
屏幕保存为位图
<br /><br />可分为两个步骤:<br />一 将屏幕保存为位图句柄<br />HBITMAP CopyScreenToBitmap(LPRECT lpRect)<br />{<br /> HDC hScrDC,hMemDC;<br /> HBITMAP hBitmap,hOldBitmap;<br /> int nX1,nX2,nY1,nY2;<br /> int nWidth,nHeight;<br /> if (IsRectEmpty(lpRect))<br /> {<br /> retur转载 2011-03-02 07:09:00 · 767 阅读 · 0 评论 -
句柄 handle
<br />句柄 handle<br />关于什么是句柄,以前曾经有人这样比喻: <br /> “牧童遥指杏花村” <br /> 牧童的手就是指针;杏花村的旗子就是句柄。<br />MSDN上关于句柄handle的描述:<br />http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_handles1.asp<br />1、 句柄是一种指向指针的指针。我们知 道,所谓指针是一种内转载 2011-01-08 10:56:00 · 1701 阅读 · 1 评论 -
例1_1
<br />#include <windows.h><br />LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);<br />int WINAPI WinMain( <br /> HINSTANCE hInstance, <br /> HINSTANCE hPrevInstance, <br /> LPSTR lpCmdLine, <br /> int nShowCmd <br /> )<br />原创 2010-11-16 20:43:00 · 569 阅读 · 0 评论 -
vc format函数详解
一、字符串首先看它的声明:function Format(const Format: string; const Args: array of const): string; overload;事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的,但并不多用,所以这里只对第一个介绍:function Format(const Format: string; const Args: array of const): string; overload;Format参数是一个格式字转载 2010-11-17 19:08:00 · 556 阅读 · 0 评论 -
CloseHandle
CloseHandlehttp://hi.baidu.com/heiheijiushiwo/blog/item/02c29924e518e0318644f979.html《Windows核心编程》里的两小节:3.1.1 内核对象的使用计数 内核对象由内核所拥有,而不是由进程所拥有。换句话说,如果你的进程调用了一个创建内核对象的函数,然后你的进程终止运行,那么内核对象不一定被撤消。在大多数情况下,对象将被撤消,但是如果另一个进程正在使用你的进程创建的内核对象,那么该内转载 2010-11-18 18:13:00 · 471 阅读 · 0 评论 -
SDK编程简单实例
<br /><br /><br /><br /><br /><br />#include <windows.h><br />#include <stdio.h><br />LRESULT CALLBACK DzjProc(<br />HWND hwnd, // handle to window<br />UINT uMsg, // message identifier<br />WPARAM wParam, // first message parameter<br />LPARAM原创 2011-01-30 17:14:00 · 935 阅读 · 0 评论 -
VC/MFC的HDC,CDC,CWindowDC,CClientDC,CPaintDC详解:
<br /><br /><br /><br /><br />VC/MFC的HDC,CDC,CWindowDC,CClientDC,CPaintDC详解:<br /> <br />首先说一下什么是DC(设备描述表) <br />解:Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC)在DC表示的逻辑意义的“画布”上进行图形的绘制。DC是一种包含设备信息的数据结构,它包含了物理设备所需的各种状态信息。Win32程序在绘制图形之前需要获取DC的句柄HDC转载 2011-02-01 14:11:00 · 1692 阅读 · 1 评论 -
MFC一路走来------路径层概念的理解
<br /> 在MFC中,路径层主要运用于在窗口中绘图。 学过Photoshop的同学都知道,我们在设计一张海报时,可能会用到多张图片进行合成,而在合成之前是要对每张图片进行各自处理的。这个时候我们就要给每一张图片定制一个它独有的处理空间---路径层。在各个独立的空间---路径层上,我们对每张图片进行处理而互相不受影响。 类似地,MFC中,在一块窗口上我们也可以定制多个路径层并在各个路径层上进行绘图或输出字符的操作。 MFC中,我们利用CDC类提供的成员函数BeginPath()和EndPat转载 2011-02-03 13:40:00 · 1097 阅读 · 0 评论 -
命令消息传递
送给活动(Active)视处理,调用活动视的OnCmdMsg。由于当前对象是MFC视对象,所以,OnCmdMsg将搜索CTview及其基类的消息映射数组,试图得到相应的处理函数。 如果视对象自己不处理,则视得到和它关联的文档,调用关联文档的OnCmdMsg。由于当前对象是MFC视对象,所以,OnCmdMsg将搜索CTdoc及其基类的消息映射数组,试图得到相应的处理函数。 如果文档对象不处理,则它得到管理文档的文档模板对象,调用文档模板的OnCmdMsg。由于当前对象是MFC文档模板对象,所以,OnCm转载 2011-02-03 22:10:00 · 756 阅读 · 0 评论 -
深入解析MFC -- 句柄与对象的关系
<br />深入解析MFC -- 句柄与对象的关系<br />在Windows体系中,很多对象都是以句柄的形式展示给开发人员的。比如窗口句柄(HWND),绘图设备(HDC)等等。然后大部分的API函数则围绕这些句柄做文章。比如ShowWindow,SetWindowText,TextOut等等。这些API函数的第一个参数通常就是句柄了。但是在C++体系中,这种对于事物细节的访问,往往是有违其封装精神的。因此MFC做了很多的封装类,来隐藏这些细节。应运而生就是CWnd,CDC等类。通过这些类暴露的方法,可以直转载 2011-02-04 21:34:00 · 624 阅读 · 0 评论 -
WIndows对象 C++对象 的关系
<br />windows对象并不是我们平时所说的“面对对象”程序设计中的“类的对象”,而是一种windows资源实体,如画笔、字体等,<br />而对这些windows对象我们用句柄来标识它们。<br />而C++对象则是真正的“面向对象”思想中的“类的对象”。<br />在windows编程中,除了普通的“类的对象”外,用得最多的“C++类的对象”应该是MFC对象了(如果你是用MFC编程的话),MFC对象是指“封装了windows对象的C++对象”。<br />就拿CWnd类来说,我们定义一个CWnd类转载 2011-02-04 22:03:00 · 1526 阅读 · 0 评论 -
Windows对象、句柄与MFC对象
<br />Windows对象、句柄与MFC对象 (2009-04-28 22:11:34)转载标签: windows对象 句柄 mfc对象 杂谈分类: MFC以及Windows编程 Windows对象是以句柄来标识的,对应的MFC类就是这些句柄的C++包装。内存中的Windows对象一定有唯一的句柄来标识,但不一定有对应的MFC类对象在内存中。当需要获取Windows对象的对应MFC类对象而内存中又没有此对象时,系统会创建一个临时MFC类对象返回给用户,并在之后某个空闲时转载 2011-02-04 21:42:00 · 1008 阅读 · 0 评论 -
模态对话框与非模态对话框的区别
<br /><br /> 与模态对话框不同,非模态对话框不垄断用户的输入,用户打开非模态对话框后,仍然可以与其它界面进行交互。 <br /><br /> 非模态对话框的设计与模态对话框基本类似,也包括设计对话框模板和设计CDialog类的派生类两部分。但是,在对话框的创建和删除过程中,非模态对话框与模态对话框相比有下列不同之处: <br /><br /> 非模态对话框的模板必须具有Visible风格,否则对话框将不可见,而模态对话框则无需设置该项风格。更保险的办法是调用CWnd::ShowWindow转载 2011-02-06 21:26:00 · 1169 阅读 · 0 评论 -
兼容位图
<br />我对兼容位图的理解是:它是为解决绘图统一性而建立的一种机制,和位深无关,你在32位的程序里BITBLT()8位的图不也能行吗?<br /><br />所谓的绘图统一性是这样的。假设在一个界面有多个贴图,如果你不用兼容位图的话,那么你就要贴多次,比如有3幅图,你要贴3次,有5幅图你就要贴5次。<br /><br />如果你仅仅只想画一幅话的话,这也没什么,但在游戏领域就会造成大麻烦,因为游戏是要不断刷新图象的,而且是一秒钟要刷新几十次之多,这就是所谓的帧频,也就是说,在一秒钟内将屏幕上所有的图象绘转载 2011-02-28 20:32:00 · 939 阅读 · 0 评论 -
BitBlt和StrectchBlt有什么区别
<br /><br />BitBlt不能变尺寸,但是StrectchBlt可以变尺寸,在使用StrectchBlt时要注意,首先要设置一下SetStretchBltMode,通常设成HALFTONE,这样缩放时就不会失真。 HDC hdcMem ; <br /> HBITMAP hBmp; <br /> hdcMem = CreateCompatibleDC (hDC) ;//创建兼容DC <br /> hBmp = CreateCom转载 2011-03-01 06:59:00 · 4598 阅读 · 0 评论 -
MFC一路走来------鼠标响应
鼠标响应关键就是对两个函数进行操作:OnLButtonDown和OnLButtonUp;1、使用MFC AppWizard(exe)建立一个单文档MFC工程2、首先要在CxxxView类的定义里加上后续必备的数据成员class CDrawView : public CView{。。。。。。。。。。。。private: CPoint m_ptOrigin;转载 2011-02-03 13:41:00 · 5093 阅读 · 1 评论