大家在运行程序时都是用Application.run(new form1())进入消息循环的吧,所以我一直认为run中有个消息循环,新的FORM1实例提供了消息处理函数。但是突然意识到一个问题,如果在FORM1中让FORM2显示即:form2 frm2 = new form2();frm2.show();本以为frm2无法收到消息,因为它并没有作为RUN的参数,但是FORM2却很好的处理了消息,所以RUN函数并不是用它的参数来决定消息的处理函数的,然后我又试了试这么写:form1 frm1 = new form1();Application.run();程序很好的运行了,而且在FORM1关闭后不退出,更加确信了我的论断。还有个有趣的现象:如果用frm1.showdialog();就不要Application.run();程序也能处理消息,更绝的是如果在form1让form2显示出来,form2也能处理消息,我觉得form::show()方法应该执行了什么特殊的操作,让窗体能够处理消息,请问的是.net到底是怎么处理消息的呢?
谢谢各位。

解决方案 »

  1.   

    Application中实现了消息循环,然后将消息投递到指定的窗口中,例如Form1、Form2,每个Form只需要实现消息的处理即可,不需要考虑消息循环本身是怎么回事。
      

  2.   

    这个问题不必深究,否则建立楼主好好看一下MFC的原理。
      

  3.   

    “Application中实现了消息循环,然后将消息投递到指定的窗口中”
    那Application是怎么知道有个form2呢?如果用frm1.showdialog();就不要Application.run();程序也能处理消息,是怎么回事呢?“这个问题不必深究,否则建立楼主好好看一下MFC的原理。”说个大概吧,尤其是Application是怎么知道有个form2的。
      

  4.   

    呵呵,消息为基础,事件为驱动,
    看看侯捷的<<深入浅出MFC>>