初学Windows,有些概念不清,请大家指教,我下面的理解对不对?有的程序先是注册窗口类,然后建立窗口作为程序的界面,而有的程序干脆用一个模态对话框作为程序界面。省去了注册窗口类和创建窗口的过程。这两种情况除了一些小的差别以外,比如你用对话框作为程序界面的话,你得先在资源中创建一个对话框,好象对话框是不能用CreateWindowEx创建出来的对吧?另外,对话框默认背景颜色是灰的。模态对话框是由系统为它建立一个消息循环,不用用户自己费心去建立消息循环了。除了这些小的差别以外,我觉得最大的差别在于:用普通的窗口作为界面,一切事情都可以自己来做,你想往窗口中写入一些东西,对不起,不能写入就不管了,还得在WM_PAINT中负责刷新,以防止被其他窗口覆盖后内容消失。但是,这同时也带来了一些好处:就是可以实现任意的功能,比如你可以在窗口中拖动一个位图,你自己负责刷新它。但是对话框好象就不是这样,对话框是无法处理WM_PAINT消息的,是吗?对话框中显示的内容,全都是控件,哪怕是一个线条,而控件就是一个窗口,所以对话框中显示的任何内容都是子窗口(而不象普通窗口那样可以显示任意内容而不一定非要是子窗口)。那么谁来负责刷新呢?比如被别的窗口覆盖过了,谁来负责恢复它的内容?这也不是对话框管理器负责的。而是各个控件自己负责的,每个控件都是一个窗口,有自己的窗口消息处理程序,它们负责恢复、刷新和维持控件的显示。对话框中显示内容是无法使用象TextOut这样的函数的,因为虽然可以写,但你却无法维持住写的内容。虽然它有时候显得很方便,比如你在资源的对话框中设置一个线条,它就一直在那里,不需要你维护它。但是它也带来了一些不便:比如你想拖动一个位图,就办不到了。总之,对话框和普通窗口比起来,操作起来更方便,但功能没有普通窗口强大,而是有种种限制。我的理解对吗?

解决方案 »

  1.   

    对话框中也可以用TextOut啊,但是要在WM_PAINT中应用
      

  2.   

    对话框也可以处理WM_PAINT消息?
      

  3.   

    所有的窗口都可以处理WM_PAINT消息的。
      

  4.   

    但是对话框好象就不是这样,对话框是无法处理WM_PAINT消息的,是吗?对话框中显示的内容,全都是控件,哪怕是一个线条,而控件就是一个窗口,所以对话框中显示的任何内容都是子窗口(而不象普通窗口那样可以显示任意内容而不一定非要是子窗口)。那么谁来负责刷新呢?比如被别的窗口覆盖过了,谁来负责恢复它的内容?这也不是对话框管理器负责的。而是各个控件自己负责的,每个控件都是一个窗口,有自己的窗口消息处理程序,它们负责恢复、刷新和维持控件的显示。对话框中显示内容是无法使用象TextOut这样的函数的,因为虽然可以写,但你却无法维持住写的内容。虽然它有时候显得很方便,比如你在资源的对话框中设置一个线条,它就一直在那里,不需要你维护它。但是它也带来了一些不便:比如你想拖动一个位图,就办不到了。
    ============
    你的想法不对,对话框和普通窗口差别并不是很大,它也有窗口类,只不过系统已经注册好了,普通窗口上也可以放控件
    对话框上同样也可以用WM_PAINT消息,你完全可以不用控件显示内容,就直接显示在对话框也可以。
      

  5.   

    哦!多谢指正。普通窗口上可以放控件我是知道的,《windows程序设计》中也讲到了。
      

  6.   

    《windows程序设计》提到过在对话框上绘图。