李超

cc编程笔记本。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

随笔分类 -  C / C++

1 2 下一页

摘要:使用列表控制的步骤如下: 调用CreateWindowEx函数来创建一个列表控件,指定它的类名为SysListView32。您还可以在此处指定控件初次显示时的方式。 创建和初始化用在列表控件中显示项目的图象列表(如果存在)。 向列表控件中插入列,如果显示的方式是报告方式这一步是必须的。 向控... 阅读全文
posted @ 2010-01-06 22:41 coderlee 阅读(8055) 评论(0) 推荐(1) 编辑

摘要:在使用SDK编写windows界面的时候,如果使用了列表控件,月历控件等高级控件,要#include 并且在注册窗口类之前调用InitCommonControls()函数。InitCommonControls()函数内部用来注册高级控件的窗口类,这个函数注册了所有高级控件的窗口类。另外还有一个Ini... 阅读全文
posted @ 2009-09-29 05:15 coderlee 阅读(1360) 评论(0) 推荐(0) 编辑

摘要:设备描述表对象HDC,画刷对象HBRUSH,画笔对象HPEN等等,这些不是核心对象,是GDI绘图对象,也是用户对象。区别用户对象和内核对象的通用方法是,创建内核对象的时候有个PSECURITY_ATTRIBUTES类型的参数,该参数是一个指向 SECURITY_ATTRIBUTES 结构的指针,该结... 阅读全文
posted @ 2009-09-29 05:09 coderlee 阅读(816) 评论(0) 推荐(0) 编辑

摘要:新手做windows开发首先的一个问题就是把字符串搞懂。一. 字符集简史字符是一个独立于计算机的概念,没有计算机仍然有字符,字符是文字符号,英语汉语日语还有各种标点符号都是字符。字符串就是字符组成的数组。早先,计算机使用一个字节来表示一个字符,字节Byte是8位无符号数字,单字节编码ASCII可以表... 阅读全文
posted @ 2009-09-29 04:36 coderlee 阅读(790) 评论(0) 推荐(0) 编辑

摘要:整理了一下 主要有这几个 findwindow 查找一个窗口 enumwindow 枚举窗口,通过回调函数,回调函数决定是否继续枚举 enumchildwindow 枚举某窗口的子窗口,比如先findwindow到qq的登录窗体 然后用enumchildwindow查找密码框(实际上 密码框不直接属于登录窗体) windowfrompoint 获取当前鼠标所在位置的窗口 只要先获取到了窗体,... 阅读全文
posted @ 2008-03-11 23:51 coderlee 阅读(1322) 评论(1) 推荐(0) 编辑

摘要:前段时间学习了HOOK,但没有做笔记,今天稍微整理下。 一 HOOK的功能 在消息体传递给应用程序的消息队列前对消息进行处理,也就是说如果在钩子过程中对消息进行了屏蔽,是不会进入应用程序的消息队列的。(我试验过,我们自己使用SendMessage和PostMessage的消息是没办法被钩住的,说明钩子过程的调用应该比较靠近消息传递过程的前面,很有可能位于事件触发,形成消息之后的环节) 二 HO... 阅读全文
posted @ 2008-03-08 10:58 coderlee 阅读(2719) 评论(0) 推荐(1) 编辑

摘要:因为C++要支持函数重载功能,所以实际编译时会对函数的名称进行改写。 所以我们要加extern "C"来修饰一个函数,让该函数不被重写。 但是,如果使用标准调用方式__stdcall来修饰的函数即使使用了extern "C"来限定,仍然会把名字进行改写,这个时候可以使用def模块定义文件来限定函数的名称,不让编译器进行改写。 几种情况: 1 名字被改写 __declspec(dllexpor... 阅读全文
posted @ 2008-02-29 16:08 coderlee 阅读(1273) 评论(0) 推荐(0) 编辑

摘要:我下午写过__stdcall和__cdecl的异同了,都是从右向左将参数压入栈中,只不过我当时说__stdcall是自己清空栈,而__cdecl是主调代码环境清空栈,于是我刚才写了两个函数,用VC8.0编译器编译后反汇编得到汇编代码。 C++代码如下: .h头文件 #pragma once #ifdef DLLTestAPI #else #define DLLTestAPI _declspe... 阅读全文
posted @ 2008-02-28 18:59 coderlee 阅读(1277) 评论(0) 推荐(0) 编辑

摘要:GetCurrentDirectory获取的是程序的运行路径,所谓程序的运行路径,并不一定是程序所在的磁盘路径,而是程序中一些函数的默认工作路径。 这个目录称为 “程序运行时路径” 或者 “环境路径” 更恰当。(比如调用GetOpenFileName函数就会改变这个环境路径) GetModuleFileName获取的是一个当前程序加载的模块的磁盘路径信息,是磁盘路径。 阅读全文
posted @ 2008-02-28 12:44 coderlee 阅读(1089) 评论(0) 推荐(0) 编辑

摘要:大家都知道导出成员用_declspec(dllexport),导入用_declspec(dllimport),可以在头文件的声明部分使用这两个修饰符对函数,类,变量,或类成员函数进行修饰,来表示该成员是一个导入成员或导出成员。 有一个小技巧,就是使用宏定义作为开关控制,让dll项目和调用dll的项目公用一个头文件: 1. dll的代码源文件(cpp文件)中定义一个宏 然后包含头文件 #defin... 阅读全文
posted @ 2008-02-28 09:52 coderlee 阅读(1499) 评论(0) 推荐(0) 编辑

摘要:泛型技术的实现方法有多种,比如模板,多态等。 模板是编译时决定,多态是运行时决定,其他的比如RTTI也是运行时确定。 最好用的应该是模板,多态是依靠虚表在运行时查表实现的。 比如一个类拥有虚方法,那么这个类的实例的内存起始地址就是虚表地址,可以把内存起始地址强制转换成int*,取得虚表,然后(int*)*(int*)取得虚表里的第一个函数的内存地址,然后强制转换成函数类型,即可调用来验证虚表... 阅读全文
posted @ 2008-02-21 14:50 coderlee 阅读(449) 评论(0) 推荐(0) 编辑

摘要:c++操作sqlserver或者access数据库可以导入msado15.dll来实现,将会根据你import时的参数生成msado15.tlh和msado15.tli文件,这两个文件对msado15.dll中的COM组件类进行的smart pointer的封装。 对于tlh和tli如何封装COM组件类为C++类,我举一个例子,ADO中的Connection类的例子。 在msado15.dll中... 阅读全文
posted @ 2008-02-19 09:59 coderlee 阅读(3162) 评论(0) 推荐(0) 编辑

摘要:TLB文件是一个说明文件,通过TLB文件,用户可以得知你的DLL文件中的COM接口 以及常量等的信息,这样一来用户才知道你的DLL中有什么接口与常量等,用户才 能用你的接口,当然了,如果你的COM接口只想自己使用,你可以不做TLB文件告诉 其他人这些信息了。 在使用#import引入一个com组件的时候,会自动生成.tlh和.tli两个文件,这个两个文件是对com类的封装,tlh是标准头文... 阅读全文
posted @ 2008-02-18 08:15 coderlee 阅读(3285) 评论(2) 推荐(0) 编辑

摘要:#import 指令 1. C++中使用 COM 簡單的方法是用 #import 導入 type library 2. # import 指令將 COM 產生對應的 C++類別,可以用接近於VBScript和Visual Basic的語句操作 COM 3. 使用 #import 命令就可以將該文件導入到我們的程式碼中。type library 的內容將被轉換為描述了 COM Interface 的... 阅读全文
posted @ 2008-02-18 07:42 coderlee 阅读(4377) 评论(0) 推荐(0) 编辑

摘要:刚才抓一个网页,发送如下请求 GET /xxx.xxx HTTP/1.1 Host: xxx 然后这样接收对方返回的数据: string strRecv = ""; char* temp = new char[2048]; int rc = recv(conn, temp,2048, 0); strR... 阅读全文
posted @ 2008-02-16 15:37 coderlee 阅读(2725) 评论(0) 推荐(0) 编辑

摘要:这第二篇是介绍Find的用法的,专门用来介绍Find。 Find按功能分为六个方法,每个方法都拥有四个重载,总共二十四个方法。(24个find.汗..) find 查找并返回位置。 rfind 反向查找并返回位置(只是从后往前进行查找,返回的位置是相对于串首而不是串尾)。 find_first_of 查找包含子串中的任何字符,返回第一个位置。 find_last_of 查找包含子串中的任何字... 阅读全文
posted @ 2008-02-13 17:09 coderlee 阅读(676) 评论(0) 推荐(0) 编辑

摘要:函数的污染问题主要有以下几点: 1 传递地址和引用传参,在函数内部污染了外部的变量。 2 返回值不确定,有可能是运算结果,还有可能是错误和异常代码。 针对以上两个污染问题的解决方案: 1 用const修饰符修饰型参,做一次隐式类型转换,将参数转换成常量参数,使函数内部不能修改。 2 使用throw抛出异常,在函数调用处try..catch,使返回值确定为运算结果,而不是错误代码。 ok 阅读全文
posted @ 2008-02-11 15:32 coderlee 阅读(372) 评论(0) 推荐(0) 编辑

摘要:在c/c++中经常会使用到const修饰符,使用改修饰符则表示改变量不能修改。 有些人会举出反例,比如这样: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> int a = 5; int* const p = &a; ... 阅读全文
posted @ 2008-02-11 14:43 coderlee 阅读(324) 评论(0) 推荐(0) 编辑

摘要://declare TCHAR tstrCurrentPath[MAX_PATH]; //initialize memset(tstrCurrentPath, 0, MAX_PATH); //Get GetCurrentDirectory(MAX_PATH, tstrCurrentPath); ... 阅读全文
posted @ 2008-02-02 16:02 coderlee 阅读(6240) 评论(1) 推荐(0) 编辑

摘要:常见的内存分配和使用错误 1) 内存的申请和分配并没有成功,但程序员却使用了它。一些新手经常会犯这种错误,他们并不会留意到内存没有分配成功。判断指针的值是否为NULL可以有效地避免这种错误。 2) 内存的分配已经成功,但是却没有进行初始化就直接使用它了。首先是观念上的问题,很多人都没有在使用指针前要初始化这样的习惯,然而这个习惯却是很重要的,希望大家一定要强迫自己养成。第二就是主观地认为自己... 阅读全文
posted @ 2008-02-02 15:19 coderlee 阅读(2147) 评论(0) 推荐(0) 编辑

1 2 下一页