Windows编程
windcsn
这个作者很懒,什么都没留下…
展开
-
函数是如何被调用的?-探索代码背后的故事
本文以一个简单的例子来说明函数调用的过程中系统对各CPU寄存器的处理;这里需要一些汇编知识。http://www.cppblog.com/windcsn/archive/2007/01/18/17752.html原创 2007-01-18 16:31:00 · 2610 阅读 · 0 评论 -
Windows程序设计阅读笔记(3)-设备内容类型
有四种设备类型:显示器、打印机、内存(或兼容)、信息。每种类型有不同的用途,下表描述:设备类型描述显示器支持在一个视频显示器上绘画操作打印机支持在一个打印机上的绘画操作内存支持在一个位图上的绘画操作信息支持得到设备的数据显示器设备内容程序能够通过调用BeginPaint, GetDC,或GetDCEx函数来获得显示设备内容,程序仅仅在需要对客户区域绘画的时候才去获得DC;完成绘画之后,程序必须释放原创 2005-10-09 10:16:00 · 1628 阅读 · 0 评论 -
Windows中的坐标空间
坐标空间的转换一个坐标空间就是一个基于迪卡尔坐标系统的平面空间。这个系统提供了一个描述平面上每个点的方法。它要求两个正交的长度相等的轴,下图说明了一个坐标空间:系统支持四种坐标空间,下表具体介绍:坐标空间描述世界为了图形转换而随意使用的起始空间,它允许缩放、转换、旋转、截取、映射。世界空间高2^32,宽2^32。页面用做世界空间的下一个空间或图形转换的起始空间,它设置了映射模式,页面空间也被限定为原创 2005-09-28 14:48:00 · 1626 阅读 · 0 评论 -
InvalidateRect-WINDOWS API
InvalidateRect添加一个区域到指定窗口的更新区域。更新区域代表必须被重绘的窗口客户区域的一部分。BOOL InvalidateRect( HWND hWnd, // 窗口的HANDLE CONST RECT* lpRect, // 矩形饿坐标 BOOL bErase // 擦除状态);参数:hWnd:[输入]一个更新区域已经改变的窗口HAN原创 2005-09-28 08:55:00 · 1948 阅读 · 0 评论 -
IntersectRect-Windows API
IntersectRect函数计算两个源矩形的交集,并将交集矩形的坐标放到目标矩形中,如果源矩形没有交集,那么一个空的矩形(坐标都是0)被设置。BOOL IntersectRect( LPRECT lprcDst, // intersection buffer CONST RECT *lprcSrc1, // first rectangle CONST RECT *lprcS原创 2005-09-28 11:35:00 · 5036 阅读 · 4 评论 -
SetStretchBltMode-WINDOWS API
SetStretchBltMode函数设置在指定设备内容中的伸展模式。int SetStretchBltMode( HDC hdc, // DC的HANDLE int iStretchMode // 位图伸展模式);Hdc:输入,设备内容的HANDLEiStretchMode:输入,指定的伸展模式,参数可以下面值之一:值描述BLACKONWHITE执行一个布尔AND操作原创 2005-09-28 11:23:00 · 3676 阅读 · 0 评论 -
SetViewportOrgEx-Windows API
SetViewportOrgEx说明哪个设备点映射到窗口原点(0,0)BOOL SetViewportOrgEx( HDC hdc, // 设备内容HANDLE int X, // 新Viewport的x坐标 int Y, // 新Viewport的y坐标 LPPOINT lpPoint // 原来的Viewport的坐标);参数:hdc:原创 2005-09-28 10:18:00 · 2161 阅读 · 1 评论 -
Windows程序设计阅读笔记(1)
Windows可以通过无效区域来设置更新区域的大小,从而不至于将不必要更新的地方更新无效区域(无效矩形)导致系统产生WM_PAINT消息消息队列中不会有多个WM_PAINT消息,如果有多个无效区域,系统在处理WM_PAINT之前将多个无效矩形合并InvalidateRect可以产生一个无效矩形Windows为每个窗口保存一个绘图信息结构,该结构有该窗口最小的无效区域在处理WM_PAINT消息时,调原创 2005-10-08 22:28:00 · 1134 阅读 · 0 评论 -
裁剪(Clipping)-Window GDI
裁剪是在一个应用程序的窗口中限制输出区域或路径的过程,下面讨论裁剪.关于裁剪应用程序以各种方法来使用剪切。WORD程序和电子表格程序裁剪键盘输入来避免其出现在页或表格的边界;CAD和绘画程序裁剪图形输出是为了避免在图画的边界被覆盖。一个裁剪区域是一个直线或曲线边的区域;一个裁剪路径是边可以为直线、曲线或他们的组合的区域。更多的信息参见区域和路径。 区域区域可以是一个矩形、多边形、椭圆形(或他们两个原创 2005-09-29 15:35:00 · 3263 阅读 · 0 评论 -
Windows程序设计阅读笔记(2)
设备内容是一个结构,它定义了一系列图形对象和与之相关联的属性,也包括影响输出的图形模式。图形对象包括:画线的笔、着色和填充的刷子、屏幕上复制或滚动的位图、定义各种可用色彩的调色板、为了裁剪和其他操作的区域、支持着色和绘画操作的路径。关于设备内容设备独立是WINDOWS的首要特征。应用程序能够在各种设备上绘图。支持设备独立的软件包括在两个DLL中,一个是GDI.dll,被叫做图形设备接口(GDI),原创 2005-10-08 23:10:00 · 1206 阅读 · 0 评论 -
区域和裁减区域-Window GDI
区域的创建和选择一个应用程序通过调用指定形状的函数来创建一个区域。下表显示了创建标准图形的函数形状函数矩形区域CreateRectRgn, CreateRectRgnIndirect, SetRectRgn圆角的矩形区域CreateRoundRectRgn椭圆区域CreateEllipticRgn, CreateEllipticRgnIndirect多边形区域CreatePolygonRgn, C原创 2005-09-29 22:53:00 · 2802 阅读 · 0 评论 -
Windows程序设计阅读笔记(4)-得到设备内容HANDLE
得到设备内容HANDLE有两种方法:BeginPaint,GetDCBeginPaint仅仅在WM_PAINT消息处理时使用,GetDC可以在任何时候使用,主要为了响应用户的鼠标和键盘BeginPaint得到的绘图信息结构中的是无效区域,也同时限定了裁剪区域为该无效区域,系统只能在该区域上绘画;GetDC得到HDC有一个裁减区域,它等于更个显示区域的大小,可以在显示区域的任何部分绘画。BeginP原创 2005-10-09 13:55:00 · 1962 阅读 · 0 评论 -
在程序的Title Bar上输出文字
在看Windows程序设计的时候,看到得到设备内容的不同函数,其中介绍GetWindowDC得到整个程序的所有更新区域的DC,包括TITLE Bar窗口,因此想象许多很COOL的程序那样,在窗口的TITLE Bar上做写小动作,这里很简单,以我的阅读的Windows程序设计chm文件的窗口来试验一下。我的目的是在“Windows程序设计”chm文件的窗口Ttitle Bar上输出一行文字:“我的测原创 2005-10-09 21:48:00 · 1627 阅读 · 0 评论 -
正确使用StretchBlt模式来改善缩放位图的性能
前段时间研究位图的放大,对StretchBlt的模式做了分析,其中主要比较的是默认模式和清晰度比较高的HALFTONE模式。为了进行图形缩放的时候得到质量较高的图形,HALFTONE模式被采用,但HALFTONE模式是将源矩形区中的像素映射到目标矩形区的像素块中,覆盖目标像素块的一般颜色与源像素的颜色接近,因此其运算量比较大,而且在设置为该模式以后需要设置刷子的源点。下面对使用默认模式和HALFT原创 2005-10-22 16:38:00 · 3959 阅读 · 0 评论 -
远程控制软件-1.0Beta版
本人自己写的远程控制软件;类似于微软的远程桌面。LAN内可用,有公网IP地址的计算机可用。当然,该版本还是不够完善,屏幕的抓取是利用定时器的。主要的改进方向是:1。屏幕抓取的方法2。数据压缩的方法3。其他功能的扩充详情见:http://www.cppblog.com/windcsn/archive/2006/09/14/12479.html原创 2006-09-14 21:27:00 · 1911 阅读 · 0 评论 -
进程间通讯-WriteProcessMemory和ReadProcessMemory
http://www.cppblog.com/windcsn/archive/2006/04/20/5981.html原创 2006-04-20 22:03:00 · 1991 阅读 · 0 评论 -
采用修改导入节的HOOK方式使用范围
详细见:http://www.cppblog.com/windcsn/archive/2006/03/06/3815.html转载 2006-03-06 17:01:00 · 1208 阅读 · 0 评论 -
第三部分:实现IDataObject(OLE drag&drop之旅)
http://www.cppblog.com/windcsn/archive/2006/03/03/3668.html转载 2006-03-06 08:47:00 · 1485 阅读 · 0 评论 -
第四部分:枚举FORMATETC(OLE drag&drop之旅)
http://www.cppblog.com/windcsn/archive/2006/03/03/3669.html转载 2006-03-06 08:52:00 · 1454 阅读 · 0 评论 -
第二部分:OLE数据传输(OLE Drag和Drop随笔)
详细见http://www.cppblog.com/windcsn/archive/2006/03/01/3603.html转载 2006-03-01 15:48:00 · 1298 阅读 · 0 评论 -
Microsoft的一个关于DirectX3D的BUG
在Windows2000和XP中可以通过调用USER32.DLL中的SetLayeredWindowAttributes这个API来设置窗口的透明度,但也给DirectX3D带来了一个BUG,就是LAYERED窗口闪烁的问题。你使用Windows的API:CreateWindowEx或SetWindowLong来设置窗口的WS_EX_LAYERED样式,这个时候调用上面的API来设置窗口的透明度为原创 2006-02-28 11:44:00 · 1698 阅读 · 0 评论 -
D3D入门-D3D介绍
1. D3D入门本节提供一个对D3D图形编程接口(API)的简短介绍。这里你将发现一个图形管道的概貌以及帮助你实现基本D3D功能的指南。1.1. D3D架构本节包含Microsoft的D3D组件、其他Microsoft DirectX、操作系统和系统硬件之间的关系;下面将讨论这些主题。1.1.1. D3D的架构概览这是一个图形管道的描述。每个块的功能性在下面介绍,连接翻译 2006-02-22 21:29:00 · 7138 阅读 · 0 评论 -
D3D坐标系统和几何-D3D入门课程
请查阅http://www.cppblog.com/windcsn/archive/2006/02/19/3338.html翻译 2006-02-25 01:19:00 · 1876 阅读 · 1 评论 -
为你的程序创建一个控制台
经常看到一些程序在运行的时候有一个WINDOWS控制台,感觉非常COOL。实际上有的时候帮助你监视系统运行是很方便的,那么怎么样创建一个控制台呢?实际上WINDOWS为你提供了一系列的API来完成这个功能,例如:ReadConsole,WriteConsole等,具体参见MSDN。下面我们用一段代码来说明如何创建Console.1。首先调用AllocConsole函数来为你进程创建一个Consol原创 2005-11-27 15:47:00 · 6405 阅读 · 0 评论 -
OffsetRect-Windows API
OffsetRect函数将指定的矩形移动到指定的位置BOOL OffsetRect( LPRECT lprc, // 矩形 int dx, // 横向偏移 int dy // 纵向偏移);参数:Lprc:[输入输出]指向一个RECT结构,其中包含了被移动矩形的逻辑坐标Dx:[输入]指定的矩形左右移动的量。当向左移动的时候,这个参数必须是一个负值。Dy:[输出]指定原创 2005-09-28 10:52:00 · 3681 阅读 · 3 评论 -
多线程WIN32程序如何检查死锁(二)-检查死锁的策略
多线程应用程序中检查死锁的方法 WIN32 API的好的特性就是能够让你所有可能引起死锁的资源。在上面的WINDOWS3.1的例子中,硬盘驱动器制造商,应用程序员,WINDOWS开发人员都不可能预测到死锁,因为这个死锁包含了几个软件部分,而且软件内部的功能对其他部分的作者来说是未知的,但如果把他们放在一起,他们就能够让系统挂起。 然而在WIN32 API中,所有的同步对象只能在本地工作,也就是说,原创 2005-09-12 10:14:00 · 2044 阅读 · 0 评论 -
多线程环境下怎么样确定代码的执行时间
你想知道你的代码究竟执行了多长时间吗?是的,有的时候我们需要确定我们的代码到底执行了多长时间。或许你会想这有何难,在代码的前后增加GetTickCount来得到时间不就可以了吗?没错,如果系统是线形执行的话,这样做肯定可以得到,但我们怎么能够保证系统是线形的来?我们这里只讨论WINDOWS,WINDOWS是典型的多线程、抢占式的多任务操作系统。如果你的计算机只有一块CPU的话,那么你的应用程序是这原创 2005-09-13 13:32:00 · 4548 阅读 · 2 评论 -
CComObjectRootEx类
该类处理聚合和非聚合对象的对象引用记数管理。对于非聚合对象它拥有对象的引用记数对于聚合对象它拥有一个指向外部unknown的指针。对于聚合对象来说,CComOjbectRootEx可以用来处理内部对象构造失败并保护外部对象在内部接口被释放或删除的时候不被删除。templateclass CComObjectRootEx : public CComObjectRootBase 参数:ThreadMo原创 2005-07-22 11:06:00 · 3321 阅读 · 0 评论 -
动手实现TCP的Nagle算法,提高网络应用程序的性能
TCP有一个Nagle算法是用来提高TCP传输性能,主要是防止在对方窗口很小的情况下发送很少字节的包,来减少网络上不必要的数据包来提高internet的性能。详细信息参见TCP相关介绍。由于Nagle算法的存在,在某些时候导致小的及时传输的数据包不能被迅速的传递到对方,从而造成应用程序的性能问题,但如果将Nagle的算法Disable了,那么有些时候会出现1个有效字节40个包头(IP头+TCP头)原创 2005-07-18 20:00:00 · 8690 阅读 · 1 评论 -
CWindowImpl类
这个类允许你创建一个新的窗口或使一个存在的窗口变成一个子类。CWindowImpl窗口程序使用消息映射来导向详细到响应的句柄。template class TBase = CWindow, class TWinTrait = CControlWinTraits >class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT 参数:T:你的类,继原创 2005-07-22 12:24:00 · 4704 阅读 · 0 评论 -
实现Drop源
本文介绍怎么样让你的应用程序提供数据来支持拖放操作 基本的drop源操作相对简单。第一步就是我们事件来开始拖动操作。推荐用户接口定义来开始 一个拖动操作,当选择一个数据和WM_LBUTTONDOWN发生在被选择的数据点上。 如果你的应用程序是一个容器并且被选择的数据是一个链接或一个COleClientItem,被DoDragDrop 函数调用。否则,构造一个COleDataSource对象,用选择原创 2005-07-10 20:52:00 · 1354 阅读 · 0 评论 -
Data Objects and Data Sources: Creation and Destruction-数据对象和数据源的创建和销毁
在数据对象和数据源中解释过,数据对象和数据源表示数据传输的两方。本文解释什么时候创建和销毁这些对象和源的来适当的执行你的数据传输。包括: 1.创建数据对象 2.销毁对数对象 3.创建数据源 4.销毁数据源 创建数据对象 数据对象被目标应用程序使用-可以是客户或服务端。目标程序中的一个数据对象是一个源应用程序 和目标程序之间的连接的端。一个目标程序汇总的数据对象被用来与数据源的数据进行交互原创 2005-07-10 15:29:00 · 1472 阅读 · 0 评论 -
数据对象和数据源(OLE)
当你执行数据传递时,不管是使用粘贴板还是使用拖放,数据都有源和目标。一个应用程序 提供为复制数据并另外一个程序接受他的粘贴。数据传输的每边都需要在相同的数据上执行 不同的操作。微软基本类库(MFC)提供两个类来表达数据传诵的每边:1 数据源(实现为COleDataSource对象)表示数据传输的源。他们在数据被复制到粘贴板或 数据通过拖放提供时被源应用程序创建。 数据对象(实现为COleD原创 2005-07-10 14:35:00 · 1960 阅读 · 0 评论 -
Drag and Drop(OLE)-OLE的拖放功能
OLE的Drag and Drop特性是复制和粘贴的快捷方式。当你使用粘贴板来复制和粘贴数据,必须按照一定的步骤进行。你选择一个数据,从编辑菜单中点击见剪切或复制项,然后移动到目标文件、或窗口或应用程序,将光标放到指定的位置,然后单击粘贴菜单。 OLE的Drag and Drop与文件管理器的拖放机制不同,文件管理器中仅仅能处理文件名和传递一到多个文件名给一个支持的应用程序。OLE原创 2005-07-10 12:37:00 · 1978 阅读 · 0 评论 -
Implementing a Drop Target-实现Drop目标
本文概述了如何使你的应用程序成为一个Drop目标。实现一个Drop目标比实现drop源要多做一些 工作,但仍然比较简单。这些技术也可以应用到非OLE应用程序。 实现一个Drop对象: 1.为应用程序的每个你想成为Drop目标的视图添加一个成员变量。这个成员变量必须是 COleDropTarget类或从他继承的。 2.在你的视图类处理WM_CREATE信息(典型的OnCreate)函数中调用新成员变原创 2005-07-10 21:18:00 · 1509 阅读 · 0 评论 -
Drag and Drop: Customizing-自定义拖放
拖放的默认实现是对大多数应用程序来说足够了,然而,许多应用程序要求这些标准改变这些标准的行为。本文将介绍怎么改变这些默认的步骤。另外,你可以使用这个技术来建立不支持符合文档作为Drop源的应用程序。 如果你正在自定义OLE拖放行为或者你已经有了一个非OLE应用程序,你必须创建一个COleDataSource对象来包含数据。当用户开始启动一个拖放操作的时候,你的代码应该在该对象调用原创 2005-07-10 14:29:00 · 1654 阅读 · 0 评论 -
COleDropTarget
一个COLEDragTarget对象提供窗口和OLE库之间的通讯机制。创建一个该类的对象可以使一个窗口接受OLE拖放机制传送的数据。为了使一个窗口可以接受Drop命令,你应该创建一个COleDropTarget对象,然后调用它的Register函数,使用当前窗口句柄作为参数。详细信息参见MSDN的Drag and Drop(OLE)部分。原创 2005-07-10 12:08:00 · 2746 阅读 · 0 评论 -
CComModule类
该类是一个COM服务器模块,允许一个客户端访问当前模块的组件。CComModule支持DLL和EXE模块。备注:Windows CE的ATL并不支持下面标准ATL的CComModule类方法:CComModule::RegisterClassObjectsCComModule::RevokeClassObjects一个CComModule实例使用一个对象映射来维护一系列类的定义。这个对象映射实现为原创 2005-07-26 10:36:00 · 8898 阅读 · 3 评论 -
怎么样使用VC的TRACE宏
TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消息了,从而帮助你调式也在RELEASE的时候减少代码量。使用非常简单,格式如下:TRACE("DDDDDDDDDDD");TRACE("wewe%d",333);同样还存在TRACE0,TRACE1,TRACE2。。。分别对应0,1,2。。个参数TR原创 2005-07-29 13:33:00 · 6295 阅读 · 0 评论 -
多线程WIN32程序如何检查死锁(三)-使用Petri网络来表示多线程应用程序
根据1993版的《计算机百科全数》,Carl Adam Petri一个在德国波恩为Gesellschaft fuer Mathematik und Datenverarbeitung工作,我花了很长时间猜测为什么他的理论并没有引起当时学术和工商界的本来应得的注意。Petri网络早在19世纪70年代就已经深入的研究过,以我浅见,他们提供了一个分析和研究并发系统优秀的架构,对于Petri网络的最好的和原创 2005-09-20 14:00:00 · 2849 阅读 · 0 评论