摘要:介绍CPen* SelectObject( CPen* pPen );CBrush* SelectObject( CBrush* pBrush );virtual CFont* SelectObject( CFont* pFont );CBitmap* SelectObject( CBitmap* pBitmap );int SelectObject( CRgn* pRgn );CGdiObject* SelectObject( CGdiObject* pObject );函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。函数原型:HGDIOBJ Selec
        阅读全文
        随笔分类 - C++/C
摘要:所谓窗口子类化:改变一个已经存在的窗口实例的性质:消息处理与其他实例属性。通常在SDK中所谓的窗口子类化就是改变一个窗口函数(如GetWindowLong()和SetWindowLong())通过这两个函数来设置窗口的属性等;而今天我们主要内容是介绍MFC中的子类化,它跟SDK中的子类化不太一样:所有MFC窗口有相同的窗口函数,由该窗口函数根据窗口句柄查找窗口实例,在把消息映射到该窗口类(class)得消息处理函数上。为了利用MFC的消息映射机制,不宜改变窗口函数(名),MFC也把子类化封装在函数SubclassWindow()中。#include "Subclass.h"
        阅读全文
        
摘要:对开发中常见的内存泄露,GDI泄露进行检测一、GDI泄露检测方法:在软件测试阶段,可以通过procexp.exe 工具,或是通过任务管理器中选择GDI对象来查看软件GDI的对象是使用情况。注意点:Create出来的GDI对象,都要用DeleteObject来释放;Create出来的DC,都要用DeleteDC来释放,GetDC得出的DC,要用ReleaseDC来释放。以下是一些常用到的函数:1、 检查GetWindowDC(), 后面是否有ReleaseDC();2、 检测GetDC();后面是否有ReleaseDC();3、 检测画刷CBrush:CreateSolidBrush()-》 D
        阅读全文
        
摘要:结构体能自由组装数据,是一种很常见的数据打包方法。当我们定义一个结构体后,没有初始化就使用,就会使用到垃圾数据,而且这种错误很难发现。对于定义的任何变量,我们最好都先初始化。除了使用memset和ZeroMemory之外,有没有更简单的方法初始化呢?因为有时候每定义一个结构体,就使用一次memset,也会觉得很繁琐。我这里总结三种方法,如果大家有什么好的方法,不妨加上去。1、结构体的构造函数中初始化。2、继承模板类初始化3、定义时初始化在C++中,结构体与类在使用上已没有本质上的区别了,所以可以使用构造函数来初始化。如下代码所示:struct Stu{intnNum;boolbSex;char
        阅读全文
        
摘要:字符串前面加L表示该字符串是Unicode字符串。_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual C++里边定义字符串的时候,用_T来保证兼容性。VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。以下是别人的总结:一、在字符串前加一个L作用:如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。strlen("asd") = 3;strle
        阅读全文
        
摘要:位运算是非常迅速的,因为它直接对内存中的二进制数据进行操作。按位运算除了,按位与,按位非,按位左移,按位右移,还有按位异或。按位异或运算定义,1 ^ 1=01 ^ 0=10 ^ 1=10 ^ 0=0异或,就是“看看你们到底一样不一样。不一样就为1,一样就为0。”按位异或运算的规律是定理一a ^ b = b ^ a定理二 a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;定理三 a ^ b ^ a = b, a ^ a^ b = b, b ^ a^ a = b定理四若d = a ^ b ^ c,则a = d ^ b ^ c证明:在d = a ^ b ^ c两边同时异或^
        阅读全文
        
摘要:按位与运算符(&)参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。另,负数按补码形式参加按位与运算。“与运算”的特殊用途:(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。(2)取一个数中指定位方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行
        阅读全文
        
摘要:本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5128654转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8634451欢迎关注微博:http://weibo.com/MoreWindows前面已经有六篇文章介绍了Windows界面编程,目录如下:1.《Windows界面编程第一篇位图背景与位图画刷》2.《Windows界面编程第二篇半透明窗体》3.《Windows界面编程第三篇异形窗体普通版》4.《Windows界面编程第四篇异形窗体高富帅版》5.《
        阅读全文
        
摘要:晚上在博客堂读完VSTO写的一篇文章,介绍了CodePlex上面的一个项目,叫做“All-In-One Code Framework”,代号CodeFx,简单的说,就是收集了几乎所有常见的微软开发技术的示例项目,将其打包到这个框架里,而且还使用各种不同的语言进行实现。比如创建一个ActiveX控件和COM组件,CodeFx里面使用ATL、MFC、VB、C#来实现同样的功能。 适合新手入门,也可以作为一份模板供经验丰富的开发者使用,可节省大量的时间。官方网站上给出了框架的基本结构,如下图所示:COM组件和ActiveX控件示例数据访问示例 库示例进程间通信示例花了2个小时粗略阅读了代码,记录下学
        阅读全文
        
摘要:原文:http://blog.csdn.net/hyljqr/article/details/500899结构体的sizeof先看一个结构体:struct S1{ char c; int i;};sizeof(s1)在VC6中按默认设置得到的结果为8。我们先看看sizeof的定义——sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况S1 s1 = { 'a', 0xFFFFFFFF };定义上面的变量后,加上断点,运行程序,观察s1所在的内存,你发现了什么以我的VC6.0(sp6)为例,s1的地址为0x0012FF78,其数据内容如下:
        阅读全文
        
摘要:例子完整代码:http://zhmster.googlepages.com/ReadFile.rar例子功能简介:程序中google.dic是我的google输入法的词库。本段代码功能:就是把这个文件重新按照词频排序。把词频高的放在前面。代码是我一个学生作品:我做了小部分修改。代码演示了如下的技术:1. c++读写文件2. 如何测试一个程序的运行时间。程序中calctime类可以复用。大家只要在程序开始声明一下即可。3. 重载str_line这个类的<操作符。以此可以利用链表的排序函数来排序。#include <list>#include <string>#inc
        阅读全文
        
摘要:我们打包基于VC++开发的应用程序,我们会一同打包一个VC运行库,否则安装到一些非开发环境中,你的应用程序依然可以正确运行。Visual C++ 2008 Redistributable Package 包括了(VCRedist_x86.exe,VCRedist_x64.exe以及VCRedist_ia64.exe)。就是一个简单的VCRedist.exe安装集成,结果下载了之后安装,安装完成后在系统或某个盘的根目录下留下一堆的临时文件:临时文件列表调查后发现,这是Microsoft Visual C++ 2008 Redistributable Package的一个已知Bug,微软在SP1中
        阅读全文
        
摘要:用VS2008 SP编写的MFC程序,拷贝到其他没装VS2008的机器上直接运行,肯定是不行的。即使选择静态链接MFC,有时候系统还是会提示“应用程序配置不正确”。这是因为程序中可能不止用到了9.0版本MFC,还可能有ATL、CRT、OPENMP等。在自己的机器上运行时,系统会到"C:/WINDOWS/WinSxS/"文件夹查找相应的库,这个文件夹里包含了所有安装过的版本的运行库和清单文件。如果只找9.0版本的库和清单文件,也可以到"C:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86"这个
        阅读全文
        
摘要:使用VS2008编译了一个程序,使用到自己编译的DLL,丢到某些机子上无法运行,提示“由于应用程序配置不正确,应用程序未能启动”的错误,装了vcredist_x86也没有用,开始以为是DLL的问题,后来换个简单的程序,仍然不行,百撕不得其解,后来上网找,下面有说了很多解决办法。 我最终的解决办法是复制本机中的.manifest文件,修改里面的版本号,复制到提示错误的机子上,与可执行程序放在同一目录就可以了。在计算机中管理的系统工具,事件查看器可以查看应用程序的消息,找到“由于应用程序配置不正确,应用程序未能启动”相关的错误,有那个版本号。修改.manifest文件中version的版本...
        阅读全文
        
摘要:Howto: Deploy VC2008 apps without installing vcredist_x86.exeThere are several reasons for xcopy deployment of an application (also known as application local). One main reason is that you are independent of what the target computer has installed.Also your application always uses the “correct” (or b
        阅读全文
        
摘要:目录注册表概述注册表相关函数详解注册表编程注册表概述概述注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用.这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等.数据结构注册表由键(或称"项")、子键(子项)和值项构成.一个键就是分支中
        阅读全文
        
摘要:1.打开和关闭子键 注册表函数对注册表的操作是通过句柄来完成的,与文件操作一样,在对某个键下的子键或者键值项进行操作之前,需要先将这个键打开,然后使用键句柄来引用这个键,在操作完毕以后再将键句柄关闭。注册表的根键不需要打开,它们的句柄是固定不变的,要使用根键的时候只要把这些句柄直接拿来用就是了,Windows.inc中已经预定义了它们的数值:HKEY_CLASSES_ROOT equ 80000000hHKEY_CURRENT_USER equ 80000001hHKEY_LOCAL_MACHINE equ 80000002hHKEY_USERS equ 80000003hHKEY_P...
        阅读全文
        
摘要:■...开发环境 ---->Turbo c DOS时代c语言开发的经典工具,目前适合两类人使用:c语言beginner(尤其是学生一族),具有怀旧情节的专业人士:) ---->Visual C++ 6.0/7.0 稳定而强大的IDE开发环境,具有丰富的调试功能,定制宏的功能也是其一大特色。Microsoft的经典之作,功能强大自不必言说。附带的一些工具也很不错,比如:Spy++。但编译器较之同类,支持c++标准的程度不够好,尤其6.0及以前的版本。 ---->BCB Borland的C++ Builder是可以与VC匹敌的另一个功能强大的IDE,速度和稳定性稍逊,但对c++标准支...
        阅读全文
        
摘要:我们今天要向大家介绍的是有关C++ clock()函数的一些基本概念以及应用方式,目的就是希望能够帮助大家轻松掌握这一应用技巧。AD: 在C++编程语言中,有许多特定的函数应用可以帮助我们实现许多不同的特定功能,方便程序员的实际开发。比如C++ clock()函数主要是帮助我们实现计时的功能。而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:clock_t clock( void ); 这个函数返回从“开启这个程序进程”到“程序中调用C++ clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-cloc..
        阅读全文
        
摘要:方法一、#include<iosteam>#include<ctime>usingnamespacestd;classCTimer{public:CTimer(){_start=clock();}~CTimer(){_end=clock();cout<<float(_end-_start)/CLK_TCK<<endl;}private: clock_t_start;clock_t_end;};voidmain(){CTimert;//程序执行部分!} 方法二://在windows下实现(毫秒级):DWORDdwStart=GetTickCount
        阅读全文
        
 
                    
                     
                    
                 
                    
                 

 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号