摘要:CWnd::FromHandlePermanent ——根据窗口句柄得到CWnd*指针This function, unlikeFromHandle, does not create temporary objects.CWnd::FromHandle——根据窗口句柄得到CWnd*指针CWnd* PASCAL CWnd::FromHandle(HWND hWnd){CHandleMap* pMap = afxMapHWND(TRUE); //create map if not existASSERT(pMap != NULL);CWnd* pWnd = (CWnd*)pMap->From
阅读全文
随笔分类 - VC/MFC
摘要:1、创建和终止线程 在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程。 工作者线程CWinThread *AfxBeginThread( AFX_THREADPROC pfnThreadProc, //控制函数 LPVOID pParam, //传递给控制函数的参数 int nPriority = THREAD_PRIORITY_NORMAL, //线程的优先级 UINT nStackSize = 0, //线程的堆栈大小 DWORD dwCreateFlags = 0, //线程的创建标志 L..
阅读全文
摘要:在程序编译完成后,生成的文件是以.obj为扩展名的对象文件,link.exe是将这些对象文件与库链接起来以创建可执行文件或动态链接库文件的工具。link.exe的输入文件包括obj文件、lib文件、exp文件、def文件、res文件、txt文件、ilk文件等等,而输出的文件一般是exe文件、dll文件、sys文件等可执行程序文件。1、命令行参数link.exe运行参数如下:LINK [options] files参数包括选项和文件名,选项和文件名可按任意顺序指定。link会首先处理选项,然后是文件。各参数间必须使用一个或多个空格或制表符来分隔。2、输入文件参数中的files是指链接器的输入文件
阅读全文
摘要:Windows应用程序中,图标、菜单、畏途、图标、工具条、对话框等是以资源的形式存在的。开发人员也可以自定义资源类型。如果一个程序使用了资源,那么它在构建时需要对资源进行编译。程序所使用的资源会在资源脚本文件(*.rc)中进行描述编写,编译时,资源编译器会将*.rc文件编译为可链接的.res文件。(资源中可以包括字符串)1、命令行参数使用如下方式在命令行中运行rc.exeRC [options] srcipt-fileoptions是编译选项,script-file是需要编译的资源脚本文件。用户可以使用如下方式调用:rc.exe /n /fo Hello.res Hello.rc2、资源编译器
阅读全文
摘要:这一章节介绍的全是VC编译器选项,option参数是cl.exe的编译选项,是cl.exe命令行参数中最复杂、也是最常用的。下面介绍一些常用的编译选项:1、代码生成有关这些选项将影响编译完成后生成的机器代码:2、调试有关与调试有关的编译选项如下图,/Z7、/Zi、/ZI这三个选项是对程序进行调试时所必需的选项,同时注意,在生成调试版本的程序时,需要指定/Od选项以禁用优化:3、程序优化有关与程序优化有关的选项如下图,优化选项将影响编译器对代码的优化,最选择代码体积最小还是选择运行速度最快等需要使用这些选项:4、输出文件有关与生成的输出文件有关的选项如下图,输入文件在参数中需要使用字符串来指定其
阅读全文
摘要:cl.exe的功能是将源代码文件编译为可提供链接器使用的obj对象文件。cl.exe命令行参数形式如下:CL (option...) file... [option | file]... [lib...] [@command-file] [/link link-opt...]各命令行参数的意义如下 :1、option命令行中的"option"是指一个或多个编译选项。在指定选项时,需要在选项前加正斜杠(/)或一个短划线(-)。有一些选项还会带有参数,使用":"来指定选项的参数。比如"/sybsystem:windows,5.0"是一个编
阅读全文
摘要:资源档有什麽用处呢?最重要的有两个地方1.国际发行:我们将Application中所有的文字从Resource用读取,那麽,只要更动 Resource档的内容,就可以用不同语言的方式来显示。2.管理资源:例如说,我们的AP中用了数百张的图片或声音,不用Resource档的话, 在发行出去的AP中,就必需有数百个图形、声音档,那似乎不太好,使 用Resource档,便可以将这些图形、声音放进一个.Res档。使用RC.exe来Compiler我们所定义的Resource档, RC.EXE在vb5.0光碟中的/TOOLS/RESOURCEResources 可分成两大部份:- String reso
阅读全文
摘要:MS Windows操作系统是一个世界上广泛使用的操作系统,对于不同语种的国家MS Windows有相应语种的版本。在不同语种的Windows平台上应该运行相应语种的应用程序。也就是说程序的用户界面(如菜单、对话框、状态条)中的提示文字应该使用和Windows操作系统所使用的语种一致。当然英语用户界面的程序可以运行在其它语言平台上,但比较复杂的程序或多或少都有问题,如对话框的尺寸不对,特殊的ASCII字符显示为文字,输入字符串可能会导致死机等。如果不一致却还想使用,则需要动态翻译软件。例如,在英文Windows平台上运行中文版的MS Office就需要像中文之星或四通利方这样的中文动态翻译软件
阅读全文
摘要:DDX/DDV 通过使用ClassWizard向对话类添加成员变量,你可以利用ClassWizard所提供的高效特征,为对话数据交换和对话数据验证自动生成源代码,也就是人们所熟知的DDX/DDV。 数据交换和验证仅仅应用于为之选定了Value类别的成员变量。也就是CString,BOOL,数字,COleDateTime或COLeCurrency。 对话数据交换负责数据在控件中的进出。当对话首次出现的时候,每个控件窗口自动用相应的成员变量的值进行初始化。当用户通过单击OK按钮,或通过按Enter键关闭对话的时候,该控件无论是包含哪一个值或文本,都将被复制回该变量。 对话数据验证可以确保值落在规定
阅读全文
摘要:在Windows应用程序中,窗体是由一种称为“UI线程(User Interface Thread)”的特殊类型的线程创建的。 首先,UI线程是一种“线程”,所以它具有一个线程应该具有的所有特征,比如有一个线程函数和一个线程ID。 其次,“UI线程”又是“特殊”的,这是因为UI线程的线程函数中会创建一种特殊的对象——窗体,同时,还一并负责创建窗体上的各种控件。 窗体和控件大家都很熟悉了,这些对象具有接收用户操作的功能,它们是用户使用整个应用程序的媒介,没有这样一个媒介,用户就无法控制整个应用程序的运行和停止,往往也无法直接看到程序的运行过程和最终结果。 那么,窗体和控件又是如何作到对用...
阅读全文
摘要:说到消息,在MFC中,“最熟悉的神秘”可算是消息映射,那是我们刚开始接触MFC时就要面对的东西。有过SDK编程经验的朋友转到MFC编程的时候,一下子觉得什么都变了样。特别是窗口消息及对消息的处理跟以前相比,更是风马牛不相及的。如文档不是窗口,是怎样响应命令消息的呢?初次用MFC编程,我们只会用MFC ClassWizard为我们做大量的东西,最主要的是添加消息响应。记忆中,如果是自已添加消息响应,我们应何等的小心翼翼,对BEGIN_MESSAGE_MAP()……END_MESSAGE_MAP()更要奉若神灵。它就是一个魔盒子,把我们的咒语放入恰当的地方,就会发生神奇的力量,放错了,自己的程序就
阅读全文
摘要://////////////////////////////////////////////////////////////////////////////////// /********* 文章系列:MFC技术内幕系列***********/ /************MFC技术内幕系列之(四)***********/ /*****文章题目:MFC消息映射与消息传递内幕******/ /* All rights Reserved */ / *********关键字:消息映射,消息传递************/ /* 注释:本文所涉及的程序源代码均在Microsoft */ / Visual.
阅读全文
摘要:在上一课的表5.1已经列出了Windows的传统控件及其对应的控件类。在这些控件中,读者应该重点掌握命令按钮、选择框、单选按钮、编辑框、列表框和组合框。.1.1 传统控件的控件通知消息 控件通过向父窗口发送控件通知消息来表明发生了某种事件.例如,当用户在按钮上单击鼠标时,按钮控件会向父窗口发送BN_CLICKED消息.传统控件的通知消息实际上是通过WM_COMMAND消息发给父窗口的(滚动条除外),在该消息的wParam中含有通知消息码(如BN_CLICKED)和控件的ID,在lParam中则包含了控件的句柄. 利用ClassWizard可以很容易地为控件通知消息加入消息映射和消息处理函...
阅读全文
摘要:详细说明:Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法。该方法可以在运行时在内存中直接建立对话框资源,使用起来更为灵活。适用于多个开发项目共享有界面的公用程序模块的情况,也适用于编写需要显示大量对话框或对话框风格随着用户输入不断变化的应用程序。下载地址1:http://files.cnblogs.com/lidabo/CDynamicDialogWithoutTemplate.rar下载地址2:http://www.pudn.com/downloads65/sourcecode/windows/dialog/detail233221.html
阅读全文
摘要:在MFC程序中使用对话框时首先在资源模版里创建对话框资源,然后DoModal()或者CReate显示出模式对话框或者非模式对话框,这样创建出的对话框移植性差,从一个工程移动到另一个工程比较麻烦。 在MFC中还有另一种创建对话框的方法:1 在内存中建立对话框资源模版DLGTEMPLATE结构体。2 使用InitModalIndirect API函数即可创建模式对话框,非模式对话框使用CreateDialog API函数创建。代码如下:// 创建内存对话框资源模版类,H文件#pragma once#define DLG_TEMPLATE_BUFFER_MAX_LENGT1024class CDlg
阅读全文
摘要:DDB(Device-dependent bitmap)依赖于具体设备,这主要体现在以下两个方面:DDB的颜色模式必需与输出设备相一致。例如,如果当前的显示设备是256色模式,那么DDB必然也是256色的,即一个像素用一个字节表示。在256色以下的位图中存储的像素值是系统调色板的索引,其颜色依赖于系统调色板。 由于DDB高度依赖输出设备,所以DDB只能存在于内存中,它要么在视频内存中,要么在系统内存中。 11.3.1 DDB的创建MFC的CBitmap类封装了DDB。该类提供了几个函数用来创建DDB:BOOL LoadBitmap( LPCTSTR lpszResourceName );BOO
阅读全文
摘要:DDB(设备相关位图)DDB依赖于具体设备:DDB的颜色模式必需与输出设备相一致。例如,如果当前的显示设备是256色模式,那么DDB必然也是256色的。在256色以下的位图中存储的像素值是系统调色板的索引,其颜色依赖于系统调色板。由于DDB高度依赖输出设备,所以DDB只能存在于内存中,它要么在视频内存中,要么在系统内存中DIB的与设备无关性主要体现在以下两个方面:DIB的颜色模式与设备无关。例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。由于DIB不依赖于具体设备,因此可以用来永
阅读全文
摘要:*[标题]:Skin++通用界面换肤系统V2.0.1破解探讨*[作者]:gz1X *[来自]:中国黑客联盟*[前言]:skin技术,大家都不会陌生,比如winamp,可以灵活的更换界面风格。早期的实现定制的外观方法都需要程序本身做许多处理,编码太麻烦。后来出现了专门的Skin插件,ActiveSkin什么的。再后来dll调用的skin软件出现,需要Skin支持的程序调用几个方法,就可以使自己的程序外观完全改变,不需要编程者对skin技术有任何的了解。Skin++通用界面换肤系统V2.0.1就是其中比较出名的一款。但是让很多“贫民”用户来说,要收费还是比较让人烦的。恰好我前几天做了个小项目,顺便
阅读全文
摘要:深度剖析消息反射机制作者:hustli 摘要:在前面我们分析了控件通知消息WM_NOTIFY,和WM_NOTIFY紧密联系的还有一个MFC新特性:消息反射。本文中,我想就这个问题作一个全面的论述,如果有错误,还望各路大虾批评指正。 什么是消息反射? 在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就想是从父窗口反射回来一样,故此得名:消息反射。 消息反射的由来 在windows和MFC4.0版本一下,父窗口(通常是一个对话框)会对
阅读全文
摘要:界面美化摘要本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:1.大致了解MFC框架的基本运作原理;2.熟悉Windows消息机制,熟悉MFC的消息映射和反射机制;3.熟悉OOP理论和技术;本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助。正文1. 美化界面之开题篇相信使用过《金山毒霸》、《瑞星杀毒》软件的读者应该还记得它们的精美界面:图1 瑞星杀毒软件的精美界面程序的功能如何如何强大是一回事,它的用户界面则是另一回事。千万不要忽视程序的用户界面,因为它是给用户最初最直接的印象,丑陋的界面、不友好的风格肯定会影响用户对软件程序的使用。
阅读全文