VC里面源代码中所创建的各个类是不是对应着不同的窗口,一个类对应一个窗口,对吗?如果要窗口响应消息是不是就要在这个类里面进行消息映射?

解决方案 »

  1.   

    窗口的创建和类是没有关系的
    只是在为了便于操作的时候才需要为某类窗口创建一个类作为模板,提供统一的方法来操作这类窗口,因此 SDK 中不需要类也可以完成窗口的所有操作
    而类不仅仅是针对窗口的,任何一个有特征的对象(例如缓冲区、例如设备)都可以专门为之生成一个类来便于处理
    建议楼主先看看C++的基础,不要操之过急
      

  2.   

    class A
    {
    public:
      A() { a = 3; }
    private:
      int a;
    };
    上面是一个类,但是跟窗口毫无关系
      

  3.   

    CreateWindow(...)
    ShowWindow(...)

    这些函数可以操作窗口,但不一定要在一个类中使用
    你可以直接在 WinMain 函数中调用它们
      

  4.   

    那在再添加消息响应的时候,类向导为什么非要选择一个类才行呢,如果类没有对应窗口,是不是这个类就不能接受消息。
    //////////////////////////
    有些类没有窗口,照样可以接收消息
    比如CWinApp
      

  5.   

    VC里的类都是封装了API,API和窗口并不对应。你这样理解好了,API生成窗口就像一大堆的零件可以组装成一个完整的机器,而VC将这些API进行封装,就像是把这一大堆零件组合成一些大的部件,再由这些部件组合成窗口。比如马这个词,在你的脑海里这个字有着完整的定义:四条腿、长尾巴……但这并不是真实的马。
    现在你来到草园,OK,有一匹马站在你面前,你看了一下,认出这是马,那么这个过程就是你在脑海里将马这个字实例化了,成了你面前的这匹马。程序是一样的,类只是一个定义,表明定义的这个东西是什么样的,能干什么,但仅仅是个定义。你必须对它实例化,让这个类成为内存中真正的对象,对象才能真正的表现出它的样子,做该做的事。每一个窗体类对象就是一匹实际的马,它完全对应于一个窗口。一个类就是词典里的“马”只是一个类别,没有任何的实在的东西,当然也就不会对应到窗口了。
      

  6.   

    你缺乏windows编程的一些基本概念,比如窗口。
    建议楼主看一下《windows程序设计》
      

  7.   

    窗口是windows的基本概念。你可以创建一个窗口,并对此窗口进行一些操作,这些动作都通过调用API来完成。API是windows操作系统提供给程序员的编程接口。MFC把这些对窗口的操作封装成一个类,就是CWnd,这样的封装可以简化编程的难度。当然MFC并不仅仅封装了窗口。MFC对字符串的操作,提供了CString;对文件的操作,提供了CFile……  这些类本质上都是封装的API。一个窗口类(以及其派生类)的对象,对应着一个窗口。
    “如果要窗口响应消息是不是就要在这个类里面进行消息映射?”
    基本如此。
      

  8.   

    是不是可以这样理解:VC里的每一个窗口都对应一个类,这样就可以在这个类里为该窗口添加消息响应
     
    ------------------------------------------------------------------------------------------你可以理解成为VC里的每一个窗口都对应一个(CWnd或CWnd的派生类,比如CDialog,CView,CFrameWnd等等)的实例对象,因为派生自CWnd, 所以这些窗口(对象)就可以接收窗口消息,如WM_CREATE,WM_SHOWWINDOW 以及非窗口的所有消息(非CWnd类则无法接收窗口消息)-----------
    而你最初提出来的问题,一个类对应一个窗口,则正如我所说的相反,非CWnd派生类则几乎都没有窗口,我说的只是MFC相关内容
      

  9.   

    我理解楼主的痛苦,我也差不多这么过来的。这些东西不是一句话两句话所能给你讲明白的。建议楼主先了解一下什么是类,看看C++方面的书然后再写一些带有窗口的程序。(MFC之类的程序)。再看书,再写程序。这样反复多了,程序写的多了,自然就明白。“书读百遍,其意自现”。你花在这里的时间不如多看看书,多写写程序。
      

  10.   

    一个窗口可以对应多个类,但一个类不一定会对应窗口
    如果要窗口响应消息是不是就要在这个类里面进行消息映射?建议先看看window的消息映射原理和VC的基本消息传递方式
      

  11.   

    呵呵,是比较难说清楚。在Win32程序中建立一个窗口可以不用类,用CreateWindow函数就可以做到而在MFC程序中建立一个窗口,可以用CreateWindow,也还可以用基于CDialog类来创建。