Windows API一日一练(19)DestroyWindow函数

以前已经介绍过直接点击关闭按钮来关闭应用程序,但想删除一个窗口对象,需要用到什么函数的呢?比如创建了30个窗口,想把第12个窗口关闭删除掉,那就需要使用函数DestroyWindow。当调用DestroyWindow函数后,操作系统就会进行一系列的删除动作,先发送WM_DESTROY消息,接着发送WM_NCDESTROY消息。如果这个窗口还有子窗口或者是其它窗口的所有者,就需要给所有子窗口发送删除...
阅读(12337) 评论(6)

Windows API一日一练(18)EndDialog函数

上一次介绍了怎么样显示对话框的函数,那么怎么样关闭对话框呢?这就需要使用到函数EndDialog。这个函数只能在对话框的消息处理函数里使用,并且这个函数调用之后,没有立即就删除对话框的,而是设置了操作系统里的结束标志。当操作系统查检到有这个标志时,就去删除对话框的消息循环,同时也去释放对话框占用的资源。其实对话框的生命周期是这样的,先由函数DialogBox创建对话框,这样函数DialogBox完...
阅读(12550) 评论(5)

LCC编译器的源程序分析(60)代码表的结构

在LCC里使用代码表来表示代码块,前端把所有代码属性放到代码表里,后端根据代码表来生成代码,它的结构如下:#001 //代码表结构定义.#002 //蔡军生 2007/07/27#003 struct code#004 {#005     //代码表的类型.#006     enum KindType#007     {#008          Blockbeg,...
阅读(3670) 评论(0)

Windows API一日一练(17)DialogBox和DialogBoxParam函数

对话框是比较常用的窗口,比如当你想让用户输入一些参数时就可以使用对话框。或者提示一些警告的信息,都是可以使用对话框的。比如当你拷贝文件时,Windows就会提示一个拷贝文件的进度对话框。对话框的使用范围比较广,并且它在设计时就可以看到运行的结果模样,这样方便设计。但对话框又分为两类,一种对话框运行后,一定要用户关闭那个对话框后才能返回到父窗口;一种对话框是不需要关闭后就可以直接返回父窗口。因此,软...
阅读(10105) 评论(8)

Windows API一日一练(16)BeginPaint和EndPaint函数

当人们使用软件时,大多数是想看到自己所需要的结果,比如玩RPG游戏,就是想看到自己所操作的主角做各种各样的事情。在2D的RPG游戏里,其实做的事情,就是不断地更新画面,也就是不断地显示BMP的图片。在普通的程序里,大多也是显示各种文本和图片的,但是有一种类型的应用程序是不怎么显示结果的,那就是服务程序。不管怎么样,只要我们想看到程序所执行后的结果,就需要在程序里显示出来。也就是需要调用BeginP...
阅读(7439) 评论(3)

Windows API一日一练(15)PostQuitMessage函数

自然界面里,各种生物都是有其生命周期的。程序也是有其生命周期的,创建时就是它出生了,当它运行工作中就是成年期,最后少不了要死亡的,那么程序的死亡是怎么样出现的呢?像以前介绍函数GetMessage里是使用一个循环不断地检测消息,周止复始的,是不可能出现死亡的,但它会检测到消息WM_QUIT就退出来。那现在问题是谁发送WM_QUIT消息出来呢?这就是PostQuitMessage函数所做的工作。当你...
阅读(10740) 评论(8)

Windows API一日一练(14)DispatchMessage函数

前面已经介绍从系统队列里获取一条消息,然后经过快捷键的函数检查,又通过字符消息函数的转换,最后要做的事情就是调用DispatchMessage函数,它的意思就是说要把这条消息发送到窗口里的消息处理函数WindowProc。 函数DispatchMessage声明如下:WINUSERAPILRESULTWINAPIDispatchMessageA(    __in CON...
阅读(8592) 评论(1)

Windows API一日一练(13)TranslateMessage函数

TranslateMessage是用来把虚拟键消息转换为字符消息。由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。TranslateMessage函数用于将虚拟键消息转换为字符消息。字符消息被投递到调用线程的消息队列中,当下一次调用GetMessage函数时被取出。当我们敲击键盘上的某个字符键时,系统将产生WM_KEYDOW...
阅读(11197) 评论(5)

LCC编译器的源程序分析(59)代码生成的源程序注释

下面详细地注释了gen.c的源程序,这样看起来就比较容易理解,希望对你有所帮助。#001 #include "c.h"#002 #003 static char rcsid[] = "$Id: gen.c 355 2007-02-18 22:08:49Z drh $";#004 #005 #define readsreg(p) /#006     (generic((p)-...
阅读(4241) 评论(0)

LCC编译器的源程序分析(58)后端使用的节点结构

 在LCC编译器后端,主要使用下面的节点结构来标识代码属性。#001 #002 //节点注释的扩展,主要是代码生成使用。#003 //#004 //蔡军生 2007/07/21 QQ: 9073204#005 //#006 typedef struct {#007     unsigned listed:1; //标记这是树的根节点。#008     unsig...
阅读(3426) 评论(0)

Windows API一日一练(12)TranslateAccelerator函数

 当应用程序运行时,用户按下快捷键,这样就产生了一个按键消息,那么Windows是怎么样把它转化为快捷键响应的消息呢?这就需要使用TranslateAccelerator函数。TranslateAccelerator函数主要的作用就是把消息跟快捷键表里定义的按键进行比较,如果发现有快捷键,就会把这个按键消息转换为WM_COMMAND或者WM_SYSCOMMAND消息给窗口的消息处理函数发送过去...
阅读(6223) 评论(1)

LCC编译器的源程序分析(57)不同目标代码生成的接口结构

LCC为了生成不同机器的目标代码,它提供了一个接口给后端的代码生成,以便可以只修改后端,就可以达到生成不同的机器代码。它的接口如下:#001 //后端代码生成接口,可以写生成不同的目标代码。#002 //#003 //蔡军生 2007/07/20 QQ: 9073204#004 //#005 typedef struct {#006     //对齐方式的最大字节。#0...
阅读(3443) 评论(0)

Windows API一日一练(11)GetMessage函数

应用程序为了获取源源不断的消息,就需要调用函数GetMessage来实现,因为所有在窗口上的输入消息,都会放到应用程序的消息队列里,然后再发送给窗口回调函数处理。函数GetMessage声明如下:WINUSERAPIBOOLWINAPIGetMessageA(    __out LPMSG lpMsg,    __in_opt HWND hWnd,    __in ...
阅读(5201) 评论(1)

Windows API一日一练(10)LoadAccelerators函数

当用户使用软件时,往往有些功能是最常用的功能。作为开发人员,就需要让用户感觉到这个软件好用,这样就需要把他们最常用的功能用起来最方便,最快捷,能提高生产效率。在这方面,微软是做到家了,比如在键盘上有一个Windows键,Windows很多功能都可以通过这个键与其它键来组合成快捷键,提高使用的方便性。现在就来介绍一下怎么样让你的程序也方便使用,就是使用快捷键。函数LoadAccelerators...
阅读(12124) 评论(3)

LCC编译器的源程序分析(56)寄存器分配的属性结构

现在详细地分析寄存器分配的属性结构,它的定义如下:#001 typedef struct {#002     Symbol vbl; //保存变量符号,而不是临时变量.#003     short set; //寄存器类型,比如整数,或者浮点数。#004     short number; //寄存器编号。#005     unsigned mask; //寄存器字节大小,比如...
阅读(3334) 评论(0)
32条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:5574814次
    • 积分:72912
    • 等级:
    • 排名:第25名
    • 原创:1584篇
    • 转载:61篇
    • 译文:11篇
    • 评论:2082条
    文章存档
    最新评论