代码改变世界

随笔分类 -  C++ 学习

关于在IWebBrowser中无法响应Ctrl+C等快捷键的解决方法

2013-06-13 09:29 by 彭白洋, 591 阅读, 收藏, 编辑
摘要: 最近在WIN32项目中用到IWebBrower2接口,发现复制粘贴等快捷键无法使用,后再网上查询到可以再消息循环阶段拦截IE的消息进行处理,代码如下: 1 if (msg.message >= WM_KEYDOWN && msg.message < WM_KEYLAST) { 2 TCHAR szClassName[256] = {0}; 3 ::GetClassName(msg.hwnd, szClassName, 256); 4 if (_tcsicmp(szClassName, _T("Internet Explorer_Server")) 阅读全文

定点数的表示

2012-07-18 16:40 by 彭白洋, 2634 阅读, 收藏, 编辑
摘要: 定点数的表示所有的定点数学实际上是以整数尺度为基础的。比如,我们想用一个整数来表示10.5。这做不到,因为没有小数位。你可以将其截断为10.0或将其舍入为11.0,但10.5不是一个整数。但如果你将10.5放大10倍,10.5就变成了105.0,这是一个整数。这便是定点数的基础。你可以采用某一比例系数来对数值进行缩放,并在进行数学计算时将比例系数考虑进去。由于计算机是二进制的,大部分游戏程序倾向于使用32位整数(或int),以16.16的格式来表示定点数。你可以将整数部分放在高16位,小数部分置于低16位。这样你已将整个数值放大为原来的2^16即65536倍。另外,为提取出一个定点数的整数部分 阅读全文

位操作实现加减乘除

2012-07-13 17:46 by 彭白洋, 331 阅读, 收藏, 编辑
摘要: 1 // Bit Operation Implements Add, Submit, Multiply, Divide 2 // Use only Integer with little length 3 4 #include <iostream> 5 using namespace std; 6 7 // add 8 int add( int a, int b ){ 9 int c; 10 while( c = (a&b) ){ 11 a = (a^b); 12 b = (c<<1); 13 } 14 return (a^b); 15... 阅读全文

DLL中用malloc分配了一块内存,但是在exe程序中释放引发的错误:其原因可能是堆被损坏,这也说明 **.exe 中或它所加载的任何 DLL 中有 bug。

2011-10-26 09:25 by 彭白洋, 502 阅读, 收藏, 编辑
摘要: <原帖地址:http://blog.csdn.net/geeeeeeee/article/details/3686961>写了个程序,在DLL中用malloc分配了一块内存,但是在exe程序中释放,结果程序crash,原因就是:其原因可能是堆被损坏,这也说明 TestMySticker.exe 中或它所加载的任何 DLL 中有 bug。想了半天以为是自己的写法有问题,后终于在google上找到了原因,汗。。。以下文字引用自http://hi.baidu.com/huhe/blog/item/0b422edd1f1563d98c1029a3.html很感谢作者的分析一个模块一个堆,一 阅读全文

[收集] SendMessage、PostMessage原理

2011-06-30 16:25 by 彭白洋, 413 阅读, 收藏, 编辑
摘要: 本文讲解SendMessage、PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级、中级、高级程序员进行理解,三个步骤分别为:1、SendMessage、PostMessage的运行机制。2、SendMessage、PostMessage的运行内幕。3、SendMessage、PostMessage的内部实现。注:理解这篇文章之前,必须先了解Windows的消息循环机制。1、SendMessage、PostMessage的运行机制我们先来看最简单的。SendMessage可以理解为,SendMessage函数发送消息,等待消息处理完成后,SendMessage才返回。 阅读全文

[收集] C++ memset ,memcpy 和strcpy 的区别

2011-05-19 17:50 by 彭白洋, 614 阅读, 收藏, 编辑
摘要: Memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’;例:char a[100];memset(a, '\0', sizeof(a));memset可以方便的清空一个结构类型的变量或数组。如:struct sample_struct{ char csName[16]; int iSeq; int iType;};对于变量struct sample_strcut stTest;一般情况下,清空stTest的方法:stTest.csName[0]='\0';stTest.iSeq=0;stTest.iType=0;用m 阅读全文

[收集] C++ sizeof()和lstrlen()和strlen()区别

2011-05-19 17:28 by 彭白洋, 835 阅读, 收藏, 编辑
摘要: strlen()是返回字符串的字节长度,lstrlen()是返回字符串的字符长度。也就是说第二个函数可能和第一个函数结果一样,如果字符串中字符单位都是单字节的话。一般来说主要区别在于ascii的字符,还是unicode或者是utf的区别。ASCII编码是一个字符占一个字节,Unicode是一个字符占两个字节.求这两种字符串的长度,要用两个函数分别来.lstrlen(),strlen()用来操作字符串或字符数组,lstrlen(),strlen()是在程序运行后得到字符串长度sizeof()可以操作任何类行sizeof()由编译器计算得到lstrlen used for unicodestrle 阅读全文

[收集] C++ 指针与引用的区别

2011-05-19 16:18 by 彭白洋, 323 阅读, 收藏, 编辑
摘要: 此文章来自《More Effective C++ 》以前对指针和引用的区别没有清楚的认识,看了此文之后对指针和引用的区别有了更深刻的了解。特将此文保存下来,以便日后再读。指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反 阅读全文

[收集] C++ const

2011-05-19 15:58 by 彭白洋, 326 阅读, 收藏, 编辑
摘要: 一 const基础如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况:int b = 500;const int* a = &b; [1]int const *a = &b; [2]int* const a = &b; [3]const int* const a = &b; [4]如果你能区分出上述四种情况,那么,恭喜你,你已经迈出了可喜的一步。不知道,也没关系,我们可以参考《Effective c++》Item21上的做法,如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧 阅读全文

[收集] C++ template 使用介绍

2011-05-19 10:32 by 彭白洋, 388 阅读, 收藏, 编辑
摘要: 1.模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float max( float x,float y){return (x>y)? x:y ;}//函数3.double max(double x,double y){return (c>y)? x:y ;}但如果在主函 阅读全文

[收集] __declspec(dllexport) & __declspec(dllimport)

2011-05-19 09:28 by 彭白洋, 374 阅读, 收藏, 编辑
摘要: __declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出。我要给别人用。一般用于dll中省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类__declspec(dllimport)声明一个导入函数,是说这个函数是从别的DLL导入。我要用。一般用于使用某个dll的exe中不使用 __declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport) 使编译器可以生成更好的代码。编译器之所以能够生成 阅读全文

[收集] #define __T(x) L ## x

2011-05-18 17:50 by 彭白洋, 776 阅读, 收藏, 编辑
摘要: 比如说:_T( "String Text ")展开后就是:L "String Text "##在宏里面相当于连接符,把前后两个字符串连在一起作为一个字符串 阅读全文

[收集] VC中的#pragma warning指令

2011-05-18 17:33 by 彭白洋, 270 阅读, 收藏, 编辑
摘要: 该指令允许有选择性的修改编译器的警告消息的行为指令格式如下:#pragma warning( warning-specifier : warning-number-list [; warning-specifier : warning-number-list...]#pragma warning( push[ ,n ] )#pragma warning( pop )主要用到的警告表示有如下几个:once:只显示一次(警告/错误等)消息default:重置编译器的警告行为到默认状态1,2,3,4:四个警告级别disable:禁止指定的警告信息error:将指定的警告信息作为错误报告如果大家对上面 阅读全文