
VC/MFC/WTL/C++
文章平均质量分 86
zipper9527
这个作者很懒,什么都没留下…
展开
-
map中使用自定义类指针作为key
//先上代码#pragma once//想用类作为key,必须重载<运算符 或者提供//想用指针作为key,也是可以的,不过要自己提供比较方法class CBase{public: explicit CBase(int a); ~CBase(void);private: int m_a;public: int get() const{return m_a;}public:原创 2012-05-11 11:58:33 · 5548 阅读 · 1 评论 -
ON_COMMAND ON_MESSAGE ON_NOTIFY区别与联系
<br />此文章来自:<br />http://www.cnblogs.com/kangwang1988/archive/2010/09/09/1822401.html<br />ON_COMMAND是菜单和工具栏项处理消息的宏<br />ON_MESSAGE是处理自定义消息的宏<br />ON_NOTIFY 是控件向其父窗口发送消息处理的宏 <br />对这几个消息的理解要先了解一下Window消息的背景。<br />在Windows3.1里,控件会将mouse, keybord等等的消息通知它的父窗口原创 2011-05-08 10:40:00 · 1639 阅读 · 0 评论 -
ON_COMMAND ON_MESSAGE ON_NOTIFY
此文章来自:<br />http://www.cnblogs.com/kangwang1988/archive/2010/09/09/1822401.html<br /> ON_COMMAND ON_MESSAGE ON_NOTIFY区别与联系<br />ON_COMMAND是菜单和工具栏项处理消息的宏<br />ON_MESSAGE是处理自定义消息的宏<br />ON_NOTIFY 是控件向其父窗口发送消息处理的宏<br /> <br />对这几个消息的理解要先了解一下Window消息的背景。<br />转载 2011-05-07 15:42:00 · 726 阅读 · 0 评论 -
类的成员变量,请一定初始化
类的成员变量一定要初始化,不然有一天你会死得很惨,还不知道怎么死的原创 2011-06-29 21:07:00 · 956 阅读 · 0 评论 -
OnPaint里的故事
这是典型的OnPaint的处理void CMyDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中原创 2011-06-23 21:42:00 · 2144 阅读 · 0 评论 -
__stdcall与__cdecl
<br />(1) _stdcall调用<br />_stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。<br />WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题:<br /> #define WINAPI _stdcall<br /> 按C编译方式,_stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_functionname@number。<br />(2) _cdecl调用<br /转载 2011-04-25 11:15:00 · 673 阅读 · 0 评论 -
utf-8 转 mbsc
最近使用tinyxml 做些配置文件操作,碰到中文显示为乱码的问题,本人使用VC6,网上查了资料,默认使用的是MBSC,所以本身使用汉字是没有问题,但我的xml文件是保存为utf-8编码,下面代码的工作就是 utf-8转unicode,然后unicode转MBSC,前面的代码是别人写的,我加了两个函数UTF8ToUnicode_all和GetMBSC,因为我使用MFC环境,直接能一步转成CString当然最好了。顺便贴上一点资料,有助于理解,关于utf-8的:UTF-8是一种变长字节编码方式。对于某一个字符原创 2011-05-29 17:49:00 · 1020 阅读 · 0 评论 -
local function definitions are illegal
<br />如何你遇到这个错误,检查指向的函数并没有发现什么错误的话,请检查一下上一个函数定义。我产生这个错误的原因只是不小心把上一个函数最后的括号弄掉了。看了半天也没看出来,只能怪自己太粗心了。编辑是个需要耐心和细心的工作,一定要认真对待。这么个问题,实在不值得写一篇文章来分析。只 是想提醒自己以后写代码时要仔细,认真写好每一个函数,每一句代码。<br /> <br />另外,工作上这两天解决一个bug,值得我深思。代码是差不我一个月前写的。当时并没有发现什么问题,这两个星期要发布新版本,测试人员进行全面原创 2011-04-02 19:25:00 · 3029 阅读 · 0 评论 -
window权限 及c++实现 【网摘】
http://www.lihuasoft.net/article/show.php?id=755http://www.360doc.com/content/07/0404/15/21275_430071.shtml以程序的方式操纵NTFS的文件权限 Windows NT/2K/XP版本的操作系统都支持NTFS格式的文件系统,这是一个有安全性质的文件系统,你可以通过Windows的资源管理器来设置对每个目录和文件的用户访问权限。这里我就不对NTFS的安全性进行讲述了,我默认你对NTFS的文件目录的转载 2011-03-17 15:39:00 · 6297 阅读 · 1 评论 -
窗口的子类化与超类化
1. 子类化 <br />改变一个已经存在的窗口实例的性质:消息处理与其他实例属性。<br />在SDK编程范畴内,子类化就是改变一个窗口实例的窗口函数(通过GetWindowLong()和SetWindowLong()),子类化所要做的就是为某窗口实例编写新的窗口函数。其操作是在实例级别上进行的。<br />在 MFC中子类化的情况有所不同:所有MFC窗口有相同的窗口函数,由该窗口函数根据窗口句柄查找窗口实例,在把消息映射到该窗口类(class)得消息处理函数上。为了利用MFC的消息映射机制,不宜改变窗口转载 2011-02-24 00:00:00 · 716 阅读 · 0 评论 -
RegEnumValue调用失败返回ERROR_MORE_DATA
BOOL RegQueryKeyValue( HKEY hKey, TCHAR *lpName, TCHAR *name, TCHAR *value ){ HKEY handle; if ( ERROR_SUCCESS != RegOpenKeyEx( hKey, lpName, NULL, KEY_ALL_ACCESS, &handle ) ) { return FALSE; } TCHAR achkey[MAX_KEY_LENGTH]; DWORD cbname; TCHAR achclass[MA原创 2011-02-16 21:43:00 · 4453 阅读 · 0 评论 -
post-build command 设置
<br />我们通常会在这里写些命令如拷贝文件到指定的目录,相当方便,先展示正确的命令格式<br /> <br />copy "D:/workspace/aaa/Debug/RemoveFile.dll" "D:/workspace/bbb/Debug/RemoveFile.dll"<br />或者 copy "Debug/RemoveFile.dll" "../bbb/Debug/RemoveFile.dll",<br />一个是绝对路径,一个是相对路径,都是正确的。<br /> <br />像copy原创 2011-02-16 17:18:00 · 4175 阅读 · 0 评论 -
制作纯资源dll
<br />新建一个空的Win32 Dynamic-Link Library 库,添加一些资源如图片,字符串之类的,如果使用vc6,则在project setting->Link->Project Options 下的编辑框最后加上 /noentry,如果是使用vs2008 则打开项目属性->配置属性->链接器->高级 在无输入点中选择"是/NOENTRY"即可。值得注意的是你必须添加一个文件如main.cpp,里面可以不写任何东西,否则编译不过的。借助纯资源dll可以实现软件本地化<br /> <br /原创 2011-03-03 15:34:00 · 1204 阅读 · 0 评论 -
关于VC的一些网站
<br /><br />1. 大名鼎鼎的CodeGuru 号称代码领头羊 <br />非常著名的关于程序开发的网站,大量的资料.强烈推荐 <br />http://www.codeguru.com/ - 外文 <br /> <br />2. Developer.com: An EarthWeb site <br />http://www.developer.com/ - 外文 <br /> <br />3. 阿蒙编程之家 <br />非常不错的个人网站.<br />这里可以下载很多的电子书籍:http原创 2011-01-23 21:28:00 · 6014 阅读 · 1 评论 -
WTL中CString的使用问题
atlmsic.h中定义的是WTL::CString,不过可以通过宏_WTL_USE_CSTRING和_WTL_NO_CSTRING来确定是否使用。atlstr.h中定义的是ATL::CString。如果按照说明,先定义_WTL_USE_CSTRING,然后包含atlmsic.h,就会出现CString定义不明的编译错误,其实就是编译器分不清你是用WTL::CString,还是ATL::CString。避免这个问题的有两种方法:1、只用atlstr.h(ATL::CString),不用atlmisc.h(W转载 2011-01-18 09:37:00 · 1893 阅读 · 0 评论 -
关于TransparentBlt 透明显示问题
包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有透明区域位图的方法。一、TransparentBlt 函数的使用TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。Windo转载 2011-05-08 10:46:00 · 3782 阅读 · 0 评论 -
oracle 9i 新建数据库,新建用户
新建数据库可以使用向导 Database configuration assistant, 不知道要创建什么样的数据库就选择general purpose,其它选项默认就可以了,最后会要求设置SYS,SYSTEM的密码,密码请记好。 新建用户,使用SYSTEM用户登录SQLplus worksheet,登录后输入命令 1 创建用户create user userName identified b原创 2011-06-16 00:05:00 · 1795 阅读 · 0 评论 -
VS2010 编译 google V8 引擎 为 dll
官方指导:https://code.google.com/p/v8/wiki/BuildingWithGYP我是WIN8 64位系统哦,非64位的注意gpy选项,其它的应该是一样的安装SVN1.check out v8 引擎代码 http://v8.googlecode.com/svn/trunk2.check out gyp, http://gyp.googlec原创 2013-05-26 13:14:17 · 4908 阅读 · 0 评论 -
WM_NCHITTEST 消息的相关知识
原文地址:http://www.cnblogs.com/GnagWang/archive/2010/09/12/1824394.html我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下:通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口。一个容易想到的方案是,处理鼠标消息WM_LBUTTONDO转载 2012-05-17 10:08:15 · 878 阅读 · 0 评论 -
c++ 中 operator的两种用法
c++中的operator 有两种用法,一种是(operator overloading)运算符重载,一种是(operator casting)操作隐式转换#include using namespace std;class num{protected: int m_a; int m_b;public: num(int a, int b):m_a(a),m_原创 2012-05-31 11:53:35 · 9027 阅读 · 0 评论 -
构造函数中无法实现多态
#include "stdafx.h"#include using namespace std;class Parent{public: Parent() { this->printfn(); } virtual ~Parent(){} virtual void printfn() { cout <<"1 "; } void test_again(){printf原创 2012-05-09 09:59:10 · 2220 阅读 · 0 评论 -
获取文件夹的大小
BOOL DIRECTORY_EXISTS(CString path){ DWORD att = GetFileAttributes(path); if( att == FILE_ATTRIBUTE_DIRECTORY ) { return TRUE; } return FALSE;}BOOL GetDirSize(CString path,ULARGE_INTEGER &ou原创 2010-05-26 13:34:00 · 1636 阅读 · 3 评论 -
VC 强制重启电脑的方法
BOOL RestartWindows(){HANDLE hToken; TOKEN_PRIVILEGES tkp; //获取系统信息OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if( GetVersionEx( &osvi ) == 0 ) return FAL原创 2012-02-21 10:21:38 · 3264 阅读 · 0 评论 -
我的MFC对话框打印及打印预览demo
http://download.youkuaiyun.com/detail/zipper9527/4099354欢迎下载和改进!原创 2012-02-29 11:52:48 · 1447 阅读 · 0 评论 -
使用注册消息进行进程间通讯
进程间通信的方法有很多,比如使用注册消息,内存映射,WM_COPYDATA等,下面先讲使用注册消息实现的方法。使用注册消息比较简单,核心是消息的接收端和消息的发送端(接收端和发送端在两个不同的进程)必须注册相同的消息,这样发送消息才能识别。下面看看具体实现:一,发送消息进程1, 在发送消息程序A注册消息:const UINT WM_UPDATE_ALARMFILTER = ::转载 2012-02-13 08:48:34 · 874 阅读 · 0 评论 -
变量作用域内的子作用域内被重新定义的思考
首先来看这样一个例子:在VC6中:#include "stdafx.h"#include using namespace std;int main(int argc, char* argv[]){//循环Afor ( int i=0; i{cout {//循环Bfor ( int i=0; i{cout }//语句Ccout原创 2011-12-31 10:01:29 · 2301 阅读 · 0 评论 -
WTL的安装
WTL8下载地址:http://sourceforge.net/projects/wtl/files/latest/download解压WTL8到 ($WTL8) C:/SDK/WTL8 用 ($WTL8)/AppWiz/Setup80.js 的内容覆盖 ($WTL8)/AppWiz/Setup90.js ,注意,里面本身是有一个setup90.js的,不要以为有这个文件就可以原创 2011-12-19 13:16:39 · 1372 阅读 · 0 评论 -
memset 不要乱用
memset 应该用于对一些简单的纯数据结构进行初始化,比如 :1,数组, int a[100],float b[200]2. 简单数据类型组成的 结构体:struct{int a;float b;double c[100]}3.单个简单数据 也是可以的int a;memset( &a, 0, sizeof(a))对于一些类组成数组不应该使原创 2011-11-06 20:11:42 · 5461 阅读 · 0 评论 -
xdebug(32) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
代码:#include "stdafx.h"#include "Test_Banana.h"#include "Test_BananaDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif#include 应该这样写#include "stdafx.h"#include "Test_Banana.h"原创 2011-10-21 16:07:28 · 4437 阅读 · 0 评论 -
VC防止窗口和控件闪烁的方法
一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显转载 2011-10-15 09:22:16 · 4774 阅读 · 0 评论 -
ASCII码对照表
ASCII表就是字符表,我们能看懂的是字符,如一个单词girl,由四个字母组成,每个字母可以看成是一个ASCII码字符,对应的十进制,十六进制,八进制,二进制是多少这是计算机需要的,这种对应关系是人制定的。http://www.96yx.com/tool/ASC2.htm原创 2011-10-13 09:54:14 · 14046 阅读 · 0 评论 -
fatal error C1075: 与左侧的 大括号“{”(位于“d:/vs2008workspace/wtl/controlmanial/controlmanial/stdafx.h(36)”)匹配之前遇到文件结束
<br />你的WTL /ATL程序里,如果你去掉<br /><br />BEGIN_MSG_MAP(classname)<br />****<br />END_MSG_MAP<br />程序正常,加上就出现如果类似的错误,那你先拍一下自己的脑袋,然后我的解释:<br />原因很简单,你把END_MSG_MAP后面的()写掉了<br /> <br />应该是:<br /> <br /><br />BEGIN_MSG_MAP(classname)<br />****<br />END_MSG_MAP()原创 2011-01-13 10:05:00 · 10456 阅读 · 1 评论 -
堆排序
#include #include #include using namespace std;class CompareObj{public: CompareObj( int _a = 0):m_a(_a){} int m_a;};void g_swap( CompareObj** PtrA, CompareObj** PtrB){ CompareObj *pTemp = *PtrA; *PtrA = *PtrB; *PtrB = pTemp;}原创 2010-12-30 14:37:00 · 737 阅读 · 0 评论 -
__declspec(selectany)的作用
在MFC,ATL的源代码中充斥着__declspec(selectany) 的声明。selectany可以让我们在.h文件中初始化一个全局变量而不是只能放在.cpp中。比如有一个类,其中有一个静态变量,那么我们可以在.h中通过类似" __declspec(selectany) type class::variable = value; "这样的代码来初始化这个全局变量。既是该.h被多次include,链接器也会为我们剔除多重定义的错误.转载 2010-12-24 12:41:00 · 639 阅读 · 0 评论 -
钩钩钩子,HOOK,复制粘贴没整理
SetWindowsHookEx Function 此函数添加了一个程序定义的钩子过程到钩子链中,用这个钩子过程来监视系统中的特定类型的事件,这些事件与指定的线程或所有的线程相关 HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId ); 参数详原创 2010-03-23 14:31:00 · 3180 阅读 · 0 评论 -
debug 通过,Release运行出错。all references to "ADVAPI32.dll" discarded by /OPT:REF
Debug下通过,Release编译通过运行出错,还有警告”all references to "ADVAPI32.dll" discarded by /OPT:REF”,居然是自定义消息出了错 顺便在网上搜了一个自定义消息的方法: 1 首先定义消息:例如 define WM_MYMESSAGE (WM_USER+100) 2 在.H文件中,加入消息响应函数,如: LONG On原创 2010-03-23 14:22:00 · 2634 阅读 · 0 评论 -
no appropriate default constructor available
//classbase.hclass CClassBase {public: CClassBase(int a,int b=2,int c=3); virtual ~CClassBase();protected: int m_a; int m_b; int m_c;};//classbase.cppCClassBase::CClassBase(int a,int b,int c)原创 2010-01-07 20:45:00 · 3895 阅读 · 0 评论 -
注册表的文件类型关联[转]
原文地址:http://hi.baidu.com/tanry/blog/item/31c9b93833eb87c1d46225c2.html 什么是文件关联呢?通俗地说,就是选择不同类型的文件时,在其右键菜单上显示的各功能项。每个功能项即对应一个关联。选择了某一功能(操作),系统就去执行相应的处理程序。至于对什么文件的什么操作对应什么样的处理程序,那都记录在系统注册表中。因此,要真正弄清文件关联原创 2009-12-23 12:38:00 · 1265 阅读 · 0 评论 -
再看ODBC数据访问
以前用过ODBC忘了不少,准备学着开始用ADO了。ODBC有几种访问数据库的方式。首先要创建好数据库,然后注册数据源。注册数据源可以用API函数实现。一个CDatabase对象对应一个数据库。一般可以设置为全局的,在程序初始化时打开,在程序结束前关闭。CDatabase g_db;g_db.Open(...);接下来使用CRecordset类,有两种方式:1.在需要访问原创 2009-12-16 09:11:00 · 780 阅读 · 0 评论 -
小技巧
Bin 目录,生成目录,所有要打包的文件都放到这里Lib 目录,存放所有的lib文件,一个组件编译后将其lib文件拷贝到此文件夹中,当其他组件要调用此组件是在额外路径中添加lib目录的路径,并添加xxx.lib名称,编译主程序时则将相应的dll文件拷贝到bin文件夹下,同时也要添加组件名称和组件的路径 Progec原创 2010-02-02 15:46:00 · 549 阅读 · 0 评论