windows编程 基本框架

 Author hjjdebug
Date   2009-3-21 07:58上午
; ---------------------------------------------------------------------------
该贴叫什么题目呢?
windows 编程最基础问题? 俗了一点。
消息的一生? 好像也没有侧重于消息产生,传递和消耗这条线。
windows编程 基本框架? 就叫这个名字吧,还是俗了一点。

此贴来阐述窗口,窗口函数,消息, 消息循环,类,线程及window 内核的感念。
澄清一些容易混淆的概念。不过由于窗口编程阅历不深,谬误之处敬请指正。

问1: 类和窗口是什么关系。
答1: 窗口是类的一个实例,窗口是属于某个类的。一个类可以创造出很多的实例。
      也就是说一个类可以创造出很多的窗口。

问2:每个窗口都有窗口过程函数吗?
答2:是的。但是多个窗口可以共用一个窗口过程函数。一个窗口类是和一个窗口过程函数
    对应的。窗口过程函数是消息的消费者。
            
问3: 窗口和窗口函数的关系。
答3: (先参考2)
      每个窗口都对应一个窗口函数。但是,窗口函数不属于窗口,它是属于类的,多个窗口可以
      对应同一个窗口函数。不同的窗口,由handle window 来区分。
      窗口是我们视觉上看到的一个四四方方的图形。
      窗口函数是消息的消费者。是动作的响应者。      
      
注意点:容易认为窗口函数是属于窗口的,实际是属于类的。
      
问4: 线程和类的关系
答4: 线程和类其实没有关系。 线程是cpu 调度执行的一段程序。在执行这段程序时
      或者说线程执行时,可能创建了新类,也可能不创建类。      
      

问5:消息队列是谁创建的。
答5   消息队列是由windows 创建的,它偷偷的创建,默默的维护着消息队列。
      当你创建一个线程时,它就为你创建了一个消息队列。
 
问6: 消息队列是属于线程的,还是属于类的,还是属于窗口的?     
答6: 先参考问5,消息队列是属于线程的,windows 为每个线程维护一个消息队列,
      每个线程只能有一个消息循环泵,不断的从自己的消息队列中取得消息,去高兴的向不同的窗口
      派发消息。 但消息是属于窗口的,消息由窗口过程函数处理。
      
注意点:人们容易忽略消息队列到底属于谁。它属于线程,是线程的一个属性。      
          
问7:线程,主窗口,子窗口的关系。     
答7: 一个线程,可以不创建窗口,也可以创建多个窗口。但只能创建一个主窗口,
      主窗口可以创建多个子窗口。windows 内核负责维护这个父子窗口关系表。
      各个线程之间也有父子关系,也由windows 维护(这是题外话)。主窗口和线程的关系是
      单一对应关系,每个主窗口,都由某个线程创建,每个线程,最多只创建一个主窗口。
      
问8:消息和窗口是什么关系?消息队列和窗口是什么关系?
答8:消息是属于窗口的,或者说是需要具体某个窗口处理的,发送消息需要指明窗口句柄。
     消息队列是一系列消息,它是对应多个窗口的消息列表。windows为每个线程维护一个消息队列

    
问9:sendmessage 和 postmessage 的区别
答9  sendmessage 并没有发往消息队列, 而是直接调用的窗口过程函数,
        确切说,是通过windows 内核红娘间接调用的窗口过程函数。为什么要红娘,因为你可能访问不了
        对方的窗口函数。 当然,如果目标窗口就是自己,那就不用红娘了。
     postmessage 会将消息发往消息队列而直接返回。消息队列就只能等某个线程的getmessag 来
        取走,然后由该线程消息泵来派发。        由于post message 是发往线程的消息队列,
        所以,windows 需要依据传来的窗口句柄查找其对应的线程。所以规定这个窗口一定要是主窗口,
        以方便window管理。

你可能感兴趣的:(windows编程 基本框架)