2007年07月
以前已经介绍过直接点击关闭按钮来关闭应用程序,但想删除一个窗口对象,需要用到什么函数的呢?比如创建了30个窗口,想把第12个窗口关闭删除掉,那就需要使用函数DestroyWindow。阅读全文>
发表于 @ 2007年07月31日 08:10:00|评论(loading...)|编辑
上一次介绍了怎么样显示对话框的函数,那么怎么样关闭对话框呢?这就需要使用到函数EndDialog。阅读全文>
发表于 @ 2007年07月30日 08:34:00|评论(loading...)|编辑
在LCC里使用代码表来表示代码块,前端把所有代码属性放到代码表里,后端根据代码表来生成代码,它的结构如下:阅读全文>
发表于 @ 2007年07月27日 23:10:00|评论(loading...)|编辑
对话框是比较常用的窗口,比如当你想让用户输入一些参数时就可以使用对话框。或者提示一些警告的信息,都是可以使用对话框的。比如当你拷贝文件时,Windows就会提示一个拷贝文件的进度对话框。阅读全文>
发表于 @ 2007年07月27日 08:41:00|评论(loading...)|编辑
当人们使用软件时,大多数是想看到自己所需要的结果,比如玩RPG游戏,就是想看到自己所操作的主角做各种各样的事情阅读全文>
发表于 @ 2007年07月26日 08:38:00|评论(loading...)|编辑
自然界面里,各种生物都是有其生命周期的。程序也是有其生命周期的,创建时就是它出生了,当它运行工作中就是成年期,最后少不了要死亡的,那么程序的死亡是怎么样出现的呢?阅读全文>
发表于 @ 2007年07月25日 08:27:00|评论(loading...)|编辑
前面已经介绍从系统队列里获取一条消息,然后经过快捷键的函数检查,又通过字符消息函数的转换,最后要做的事情就是调用DispatchMessage函数,它的意思就是说要把这条消息发送到窗口里的消息处理函数WindowProc。阅读全文>
发表于 @ 2007年07月24日 08:38:00|评论(loading...)|编辑
TranslateMessage是用来把虚拟键消息转换为字符消息。由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。阅读全文>
发表于 @ 2007年07月23日 08:41:00|评论(loading...)|编辑
下面详细地注释了gen.c的源程序,这样看起来就比较容易理解,希望对你有所帮助。阅读全文>
发表于 @ 2007年07月22日 17:18:00|评论(loading...)|编辑
当应用程序运行时,用户按下快捷键,这样就产生了一个按键消息,那么Windows是怎么样把它转化为快捷键响应的消息呢?这就需要使用TranslateAccelerator函数。TranslateAccelerator函数主要的作用就是把消息跟快捷键表里定义的按键进行比较,如果发现有快捷键,就会把这个按键消息转换为WM_COMMAND或者WM_SYSCOMMAND消息给窗口的消息处理函数发送过去。阅读全文>
发表于 @ 2007年07月21日 08:30:00|评论(loading...)|编辑
LCC为了生成不同机器的目标代码,它提供了一个接口给后端的代码生成,以便可以只修改后端,就可以达到生成不同的机器代码。阅读全文>
发表于 @ 2007年07月20日 21:00:00|评论(loading...)|编辑
应用程序为了获取源源不断的消息,就需要调用函数GetMessage来实现,因为所有在窗口上的输入消息,都会放到应用程序的消息队列里,然后再发送给窗口回调函数处理。阅读全文>
发表于 @ 2007年07月20日 08:51:00|评论(loading...)|编辑
当用户使用软件时,往往有些功能是最常用的功能。作为开发人员,就需要让用户感觉到这个软件好用,这样就需要把他们最常用的功能用起来最方便,最快捷,能提高生产效率。在这方面,微软是做到家了,比如在键盘上有一个Windows键,Windows很多功能都可以通过这个键与其它键来组合成快捷键,提高使用的方便性。现在就来介绍一下怎么样让你的程序也方便使用,就是使用快捷键。阅读全文>
发表于 @ 2007年07月19日 08:41:00|评论(loading...)|编辑
在Windows操作系统里,当窗口显示之后,它就可以接收到系统源源不断地发过来的消息,然后窗口就需要处理这些消息,因此就需要一个函数来处理这些消息。在API里定义了一个函数为回调函数,当系统需要向窗口发送消息时,就会调用窗口给出的回调函数WindowProc,如果WindowProc函数不处理这个消息,就可以把它转向DefWindowProc函数来处理,这是系统的默认消息处理函数。当你按下菜单,或者点击窗口时,窗口需要运行这个消息处理函数。阅读全文>
发表于 @ 2007年07月17日 08:52:00|评论(loading...)|编辑
上次已经说明了怎么样选择合适的指令,现在就来介绍生成最终的代码,如下:
#010 mov dword [ebp + -12], 1
其实生成上面的代码是通过后面的语句来构造出来的,它的过程如下:
ASGNI4(ADDRLP4(nTest1), CNSTI4(1))
stmt: ASGNI4(addr,rc) / mov dword %0, %1
addr: base / [%0]
base: ADDRLP4 / ebp + %a
rc: con / %0
con: CNSTI4 / %a阅读全文>
发表于 @ 2007年07月16日 21:41:00|评论(loading...)|编辑
UpdateWindow函数是更新窗口的客户区,主要通过发送WM_PAINT消息来实现的。阅读全文>
发表于 @ 2007年07月16日 08:49:00|评论(loading...)|编辑
在LCC编译器里,先把下面的语句翻译成中间表示,
int nTest1 = 1;
其中间表示的树如下:
ASGNI4(ADDRLP4(nTest1), CNSTI4(1))
然后根据上述的中间表示进行指令模式匹配。阅读全文>
发表于 @ 2007年07月14日 19:29:00|评论(loading...)|编辑
ShowWindow的API函数是显示窗口,但它在第一次调用和以后的调用是有区别的。第一次调用时,它的输入参数nCmdShow是需要输入WinMain函数里传入来的nCmdShow参数,而不能是其它参数。阅读全文>
发表于 @ 2007年07月14日 08:53:00|评论(loading...)|编辑
一个窗口要显示,先要把它创建出来。那就需要调用API函数CreateWindow了,所以在注册窗口后的第二步,就需要调用创建窗口函数。阅读全文>
发表于 @ 2007年07月13日 09:20:00|评论(loading...)|编辑
为了可以创建自己的窗口,就需要向Windows操作系统注册窗口类型,以便后面创建窗口时调用。当然,如果使用Windows预先注册的窗口是不需要注册的。
阅读全文>
发表于 @ 2007年07月12日 09:23:00|评论(loading...)|编辑
像下面的语句:
int nTest1 = 1;
选择什么样的汇编指令生成的呢?又是怎么样去选择指令的呢?在本例子里,LCC是选择下面的指令生成的:
#010 mov dword [ebp + -12], 1阅读全文>
发表于 @ 2007年07月11日 19:57:00|评论(loading...)|编辑
当寄存器分配完了,但又有一些指令需要寄存器,那么就需要把占用寄存器的值保存到内存里,才可以重新分配那些寄存器。下面就来分析LCC的寄存溢出算法。
spillee是用来计算那个寄存器最好保存到内存里,然后重新使用的。阅读全文>
发表于 @ 2007年07月09日 21:30:00|评论(loading...)|编辑
为了显示提示信息给用户,Windows是提供了一个非常方便的API函数MessageBox给用户使用,使用这个API函数可以显示简单的文字信息出来,提醒或提示用户进行下一步操作。阅读全文>
发表于 @ 2007年07月09日 13:10:00|评论(loading...)|编辑
分配一个寄存器的函数是ralloc,它会调用getreg函数来获取一个寄存器。下面先来分析函数ralloc的代码,阅读全文>
发表于 @ 2007年07月06日 21:17:00|评论(loading...)|编辑
下面再接着练习使用命令行参数,先在VC2005调试设置里设置输入参数阅读全文>
发表于 @ 2007年07月06日 12:41:00|评论(loading...)|编辑
在代码生成的函数gencode里,需要产生寄存器给临时变量使用。下面就来分析这段代码,阅读全文>
发表于 @ 2007年07月04日 21:16:00|评论(loading...)|编辑
前面已经说到要分配寄存器,下面就来分析寄存器分配的函数askreg。阅读全文>
发表于 @ 2007年07月03日 21:37:00|评论(loading...)|编辑
从上面这段程序就可以看到,_tWinMain是应用程序的入口函数,这里是使用它的宏,定义在tchar.h头文件里,为什么要这样作宏定义的呢?由于Windows的应用程序要适应UNICODE和以前单字符的应用程序,由于Windows这两个API的定义是不一样的,如下:阅读全文>
发表于 @ 2007年07月03日 16:06:00|评论(loading...)|编辑
要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们。现在就来编写一个最简单的Windows应用程序,让它提示一行文字给我们看到,这就是简单的目标。阅读全文>
发表于 @ 2007年07月02日 14:47:00|评论(loading...)|编辑
在LCC里是使用非常简单的寄存器分配算法,并且局限于森林里的临时变量的分配。下面就来分析寄存器分配的代码:阅读全文>
发表于 @ 2007年07月01日 12:49:00|评论(loading...)|编辑