首页
社区
课程
招聘
[原创]WIN32编程学习连载(不断更新)
发表于: 2009-4-5 08:39 18915

[原创]WIN32编程学习连载(不断更新)

2009-4-5 08:39
18915
前言:
奔三的时候开始学win32编程.为了生活,嘎嘎。。。。

废话少说,我的学习安排是:win32程序设计(老外经典的那个)->罗云彬的win32汇编->然后工具使用->具体写外挂.
俺有Linux C的一些开发经验,王爽汇编已经看过了.
补充:下面有朋友问我是那两本书(Charles Petzold著的《Windows程序设计》(以VC来讲解)。另一本是罗云彬著的《Windows环境下32位汇编语言程序设计》)

下面留下我学习的脚印.

4-5:
________________________________________________________________
工具不能少,安装VC6,不过那个创天的VC6建议大家别安装,老是编译的时候死机,无奈换了个。
MSDN不能少啊,要不怎么叫学windows编程呢.这些东西通过迅雷都能找到.咱中国人就是多,好多人乐于奉献,什么精简版本都有,哈哈.

Windows运作机制的核心是一个称作「动态链接」的概念。Windows提供了应用程序丰富的可呼叫函数,大多数用于实作其使用者接口和在视讯显示器上显示文字和图形。这些函数采用动态链接库(Dynamic Linking Library,DLL)的方式撰写。这些动态链接库是些具有.DLL或者有时是.EXE扩展名的文件,在Windows 98中通常位于\WINDOWS\SYSTEM子目录中,在Windows NT中通常位于\WINNT\SYSTEM和\WINNT\SYSTEM32子目录中。

在早期,Windows的主要部分仅通过三个动态链接库实作。这代表了Windows的三个主要子系统,它们被称作Kernel、User和GDI。当子系统的数目在Windows最近版本中增多时,大多数典型的Windows程序产生的函数呼叫仍对应到这三个模块之一。Kernel(日前由16位的KRNL386.EXE和32位的KERNEL32.DLL实现)处理所有在传统上由操作系统核心处理的事务-内存管理、文件I/O和多任务管理。User(由16位的USER.EXE和32位的USER32.DLL实作)指使用者接口,实作所有窗口运作机制。GDI(由16位的GDI.EXE和32位的GDI32.DLL实作)是一个图形设备接口,允许程序在屏幕和打印机上显示文字和图形。

上面这话可要记住啊

然后写了一下书上的第一个程序,简单熟悉了一下VC.

Unicode部分介绍了一下宽字符问题,这个也需要明白怎么回事

窗口和消息部分介绍了win的消息机制,这个一定要看明白消息怎么运作,不然后面的都死翘翘了.我来用我的文字阐述一下对这部分的理解。用户键盘鼠标等操作会产生消息,windows本身有个消息队列。咱们写的程序里面有个读取win消息队列的循环交给自己写的消息处理函数,在消息处理函数里面定义了的消息根据我们自己的处理方式处理,没有定义的消息全部扔给win默认的消息处理函数,我们就不用管了.那个窗口的例程大家一定要理解,窗口类别和窗口的关系,为类别设置消息处理函数,这些都是基本的基本,起码要理解,有点熟悉先。

4-6:输出文字
________________________________________________________________
哈哈,昨晚忙着看视频去了,现在才开始看书.
WM_PAINT消息什么情况下产生,书上列出来了。然后就是昨晚我没看明白的有效矩形和无效矩形的概念.啥叫无效矩形呢,现在我的理解就是之前被遮挡过的那部分叫做无效矩形,需要重汇。windows系统一般自动保存了一个PAINTSTRUCT 结构,这个结构代表的就是需要重汇的无效矩形区域."hdc参数是「设备内容句柄」,它是GDI的重要部分。实际上,每个GDI函数都需要将这个句柄作为函数的第一个参数。"这个话要记住.这一章的实例主要是拿滚动条说事.对竖的滚动条会产生 WM_VSCROLL消息,具体这个消息的细节可以通过LOWORD (wParam)得到然后做相应的处理。这里我想说两个问题,一定要打开VC6调试调试代码,增加动手能力。另一个问题就是,很多细节我也没记住或者没完全明白,但是整体了解了整体意思也就跳过了。我个人感觉应该如此.

4-9:图形基础
____________________________________________________________________
(关于字体分成几个部分的那个图和解释,我没看懂,没时间追究了跳过跳过,以后有实际需要再研究)

组成GDI的几百个函数呼叫可以分为几大类:取得(或者建立)和释放(或者清除)设备内容的函数 ;取得有关设备内容信息的函数;绘图函数;设定和取得设备内容参数的函数;使用GDI对象的函数.

取得设备内容句柄的几种方法:
hdc = BeginPaint (hwnd, &ps) ;     
其它行程序        
EndPaint (hwnd, &ps) ;

hdc = GetDC (hwnd) ;     
其它行程序      
ReleaseDC (hwnd, hdc) ;

hdc = GetWindowDC (hwnd) ;     
其它行程序      
ReleaseDC (hwnd, hdc) ;

hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ;      
其它行程序      
DeleteDC (hdc) ;

取得设备内容信息:iValue = GetDeviceCaps (hdc, iIndex) ;

这里差句题外话,如果是初学的人要注意多看看.H的头文件,从里面你会能解决很多问题。

引用一句话“在第一章,我们谈论过Windows图形设备接口将图形输出设备的设备驱动程序与计算机连在一起的方式。在理论上,只要提供SetPixel和GetPixel函数,就可以使用图形设备驱动程序绘制一切东西了。其余的一切都可以使用GDI模块中实作的更高阶的例程来处理。例如,画线时,只需GDI呼叫SetPixel数次,并适当地调整x和y坐标。”这话的含义我认为说明了屏幕显示都是由像素点组成,只要一个一个像素去控制显示,就能控制显示的一切.画笔是用来填线,画刷天封闭的几何图形.

窗口原点、视端口原点、窗口范围和视端口范围-与映像方式密切相关。在TextOut中,以及在几乎所有GDI函数中,这些坐标值使用的都是一种「逻辑单位」。Windows必须将逻辑单位转换为「设备单位」,即图素。这种转换是由映像方式、窗口和视端口的原点以及窗口和视端口的范围所控制的。映像方式还指示着x轴和y轴的方向(orientation);也就是说,它确定了当您在向显示器的左或者右移动时x的值是增大还是减小,以及在上下移动时y的值是增大还是减小。

此章的最后部分讲解了两个图形有部分交集的时候怎么处理。我也只是稍微看了看。因为我觉得win32学习的话.关键是熟悉熟悉,心中有个大概框架,不必每个细节弄的很通很透。这样会打击你的自信。过了一段时间你也还是忘记。实际上我认为熟悉了框架,最重要的是你知道有这么个东西。但你有实际要写的东西的时候,你要知道去找什么资料。我觉得也就差不多了.

4-15:键盘
____________________________________________________________________
有些应用程序可能有多个窗口,键盘必须由该应用程序内的所有窗口共享。程序用来从消息队列中检索消息的MSG结构包括hwnd字段。此字段指出接收消息的窗口控件码。消息循环中的DispatchMessage函数向窗口消息处理程序发送该消息,此窗口消息处理程序与需要消息的窗口相联系。在按下键盘上的键时,只有一个窗口消息处理程序接收键盘消息,并且此消息包括接收消息的窗口控件码。应用程序从Windows接收的关于键盘事件的消息可以分为按键和字符两类.wParam消息参数含有的虚拟键码,而lParam消息参数则含有对了解按键非常有用的其它信.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (47)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵,先留个名分,支持一下。看看再说
2009-4-5 17:41
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哇最近 置顶很是牛呀  支持下
2009-4-5 20:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
强帖留名
====填充字数=====
2009-4-5 20:22
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
压力啊,置顶。。。。。

看作论坛的鼓励,也是一种责任
2009-4-5 20:25
0
雪    币: 239
活跃值: (159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我曾经尝试着在大一就学汇编,
结果看了两眼,看不下去了,过于晦涩。不懂
大二,继续学习,
看了其中基础的部分,因为学了计算机组成原理和硬件基础,
大三,再看,发现没什么理解上的困难。基本知识都已经懂得,学习了C++,操作系统,嵌入式,单片机等。!
2009-4-5 20:31
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
傻时候再能更新?
2009-4-5 22:05
0
雪    币: 89
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好期待。。。
2009-4-5 22:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
哎呀我也开始学啦!
2009-4-6 00:34
0
雪    币: 339
活跃值: (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
10
感觉像笔记,能不能说说“win32程序设计”具体是哪本书?
2009-4-6 08:58
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
Charles Petzold著的《Windows程序设计》(以VC来讲解)。另一本是罗云彬著的《Windows环境下32位汇编语言程序设计》,
2009-4-6 09:35
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
尽量跟着LZ的脚步走》

4.6
  看到窗口和消息这一节,但是编写的窗口,CPU占用100%,已经解决了,原来是一个句柄写错了。继续学习
4.7
   LZ比我快了,文字输出,还没看完呢
4.8  刚看到滚动条,继续努力
2009-4-6 10:17
0
雪    币: 6563
活跃值: (2399)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
支持!!UP
2009-4-6 11:03
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我也要努力学!
2009-4-6 21:46
0
雪    币: 148
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
不错.
先占个座位.
2009-4-6 22:36
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
[QUOTE=;]...[/QUOTE]
我大一自学汇编和windows编程,有困难不过坚持下也就通了
2009-4-7 13:10
0
雪    币: 461
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
==占个位置先==
2009-4-7 16:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我也开始学了,我的目标就是做外挂,但是我总是遇到很多程序的反调试,很头疼.
2009-4-8 22:29
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
LZ学得有点急了吧
2009-4-9 11:27
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
20
是慢了,,,,
2009-4-9 12:21
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
这还慢啊,我的速度还没他快,滚动条还没看完,他貌似是粗看啊
2009-4-9 12:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
顶一下。我最近学习windows程序设计
2009-4-9 13:05
0
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
顶,最近学到键盘那张,感觉挺老火的,眼睛都看花了
2009-4-9 13:13
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
对,版主还是版主,的确是慢了。因为我看了下win32汇编的某些内容,然后我自己开私服了,又要打理一下
2009-4-9 16:25
0
雪    币: 305
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
学习这东东像各人饮水,冷暖自知

还是保持自己的进度吧
2009-4-11 00:41
0
游客
登录 | 注册 方可回帖
返回
//