- 博客(65)
- 资源 (14)
- 收藏
- 关注
转载 RegisterHotKey不认CHotKeyCtrl的帐
程序的所谓热键,简单点来说就它的快捷键,特别适合去激活后台运行或已隐藏了窗口程序,为达同种目的,程序也可以弄个dll安装全局钩子,可当你理解了热键之后便会发现这种钩子方法可谓笨又烦。。。 对于热键,及将几个特殊键组合在一起,由系统封装之后向程序发送WM_HOTKEY消息,接下来就是程序员的事了。为了让自己的程序能收到特定的热键消息,首先要向系统注册自定义热键,直接调用API Re
2013-09-05 16:41:42
168
原创 内存泄露 _CrtSetBreakAlloc(3894)
VS2012 如果检测到内存泄露 而且每次泄露的点都一样(4040如下的红色所示 每次都一样) 就可以通过_CrtSetBreakAlloc(4040); 检测到哪个位置泄露{4040} normal block at 0x0C54AA48, 8 bytes long. Data: 88 F2 53 0C 00 00 00 00 {4039} normal block
2013-08-19 10:48:00
212
转载 VC程序设计中可序列化类的实现
内容提要:本文以简单的例子介绍在Visual C++编程中数据读写的基本方法和可序列化类的实现,并简单介绍了Visual C++中序列化的使用。 数据读写是应用程序中必不可少的一部分,Visual C++中数据的读写当然也十分重要,因此VisualC++在MFC中对数据的读写创造了十分好的支持,这使得我们可以十分方便的实现我们对数据读写操作的需要。 MFC 为数据读写设计了三个
2013-07-08 08:56:14
198
原创 内存DC 与普通DC
1.普通窗口DC一个内存DC必须与一个窗口DC联系起来(当然也可以是其他硬件DC),不能创建一个内存DC与一个内存DC联系起来;比如:CCLientDC dc(this);CDC memdc,memdc2;memdc.CreateCompatibleDC(&dc);memdc2.CreateCompatibleDC(&memdc);//没用可以创建两个内存D
2013-06-21 17:00:00
317
原创 WM_PAINT ,InvalidateRect,内存设备上下文
对于InvalidateRect和Invalidate的区别:Invalidate使整个窗口区域无效,WM_PAINT响应函数中处理重绘整个窗口,InvalidateRect使窗口矩形区域无效,WM_PAINT中我们可以根据需求自己重绘部分窗口;其中一种用法是:通过GetUpdateRect获取无效矩形,注意,此函数一定要在CPaintDC dc前调用,否则将获得的
2013-05-08 17:54:49
233
原创 CHeaderCtrl 自绘 DrawItem
通过 DrawItem 自绘 表头,按网上的方法子类化CHeaderCtrl 之后 ,重载虚函数 DrawItem之后,不要在响应WM_PAINT消息,否则 DrawItem 是不会被调用的,具体原因没有仔细追究
2013-03-26 14:14:05
377
原创 int && 非常量右值
C++ 11中引入的右值引用正好可用于标识一个非常量右值。C++ 11中用&表示左值引用,用&&表示右值引用,如:int &&a = 10右值引用根据其修饰符的不同,也可以分为非常量右值引用和常量右值引用。C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区
2013-03-13 08:35:54
1397
原创 学习 C++ Template 心得
1.模板自变量推导模板自变量推倒只适用于函数模板和成员函数模板,对于类模板则无能为力,类模板需要明确提供类型参数上图是函数模板自变量推导的情况,函数模板推倒不会把一个参数推倒成一个引用(片面),比如template void fuc(T & ){}template void fuc(T ){}大概就这两种情况,无法推导
2013-03-07 15:32:51
387
原创 STL 之 心得
int sum( int arg1, int arg2) { return arg1+arg2; }void main(){bind1st(ptr_fun(sum), 1)(2); // the same as sum(1,2) }上面的例子运行没问题,bind1st把两个参数的函数变为一个参数为常数的函数,可以
2013-02-26 15:15:30
232
原创 VC 闪屏
背景介绍:我在动态库中创建了一个对话框,这个对话框上有很多子控件,对话框本身是没有边框的child风格的,此对话框用来嵌到一个父窗口中(比如CView类中),结果发现,只要CView窗口大小改变,我的对话框上面的子控件就不断地闪屏,以下记录我解决此问题的过程1.窗口需要重绘时会发出连个消息 WM_ERASEBKGND和WM_PAINT消息,顺序是先发送WM_ERASEBKGND然后
2013-02-18 18:13:08
478
原创 VC 闪屏
1、显示的图形为什么会闪烁? 我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏 幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时, 总是先用背景色将显示区清除,然后才调用OnPaint,而背景色往往与绘图内容 反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看起来 在闪。如果将背景刷设置成NULL,这样无论怎样重
2013-02-18 17:04:53
101
转载 MFC下按钮自绘的实现
MFC下按钮自绘的实现(一) 在MFC下编程,很多时候对于标准的按钮控件不是很满意,想要弄的美观点。这就需要按钮自绘。这里简单记录一下方法,以免过个十天半个月的,自己又忘的一干二净了。 首先给工程添加一个MFC类,基类为CButton。要想让按钮具备自绘功能,就要为按钮添加BS_OWNERDRAW属性。为类CButton重载PreSubclassWindow
2013-02-16 18:15:33
338
转载 DLL中 PreTranslateMessage消息的实现
在MFC里面,Pretranslatemessage是一个很重要的虚函数。这个函数的作用这里就不谈了,很多地方都有涉及,这里只谈一下其实现的机制。谈到PretranslateMessage的实现,便不得不谈到MFC消息循环的实现。MFC通过CWinApp类中的Pumpmessage函数实现消息循环,但是实际的消息循环代码位于CWinThread中,CWinApp只是从CWinThread继承过
2013-02-05 10:41:20
227
原创 指向函数的指针、指向成员函数的指针,指向类中操作符的指针,仿函数作为参数的原理
#include #include // Include algorithms#include using namespace std;//普通回调函数bool Compare(int s1, int s2){return s1>s2;}typedef bool (*pFuc)(int s1,int s2);//具有()操作符的类---仿函
2013-01-30 16:25:37
350
原创 GB2312 代码页(CodePage)936 联系
关于字符集的概念:GB2312:早期的中文字符集国标,字库很小,不建议使用。GBK:微软为弥补gb2312的不足搞出来的大字符集,是gb2312的超集,也是windows默认的字符集。GB18030:大字符集的国标,比GBK多一些字,但在编码定义上与GBK有少许不同,一般可以认为他们是兼容的。IBM-eucCN:IBM的中文字符集,AIX默认,与GBK基本兼容,但字
2013-01-29 11:07:04
1841
转载 面向对象 聚合 和 耦合 引自 http://www.nowamagic.net/librarys/veda/detail/1075
在面向对象的设计中,我们经常会听到或用到聚合、耦合的概念。面向对象的目标就是设计出高聚合、低耦合的程序。然而,究竟什么是聚合、什么是耦合,恐怕每个人都有自己的答案,换句话说,大多数人对聚合和耦合的概念是模糊的。小弟我今天就在此抛砖引玉,希望能给新入行的朋友和在校的学生一点帮助。因为聚合与耦合这两个概念一直都是以"高聚合、低耦合"的形式出现的,刚刚开始接触面向对象设计时,我一直认为聚合和耦合
2013-01-25 11:04:20
223
原创 设计模式之简单工厂模式与工厂模式
1.简单工厂模式:简单工厂模式使用简单,缺点时每次工厂要生产的品种增加时,都要重改工厂类,违反了开放封闭原则:软件实体(类、模块、函数)可以扩展,但是不可修改。看例子分析//抽象产品借口IProduct{public:void show(){}=0;}//具体产品AAProduct:public IProduct{public:void show()
2013-01-23 18:15:43
429
转载 代理模式(python) 区别于 策略模式(strategy )
代理模式(Proxy):为某个对象提供一种代理以控制对这个对象的访问。注意:代理模式和策略模式的类图很相近,实现方法也是一样的,但是应用场景很不一样,体现了不同的思想。 策略模式中同一外部对象访问上下文对象的操作一样,但是里面的策略对象不同。 代理模式中不同的外部对象访问代理对象的操作一样,但是里面的真实对象是一样的。 代理模式在访问对象时引入一定程度的间接性
2013-01-15 18:42:16
744
转载 自绘对话框重绘是会闪, 请问如何避免闪屏?
如果一个程序出现闪烁现象,会让人觉得程序编写人员很马虎,缺乏对细节的足够重视。Windows程序的任何部分都没有任何理由出现闪烁现象。这篇文章的目的是告诉读者如何使用相关的技术防止窗口出现闪烁效果。 什么是闪烁闪烁可以这样定义:当后面一幅图像以很快的速度画在前面一幅图像上时,在后面图像显示前,你可以很快看到前面那一个图像,这样的现象就是闪烁。我认为,闪烁会让使用者对程序很不满,原因是
2012-12-25 18:26:46
241
原创 只要继承接口,就会自动被注册到被观察者里面
observable.h #pragma once#include #include using namespace std;class IObserver;class CObservable//被观测者{public:void AddObserver(IObserver * pObserver){vecList.pu
2012-12-19 14:39:45
184
转载 vc6.0 通过ADO(udl)连接sql 2008(转)
本文讲解了用ADO技术连接VC6.0与sql2008(sql2000也一样)。(貌似不是经过ODBC连接的,通过udl好像)1.首先在vc6.0中新建一个基于对话框的应用程序,其他选项均为默认。本例中名称为Rent。(如果有问题请看vc教程)2.在Rent项目的文件夹里建立一个udl文件。步骤:(1)新建一个txt文件。 (2)把后缀名改为udl,并重命名
2012-10-23 08:38:55
275
原创 COM组件 regsvr32
cmd必须是以管理员身份运行,否则一般注册不成功,就算注册成功了也不可以用;通过ole VIEW 查看已经注册的COM信息
2012-10-17 10:16:38
353
1
转载 理解完成端口(IO completion port)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kevinlynx/archive/2008/01/27/2068739.aspx 关于完成端口网上有很多文章,不过我个人觉得大多都讲得不够清楚。给的例子要不就是给一个复杂的封装,要不就是给一个简单的收发数据。注意,完成端口不仅仅用于网络数据的收发,它可以用于windows 平台的各种IO操作。不过我这里只关
2012-10-15 14:55:04
293
转载 什么是虚拟列表控件
一、什么是虚拟列表控件虚拟列表控件是指带有LVS_OWNERDATA风格的列表控件。。二、为什么使用虚拟列表控件我们知道,通常使用列表控件CListCtrl,需要调用InsertItem把要显示的数据插入列表中,之后我们就不必关心数据在哪里了,这是因为控件自己开辟了内存空间来保存这些数据。现在假设我们要显示一个数据库,里面的信息量很大,有几十万条记录。通常有两种方法解决这个
2012-10-13 16:13:56
214
原创 #ifndef #endif 重复定义 const int p=3.14放到头文件中
1.h#ifndef _STR_DEFINE_H_#define _STR_DEFINE_H_const char Str_GW_Name_En[]="Sucden FixGateway";const char Str_GW_Name[]="苏克敦"; int a;#endif 2.h#ifndef _STR_DE
2012-10-12 16:29:11
777
转载 内核对象句柄表
分类: Windows2011-07-07 17:41 145人阅读 评论(0) 收藏 举报目录(?)[+] 一、什么是内核对象 在Windows中,为了简化对资源的访问,统一采用HANDLE来表示各种各样的资源(如内存块、映射文件、Mutex、Semophore等等)在内存中的存放方式(一种数据结构),我们称之为对象。该数据结构中存
2012-09-13 14:46:32
498
转载 C++编译器与链接器工作原理
1. 几个概念 1)编译:把源文件中的源代码翻译成机器语言,保存到目标文件中。如果编译通过,就会把CPP转换成OBJ文件。 2)编译单元:根据C++标准,每一个CPP文件就是一个编译单元。每个编译单元之间是相互独立并且互相不可知。 3)目标文件:编译所生成的文件,以机器码的形式包含了编译单元里所有的代码和数据。 还有一
2012-09-11 10:17:18
191
转载 WM_NOTIFY
WM_NOTIFY是控件发送给其父窗口的通知消息,一直没想过控件的父窗口变动的问题,直到想自己实现类似VC的停靠工具栏时才碰到这个问题。工具栏停靠时其父窗口是程序主窗口,当把工具栏拖出来,即拖出主窗口或是拖到客户区,必须创建一个POPUP窗口,工具栏的父窗口变为这个POPUP窗口。按照MSDN的说明,WM_NOTIFY是发送到父窗口,应该发送到这个POPUP窗口才对,结果POPUP窗口却截不到这个
2012-08-25 14:13:58
180
转载 主动处理TAB消息
楼主的错误在于:光想发送消息,不想处理消息不想处理消息,就只能用缺省的处理方法而缺省的方法本来就是那样处理的,然后大呼,为什么不按我想的做呢?首先你点击按钮1按系统缺省的方式就是让TAB的ID又回到了按钮1不管你咋点,他都从你点的地方开始算如果要达到你的要求,就必须重新处理TAB的响应第一步: 建立变量itemID代替TAB处理的默认的ID;WORD itemI
2012-08-24 10:12:41
359
转载 IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不
2012-08-13 14:14:00
317
原创 Spin控件 浮点数upordown CEdit控件
响应 UDN_DELTAPOS消息,此消息处理类似于void CSpinDlg::OnDeltapos(NMHDR* pNMHDR, LRESULT* pResult) {NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;// TODO: Add your control notification handler code hereif
2012-08-10 12:00:11
271
转载 使用异步过程调用(APC)实现模块注入
异步过程调用是一种能在特定线程环境中异步执行的系统机制。往线程APC队列添加APC,系统会产生一个软中断。在线程下一次被调度的时候,就会执行APC函数,APC有两种形式,由系统产生的APC称为内核模式APC,由应用程序产生的APC被称为用户模式APC。 每个线程都拥有自己的APC队列。应用程序可以使用函数把APC添加到指定线程的APC队列,函数定义如下:[cpp
2012-07-19 18:36:32
166
转载 线程 同步 异步 阻塞 费阻塞
同步(synchronous)和异步(asynchronous)其实是针对消息的发送和接受的次序而言的(在通信中就是消息的发送和接收,在IO中就是数据的读和写)。同步的意思就是消息的发送和接收是有序的,即接收和发送第二个包一定在第一个包之后第三个包之前,而不是乱序。异步的意思就是消息的发送和接收是可以乱序的,第一个包没发完可以直接发第二个包。至于阻塞(block)和非阻塞(non-bl
2012-07-19 10:24:46
283
转载 AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()动态切换资源 解决debug下调用release版本Dll
AFX_MANAGE_STATE(AfxGetStaticModuleState());//用于模块切换时的状态保护,1.AfxGetStaticModuleState()指向当前模块状态;2.当前函数调用结束后原模块的状态自动被恢复;3.用于DLL中所调用MFC函数、类、资源时的模块状态切换;在讨论关于动态链接到MFC的DLL的模块状态问题之前,先来看一个
2012-06-14 13:53:09
1514
转载 C语言字节对齐
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访
2012-06-11 15:36:06
149
转载 __cdecl __fastcall与 __stdcall
调用约定: __cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。 1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈, 2、_
2012-06-06 17:50:31
156
转载 send socket 缓冲区
send函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字
2012-06-01 09:15:34
769
1
转载 send socket 缓冲区
send函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字
2012-06-01 08:37:10
175
转载 send socket缓冲区
send函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字
2012-06-01 08:36:40
399
转载 send函数 socket缓冲区
send函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字
2012-06-01 08:21:45
264
opencv2.0 中文参考手册
2011-04-20
linux-0.11 源代码+内核代码完全注释
2010-03-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人