11 yiruirui0507

尚未进行身份认证

我要认证

一个喜欢矛盾的人。

等级
TA的排名 2w+

SDK实现带工具栏、状态栏的窗口程序

创建一个工具栏2个函数可以用,CreateToolbarEx或者CreateWindowEx.这里用后者。用CreateWindowEx需要指定窗口类为TOOLBARCLASSNAME,初始化为没有包含任何按钮。MSDN中也说了它属于公共控件(common control),需要使用InitCommonControlsEx初始化。可以用2个消息来增加按钮。分别是TB_ADDBUTTONS,TB

2011-12-13 11:03:53

VC++SDK中实现直线(矩形,椭圆等)的移动及直线依附矩形椭圆的移动方法(附:运行效果图)

在SDK中实现画条直线,画个矩形等都有现成的函数供我们去调用,有时候直线,矩形画完之后需要能够随鼠标进行移动进而调整图形的位置。不知道该怎么去表述,就贴代码吧,代码中已经添加了很详细的注释了。直接把完整的例子代码都贴出来吧,这样最省事了。// areatest.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include "areates

2011-11-03 21:19:50

关于访问C++类对象中私有成员变量的方法,不考虑用友元

晚上看到群里有人问这样的题目: class   a     {   public:   void GetValue()   {cout<<k<<endl;}  private:     int   k;     }; 要求不用友元,不在这个类里添加任何代码,把成员变量k的值改为100,结果自然是通过公共成员函数GetValue来验证。 实现如下:

2011-10-19 21:45:10

vc6.0中用GDIPlus实现加载动态gif图片(非MFC实现)

今天心情很嗨皮,原因是花了5块钱买了一张刮刮彩,给中了100快,喜悦感可谓是油然而生吧,好了进入正题吧。关于GDI+的介绍在这里就不谈了,总之相比GDI确实方便了太多,比如首先GDI仅仅支持bmp格式的位图,对其他格式比如jpg,png,gif.....都很吃力了,而用GDI+确

2011-08-20 00:16:09

自定义MessageBox----HOOK

HOOK自己接触的其实非常少,所以也从来没敢谈论过什么,这个MessageBox还真的研究了好几个hour呢,挺怕被大牛们嘲笑的,今天我也不要脸了,说说我的一些看法,欢迎扔砖头,西红柿。 众所周知,一个标准的messagebox框通常不是自定义风格的,因为我们从来不能正常找到它的

2011-07-11 20:23:03

利用钩子函数来注入DLL的一个具体应用:点击桌面不同图标,播放相应音符

最近看核心编程,看到DLL注入这一章,有一个Desktop Item Positon Saver(DIPS)的例子,这个例子是使用窗口挂钩来将一个DLL注入到Explorer.exe的地址空间中,来保存和恢复图标位置。于是便想根据这个例子自己改造一下,正好前段时间看到在 Google 的首页上,谷歌为了纪念电吉他之父莱斯·保罗 96 周年诞辰,特意做了一个很有意思的Doodle,这个 谷歌电吉他L

2011-06-30 20:52:00

WINDOWS核心编程第三章内核对象的一点细节

久仰此书大名已久,可惜以前没看懂。。。现在感觉有点基础了回头再看,感觉多少有点死皮赖脸的嫌疑。。。。关于啥是内核对象请看第三章就对了,看的时候发现书上说GetCurrentProcess返回的是伪句柄(对GetCurrentDirectory比较熟悉,吃过一次亏,进程工作目录跟进程的镜像文件EXE所在的路径完全不是一回事,尤其设置了程序开机自启动,重启后默认的进程工作目录是系统目录,所以特

2011-06-04 22:12:00

Windows系统编程之进程间通信

<br />Windows系统编程之进程间通信<br />作者:北极星2003<br />来源:看雪论坛(www.pediy.com)<br />Windows 的IPC(进程间通信)机制主要是异步管道和命名管道。(至于其他的IPC方式,例如内存映射、邮槽等这里就不介绍了)<br />管道(pipe)是用于进程间通信的共享内存区域。创建管道的进程称为管道服务器,而连接到这个管道的进程称为管道客户端。一个进程向管道写入信息,而另外一个进程从管道读取信息。<br />异步管道是基于字符和半双工的(即单向),一般

2011-05-31 19:59:00

WIN32 SDK中树形视图与图像列表的配合使用实例(一)

树形视图算属于高级控件了,比较特别一点,能够很清晰的反应某种层次关系,日常生活中也比较常见,比如资源管理器左边窗口就正是树形视图。同时,它也不例外的属于窗口,那就可以用CreateWindowEx来创建,需传递一个"SysTreeView32"的类名,特殊之处在于这家伙属于通用控件,因此需要在代码中加入InitCommonControls函数。InitCommonControls函数是动态链接库comctl32.dll中的一个函数,只要在您的程序中的任意地方引用了该函数就、会使得WINDOWS的程序加载器P

2011-04-20 22:02:00

对LockWindowUpdate与GetDCEx的理解

<br />MSDN如是说:<br />The LockWindowUpdate function disables or enables drawing in the specified window. Only one window can be locked at a time. <br /><br />BOOL LockWindowUpdate(<br />  HWND hWndLock   // handle to window<br />);<br /><br />Parameters<br /

2011-04-18 21:24:00

设备上下文(DC)与内存设备上下文中的位图与画刷属性的一些零碎

设备内容众所周知,设备上下文是一种包含有关某个设备,如显示器、打印机等的绘制属性信息的WINDOWS数据结构。所有绘制调用都是通过设备上下文对象进行,其中这些对象中包含了画笔,位图,画刷等。设备内容与特定的显示设备相关,对于视讯显示器,设备内容总是与显示器上的特定的窗口相关。设备内容中的有些值是图形属性,这些属性定义了GDI绘图函数的工作细节,for example,TextOut,设备内容的属性中确定了文字的颜色,文字的背景色,x坐标,Y坐标映射到所要显示区域的方式,还有显示这些文字时系统使用的字体。当一

2011-04-17 17:28:00

WINDOWS内存映射文件原理分析+代码演示

WINDOWS为任何一个进程都赋予了4G的独立的虚拟地址空间,然而学过OS的都晓得这个只是逻辑上的虚拟的地址空间,进程实际拥有的远小于4GB的物理地址空间。并且进程的虚拟地址空间是每个进程私有的,有操作系统分配,本质上不过是物理内存地址的映像罢了。因此可以得出结论:在进程内运行的线程只能访问其所处进程的内存空间,即不同进程中可以用相同地址的指针用来指向属于各自进程中的内容,互不干扰,因为彼此都是以进程中的虚地址去访问内存的,操作系统再将虚拟地址转换为真正的物理内存地址。这样减少了程序员很多的麻烦事,使得我们

2011-03-31 23:57:00

利用远程线程将代码注入到目标进程中执行

<br />/* ************************************<br />* remote.c<br />* 创建远程线程、将代码注入到其他进程中执行<br />**************************************/<br />/* 头文件 */<br />#include <windows.h><br />#include <Tlhelp32.h><br />/*************************************<br />* BO

2011-03-26 23:18:00

说说字符集和编码

<br />很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。 <br /><br />再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。 <br /><br /><br /><br />开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 <br /><br />他们把其中的编

2011-03-22 23:58:00

关于LEA指令

堆栈种分配的局部变量所谓的“标号”,你以为是什么?(都是那些该死的宏惹的祸,大家要都是老老实实写代码,就不会有这些疑问了)。      比如你用local在栈上定义了一个局部变量LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子:      push    ebp      mov    esp,    ebp      sub    esp,    4      现在栈上就有了4各字节的空间,这就是你的局部变量。      接下来,你执行mov    LocalVar,    4,那么实

2011-02-18 13:25:00

给VC/SDK中的应用程序加上皮肤(实例演示)

<br />网上MFC加皮肤的资料蛮多的,SDK方面的相对较少,但是原理雷同,废话不多说了。<br />简单说明一下过程<br />1、复制 SkinH.dll、SkinH.lib、SkinH.h 以及皮肤文件MSN.she 至工程目录下;<br />  这里为了方便我直接把皮肤文件放到了一个文件夹中,在包含头文件的时候注意相应的路径就OK。<br />2、在工程中引入 .h 头文件及 Lib 静态库,大家在引用的时候要注意文件的路径;<br />#include "SkinH.h"<br />#pragm

2011-02-16 20:14:00

纯SDK实现双缓冲绘图与普通绘图差别演示

先大致介绍一下WINDOWS下的绘图原理:我们在 Windows 环境下看到各种元素,如菜单、按钮、窗口、图像,从根本上说,都是“画”出来的。这时的屏幕,就相当于一块黑板,而 Windows 下的各种 GDI 要素,如画笔、画刷等,就相当于彩色粉笔了。我们在黑板上手工画图时,是一笔一划的,电脑亦然。只不过电脑的速度比手工快的太多,所以在我们看起来好像所有的图形文字都是同时出现的。普通绘图方式的局限上述绘图方式我们暂且称之为普通绘图方式吧。虽然这种方式能满足相当一部分的绘图需要,但是当要绘制的对象太复杂,尤其

2011-01-19 20:57:00

Callback函数详解

<br />2010年的最后一天了,转载一篇自己认为还不错的文章与大家分享。希望对大家有所帮助。<br /> <br />一,回调函数<br /><br />我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢?<br /><br />使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数

2010-12-31 22:18:00

对WM_NCHITTEST消息的了解+代码实例进行演示

这个消息比较实用也很关键,它代表非显示区域命中测试。这个消息优先于所有其他的显示区域和非显示区域鼠标消息。其中lParam参数含有鼠标位置的x和y屏幕坐标,wParam 这里没有用。Windows应用程序通常把这个消息传送给DefWindowProc,然后Windows用WM_NCHITTEST消息产生与鼠标位置相关的所有其他鼠标消息。通俗的讲从消息产生消息。case WM_NCHITTEST:return (LRESULT)HTNOWHERE;以上代码能禁用窗口的所有显示区域和非显示区域鼠标消息,也就是当

2010-12-16 22:22:00

Windows消息编程

本文主要包括以下内容:1、简单理解Windows的消息2、通过一个简单的Win32程序理解Windows消息3、通过几个Win32程序实例进一步深入理解Windows消息4、队列消息和非队列消息5、WM_COMMAND和WM_NOTIFY6、MFC的消息映射7、消息反射机制1、简单理解Windows的消息消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。举个例子来说,鼠标单击某应用程序的一个按钮。这时,Windows(操作系统)给应用程序发送这个消息,通知应用程序该按钮被点击,应用程序将

2010-12-11 18:10:00

查看更多

勋章 我的勋章
    暂无奖章