DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2013年8月27日

摘要: 1、What is achieved by prefixing the 'static' keyword to a file-level function or file-level variable declaration?使用static关键字修饰文件级的函数和变量起到什么作用?key:对变量来说,不允许文件外的程序访问;对函数来说,该函数的实现必须在这个文件内完成,并且不允许文件外的程序调用。2、Describe the difference between the“IS A”and“HAS A”object relationships. Which is the str 阅读全文
posted @ 2013-08-27 14:56 DoubleLi 阅读(490) 评论(0) 推荐(0)

摘要: 提示1:对“内存结构”表示有疑问或不解的,先参考:http://blog.csdn.net/guogangj/archive/2007/05/25/1625199.aspx,本文使用的表示方法和VC6的Memory视图一致,即:左上表示低位。提示2:下文提到的“类大小”严格上来说是该类经过实例化的对象的大小。当然了,光研究长度的话,两者差别不大,因为:CClassA objA,sizeof(CClassA)和sizeof(objA)得到的结果都是一样的。一、真空类class CNull{};长度:1内存结构:??评注:长度其实为0,这个字节作为内容没有意义,可能每次都不一样。二、空类class 阅读全文
posted @ 2013-08-27 14:54 DoubleLi 阅读(534) 评论(0) 推荐(0)

摘要: (本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++、Windows编程及MFC经验,还得有一定动手能力。文中可能出现一些术语不统一的现象,比如“子窗口”,有时候我写作“child window”,有时候写作“child”,我想应该不会有太大影响,文章太长,不一一更正了)问题开始于我的最近的一次开发经历,我打算把程序的一部分界面放在DLL中,而这部分界面又需要使用到Tooltip,但DLL中的虚函数PreTranslateMessage无法被调用到,原因大家可以在网上搜索一下,这并不是我这篇文章要讲的。PreTranslateMes 阅读全文
posted @ 2013-08-27 14:52 DoubleLi 阅读(26175) 评论(5) 推荐(2)

摘要: 一、parent:创建者,owner:所有者小玉的父母生下小玉,养到8岁,卖给贾府当丫头小玉的父母是parent,贾府是owner二、1.Pop-up窗口:一个弹出窗口是必须具有WS_POPUP属性的窗口,弹出窗口只能是一个Top-Level窗口,不能是子窗口,弹出窗口多用于对话框和消息框,也可以用于应用程序的主窗口,弹出窗口可以不必具有标题栏2.Overlapped窗口:一个重叠窗口是一个必须具有WS_OVERLAPPED属性的窗口,也就是一个重叠窗口必须具有边框,标题栏,客户区域。重叠窗口可以是一个子窗口,也可以是一个Top-Level窗口,重叠窗口一般都用于一个应用程序的主窗口3.Top 阅读全文
posted @ 2013-08-27 14:49 DoubleLi 阅读(3130) 评论(0) 推荐(1)

摘要: 一直对窗口之间的关系有些混乱,遇到需要指定父窗口的函数时常常要考虑很久,究竟父窗口是哪个窗口,遂上网查资料,略有所悟,简记如下: 对话框中的所有控件(比如Button等)都是其子窗口。 文档/视图结构中,框架窗口是视图窗口的父窗口。 同时在使用CreateWindow和CreateWindowEx时可以指定父窗口,建立窗口的父子关系。另外,网上有篇文章讲Windows窗口的层级关系,也颇清楚,故转来备查:一、windows窗口之间的关系包括所有与被所有关系,父子关系等。 操作系统为每个窗口实例都分配一个内存空间,该空间被称为窗口实例的信息结构。该结构包含了窗口实例的所有... 阅读全文
posted @ 2013-08-27 14:36 DoubleLi 阅读(5232) 评论(0) 推荐(0)

摘要: 一、概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口。这个数据结构中有四个数据用来构建list,即child、sibling、parent、owner四个域。所以我们可以看到,窗口之间的关系有两种:owner-owned 关系和 parent-child关系。前者称之为拥有/被拥有关系,后者称之为父/子关系。在这篇文字中,我把owner窗口称之所有者窗口。换句话说,一个窗口在有一个父窗口(parent)的同时,还可能被不同的窗口拥有(owner),也可以有自己的子窗口(child)。在MFC 阅读全文
posted @ 2013-08-27 14:35 DoubleLi 阅读(1892) 评论(0) 推荐(0)

摘要: 这篇讲得很清楚,就转过来了,原文如下:因项目需要,最近在学习MFC,下午在一篇教程中提到了临时窗口、永久窗口,作者让读者自行查阅MSDN,了解临时窗口与永久窗口的概念,出于好奇,出于方便,直接百度一下,看到了几篇题为解释临时窗口与永久窗口的文章,随后网友在论坛中附上了MSDN中的原文,仔细翻译一下,发现网上查到的几篇文章,对这个概念的解释是有问题和不足的。首先我要说明一点的就是窗口是没有临时与永久之分的,窗口是一种资源,随着CreateWindow的调用而产生,随着DestroyWindow的调用而被销毁(资源所占据的内存被回收),在windows程序设计中通过句柄(这里可以将句柄看成是C++ 阅读全文
posted @ 2013-08-27 14:33 DoubleLi 阅读(766) 评论(0) 推荐(0)

摘要: 子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数。在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong(hwnd, GWL_WNDPROC, (LONG)UserWndProc);。可是到了MFC中,大部分基础的东西都被封装起来了,那么,这是该怎么实现子类化呢?先来看一个例子:要求:定义一个Edit控件,让它能够对输入进行特定的处理输入进行处理-----只能输入英文字母,对其他输入作出提示。分析:1)处理输入当然是响应WM_CHAR消息了,然后对输入字符进行判断,并做相应处理。那么,我们有怎么才能 阅读全文
posted @ 2013-08-27 14:27 DoubleLi 阅读(4769) 评论(1) 推荐(1)

摘要: 1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法;然后将图像格式和矩阵运算,然后将各个算法的实现函数。我用它来做了一个Harris角点检测器和Canny边缘检测器,总共就花了一个小时(第一次用OpenCV)。而且该库显示图像极其方便,两句话就可以。但该库似乎不大稳定,对32F和16S、8U的图像数据支持上bug重重。我用 cvFilter2D函数进行线性滤波,屡屡出错,后来一查原来是大bug。后来用cvmGet来取矩阵元素也是频繁出错,仔细检查了N遍确保程序没问题之后在ya 阅读全文
posted @ 2013-08-27 14:22 DoubleLi 阅读(1758) 评论(0) 推荐(0)

摘要: 1、利用IPicture接口加载、显示图片IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持。图像对象的主要接口是IPicture和IPictureDisp。IPictureDisp从IDispatch继承,提供了通过自动化访问图片属性的能力。图片对象可通过OleCreatePictureIndirect创建。关于IPicture支持的其他接口和方法可以看MSDN,一般创建图片对象可以用OleLoadPicture函数,它简化了基于流内容创建图片对象。IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitm 阅读全文
posted @ 2013-08-27 14:21 DoubleLi 阅读(708) 评论(0) 推荐(0)

摘要: 当我们想仔细观察某个细微的东西时,一般都会使用放大镜。而要看清显示在计算机屏幕上的图片或文字时通常也可以借助于Windows操作系统附带的放大程序来实现。但该程序只能以固定的放大倍数去进行观看,有时并不能满足我们的需要。本文就通过MFC基本类库提供的StretchBlt函数来实现对屏幕图象的局部放大,并且可以随意放大、缩小,选取到合适的放大倍数来对图像的细节进行观察。设计与实现本程序主要用来对图像的局部进行可调倍数的放大,应当具有以下主要功能:1. 移动MOUSE放大显示图像的不同部位2. 左击增加放大倍率、右击减少放大倍率。从光学角度来看,对物体的放大成像是通过把较小的真实物体显示成尺寸较大 阅读全文
posted @ 2013-08-27 14:20 DoubleLi 阅读(2489) 评论(0) 推荐(0)

摘要: 基础知识1.PictureBox控件的使用2.加载位图文件1.通过文件路径获得位图句柄//获得位图句柄void CMovePictureDlg::GetHandleFromPath(CString path){ hBitmap= (HBITMAP)::LoadImage(AfxGetInstanceHandle(),path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);//创建位图句柄}2.通过位图句柄创建位图对象并获得位图信息//获取位图对象void CMovePictureDlg::GetBitMap(HBITMAP hBit 阅读全文
posted @ 2013-08-27 14:19 DoubleLi 阅读(1565) 评论(0) 推荐(0)

摘要: 1.读取图片数据函数原型:bool LoadImage(const char *pName, unsigned char *pBitData);函数功能,读取pName指向的图片文件的位图数据bool LoadImage(const char *pName, unsigned char *pBitData){ HDC hdcTemp; // DC用来保存位图 HBITMAP hbmpTemp; // 保存临时位图 IPicture *pPicture; // 定义IPicture Interface OLECHAR wszPath[MAX_PATH+1]; // 图片的完全路径 char sz 阅读全文
posted @ 2013-08-27 14:18 DoubleLi 阅读(1697) 评论(0) 推荐(0)

摘要: // MySkinDlg.cpp : implementation file//#include "stdafx.h"#include "MySkin.h"#include "MySkinDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// 阅读全文
posted @ 2013-08-27 14:16 DoubleLi 阅读(1284) 评论(0) 推荐(0)

摘要: 1.WindowProc是你给自己的窗口定义的窗口处理函数DefWindowProc是windows平台提供的默认窗口处理函数如果某些消息你不需要做特别的处理,调用DefWindowProc进行处理就可以了,不需要你自己再去些那些windows的"标准动作"2.根据1,显然,你只能定义WindowProc而不能定义DefWindowProc看看MFC的CWnd源码就一目了然了LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){// OnWndMsg does most of the wor 阅读全文
posted @ 2013-08-27 14:15 DoubleLi 阅读(920) 评论(0) 推荐(0)

摘要: msdn上的解析CWnd::SubclassWindowBOOL SubclassWindow( HWND hWnd );Return ValueNonzero if the function is successful; otherwise 0.ParametershWndA handle to the window.RemarksCall this member function to "dynamically subclass" a window and attach it to this CWnd object. When a window is dynamical 阅读全文
posted @ 2013-08-27 14:11 DoubleLi 阅读(636) 评论(0) 推荐(0)

摘要: 序:本人对Windows系统、MFC谈不上有深入的了解,但对MFC本身包装API的机制很有兴趣,特别是读了候老师的《深入浅出MFC》后,感觉到VISUAL C++的Application FrameWork十分精制[不敢用“完美”一词]。在以前,我对SDI结构处理消息有一定的认识,但对于模式对话框的消息机制不了解,读了《深入》一书也没能得到解决,近日,通过在CSDN上网友的帮助,和查阅MSDN,自认为已经了解。一时兴起,写下这些文字,没有其它目的,只是希望让后来者少走弯路,也希望和我一样喜欢“钻牛角尖”的人共同讨论、学习。如果你是牛人,那么你现在要慎重考虑有没有充足的时间读这些幼稚文字[何出此 阅读全文
posted @ 2013-08-27 13:42 DoubleLi 阅读(469) 评论(0) 推荐(0)

摘要: 走出MFC子类化的迷宫KEY WORDS:子类化SUBCLASSWINDOWMFC消息机制许多Windows程序员都是跳过SDK直接进行RAD开发工具[或VC,我想VC应不属于RAD]的学习,有些人可能对子类化机制比较陌生。我们先看看什么是Windows的子类化。Windows给我们或是说给它自己定义了许多丰富的通用控件,如:Edit、ComboBox、ListBox……等,这些控件功能丰富,能为我们开发工作带来极大方面,试想:我们单单是自己实现一个EDIT控件是多么的艰难!但是,在实际开发中还是有些情况这些标准控件也无能为力,比如:在我们的应用中要求一个EDIT得到老师对学生的评价A、B、C 阅读全文
posted @ 2013-08-27 12:54 DoubleLi 阅读(455) 评论(0) 推荐(0)

摘要: 1、CWnd::AttachBOOLAttach(HWNDhWndNew);返回值:如果成功,则返回非零值;否则返回0。参数:hWndNew指定了Windows窗口的句柄。说明:将一个Windows窗口与CWnd对象相连接。CWnd::SubclassWindowBOOLSubclassWindow(HWNDhWnd);返回值:如果函数成功,则返回非零值;否则返回0。参数:hWnd窗口句柄。说明:调用这个成员函数以动态子类化一个窗口,并将它与这个CWnd对象相连接。当窗口被动态子类化时,窗口消息将通过CWnd的消息映射,并首先调用CWnd类中的消息处理函数。发送给基类的消息将被传递给窗口的缺省 阅读全文
posted @ 2013-08-27 12:45 DoubleLi 阅读(1140) 评论(0) 推荐(0)

摘要: CWnd,CDC, Cxxx等都是MFC的类,这些类提供了很多成员函数来执行系统调用等操作,但是核心的类成员数据都是 句柄,(包括窗口句柄,DC句柄,线程句柄等)。 m_hWnd m_hDC m_hThread 如果这些类对象的这些句柄为空,就表示无效对象。比如你 CWnd * pWnd = new CWnd,执行是合法的,但是没有Create就没有窗口句柄,基本上就是一个无效对象,只是系统内存申请了内存分配空间而已,很多操作都无法执行(debug模式下会出现断言错误窗口)。 但是,假如你申请了一个CWnd,CDC的对象实体,可以使用Attach来指定一个有效的句柄付给这个对象。那么此对象就是 阅读全文
posted @ 2013-08-27 12:35 DoubleLi 阅读(2493) 评论(0) 推荐(0)