《Programming Windows》的原文摘录

  • KillTimer函数会清除消息队列中任何没有被处理的WM_TIMER消息 (查看原文)
    邻家の打工人 2012-05-14 11:01:53
    —— 引自第264页
  • Remarks The KillTimer function does not remove WM_TIMER messages already posted to the message queue. (查看原文)
    邻家の打工人 2012-05-14 11:01:53
    —— 引自第264页
  • windows程序开始执行之后,windows为该程序创建一个“消息队列”,这个消息队列用来存放该程序可能创建的各种不同窗口的消息。程序中有一小段代码,叫做“消息循环”,用来从队列中取出消息,并且将它们发送给相应的窗口过程。有些消息直接发送给窗口过程,不用放入消息队列中。 (查看原文)
    [已注销] 2013-04-06 17:38:37
    —— 引自第39页
  • 一个多线程程序,最好的体系结构是主线程创建程序中的所有窗口,以及所有的窗口过程,并处理所有的窗口消息。其他线程完成后台工作或者长作业。 (查看原文)
    [已注销] 2013-04-06 17:38:37
    —— 引自第39页
  • windows应用程序不捕获BIOS中断,相反,windows本身处理硬件中断,这样应用程序就不必进行处理。对于目前拥有计时器的每个程序,windows保存一个每次硬件计时器滴答减少的计数。当这个计数减到0时,windows在适当的应用程序消息队列中放置一个WM_TIMER消息,并将计数重新置为其最初的值。 (查看原文)
    [已注销] 2013-04-06 17:44:49
    —— 引自第304页
  • 实际上,线程调用sleep函数来自愿地挂起自己,仅有的一个参数是以ms计的时间。sleep函数调用不会返回,直到指定的时间过去为止。在这段时间内,线程被挂起,并不会被分配给时间片(尽管该线程显然仍然要求在时钟滴答时给予一小段的处理时间,因为系统必须确定线程是否应该重新开始执行。)给sleep一个值为0的参数将导致线程交回它尚未使用完的时间片。 (查看原文)
    [已注销] 2013-04-06 17:44:49
    —— 引自第304页
  • 对于程序员来说,操作系统的功能完全由API来定义。API涵盖了应用程序所能调用的全部操作系统函数,以及相关数据类型和结构。 由于java,MFC,VB,Delphi那样简便的开发环境的流行,直接调用API不是那么常见了。显而易见,究竟用哪种方式编写windows程序最好,其实并无一定之规。但是无论你采用何种编程工具,了解windows API从而理解windows的工作机制,本身就很有重要的意义。windows非常复杂,在API之上加一层抽象并不能消除其复杂性。最多就是把复杂性隐藏起来了,这些复杂性很可能某天就蹦出来拖你后腿了。 (查看原文)
    koo 2013-06-16 10:55:02
    —— 引自第36页
  • 在基本的windows API之上的任何软件或多或少都会限制使用windows的全部功能,有些时候不得不用API,windows程序员的活动空间完全由API来规范,没有什么其他方式比直接调用API更有效灵活多样了。 (查看原文)
    koo 2013-06-16 10:55:02
    —— 引自第36页
  • platform SDK是windows编程最基本最核心的部分 具体MSDN文档查看官网 MSDN library online (查看原文)
    koo 2013-06-16 10:55:02
    —— 引自第36页
  • 当windows程序开始执行时,windows首先会为该程序创建一个“消息队列”。该消息队列存放着应用程序可能创建的所有窗口消息。windows应用程序中一般都包含一小段为“消息循环”的代码,该段代码用于从消息队列中检索消息,并将其分发给相应的窗口过程(窗口回调函数)。其他消息则不经过消息队列直接发送给窗口过程。 (查看原文)
    koo 2013-06-16 11:11:56
    —— 引自第62页
  • 客户区是一块应用程序可以自由绘图并向用户传达可视输出的区域。 (查看原文)
    koo 2013-06-16 11:11:56
    —— 引自第62页
  • 真正有意义的东西发生在窗口过程中,正是窗口过程决定了窗口客户区的显示内容以及窗口如何对用户的输入做出响应。 应用程序通常不对窗口过程直接调用。窗口过程几乎总是由windows自身调用的。应用程序如果希望调用自身的窗口过程,可以使用SendMessage。 (查看原文)
    koo 2013-06-16 11:11:56
    —— 引自第62页
  • 在windows中,窗口所发生的一切都通过消息的形式传递给窗口过程。 队列消息是指那些由windows放入程序的消息队列中的消息。在程序的消息循环中,消息被检索,然后投递到窗口过程中。非队列消息则是由windows窗口过程的直接调用产生的。队列消息主要由用户的输入产生,主要形式为按键信息。非队列消息包括队列消息以外的其他所有信息。通常由调用特定的windows函数引起。 从窗口过程的视角看,这些消息以有序,同步的方式来到的。在窗口过程处理某消息的过程中,程序不会被其他的消息突然中断。 虽然windows可以执行多线程。但是每个线程的消息队列仅为那些其窗口过程在该线程内执行的窗口进行消息处理,换而言之,消息循环和窗口过程不是并发运行。 窗口过程可以调用为其发送其他消息的函数。这种情况下,在该函数调用返回之前,窗口过程必须将第二个消息处理完毕,此时窗口过程才处理前一条消息。 (查看原文)
    koo 2013-06-16 11:11:56
    —— 引自第62页
  • 在windows中,程序只能在自己的窗口的客户区中显示文本和图形。 (查看原文)
    koo 2013-06-16 11:42:49
    —— 引自第98页
  • 与特定的显示设备相关联。实际上是GDI内部维护的一个数据结构。程序在绘制前必须获取一个设备环境句柄。 (查看原文)
    koo 2013-06-16 11:42:49
    —— 引自第98页
  • GDI的主要目的就是支持与设备无关的图形。windows程序应当毫无问题地在windows所支持的任何图形设备上输出。GDI提供了一些特殊的机制来彻底隔离应用程序和不同输出设备的特性。 (查看原文)
    koo 2013-06-16 11:49:14
    —— 引自第171页
  • 图形输出设备分为两大类:光栅设备和矢量设备。大多数的PC输出设备是光栅设备,这也就意味着它们将图像表示成以点的形式构成的矩阵。该类输出设备有视频显示适配器,点阵打印机,激光打印机。矢量设备则使用线条来绘制图像。 GDI总体来说只是一个静态显示系统,对动画的支持很有限。如果是复杂动画,就用DirectX。 (查看原文)
    koo 2013-06-16 11:49:14
    —— 引自第171页
  • 1.线条和曲线--------GDI支持直线,矩形,椭圆等 2.可被填充的封闭区域----------当一系列线条构成封闭区域时,可以使用画刷填充这个区域。 3.位图-------是一个二维的位数组,每个元素都对应显示设备上的一个像素 4.文本 (查看原文)
    koo 2013-06-16 11:49:14
    —— 引自第171页
  • 映射模式和转换。图元文件是一个以二进制形式存储的GDI命令集合 设备环境包含了许多决定GDI函数如何工作的属性。这些属性使得GDI只需要提供少量参数(如起始坐标),而不需要提供windows在设备上显示对象时需要的所有信息。 (查看原文)
    koo 2013-06-16 11:49:14
    —— 引自第171页
  • 程序没必要去接收处理每一个键盘消息。windows自己已经实现了许多键盘消息处理功能。 对话框也有键盘接口,但是程序不必在对话框活跃的时候去监视键盘。 (查看原文)
    koo 2013-06-16 12:07:31
    —— 引自第220页
<前页 1 2 3 后页>