每个child window都要通过同一个WNDCLASS的cbWndExtra来保存颜色值,但是应该只有一个WNDCLASS啊,怎么可能呢?在child window里发了setmenu的消息到client window,改了菜单,怎么菜单里的消息一部分在frame window的WNDPROC里响应,一部在child window的WNDPROC里响应,这个菜单传送路径是怎样的?

解决方案 »

  1.   

    那个WNDCLASS相当于C/C++的类,cbWndExtra相当于类中的一个成员变量,每个child window相当于C/C++类的一个instance(实例),你说它能不能把某个值保存到cbWndExtra中?
      

  2.   

    我的看法:每一个doc view frame都有一个document template来管理着,那么可以把三个看成一组,每一组都有自己的窗口属性或特征等等.而这些个(如果同时有很多组)他就会依次加入系统的一个连表中,那么肯定每个组都记录着自己的特征属性.
      

  3.   

    to Zark(金陵五月):跟c/c++的类/实例的关系一样吗,还是不太清楚,程序中只用WNDCLASS这个类定义了一个wndclass变量啊,多个窗口都是通过同一个wndclass来创建的,具体怎样的搞不清楚。
      

  4.   

    cbClsExtraSpecifies the number of extra bytes to allocate following the window-class structure. 
    cbWndExtraSpecifies the number of extra bytes to allocate following the window instance.  
      

  5.   

    多谢ross33123但是窗口是通过窗口类实例wndclass来创建的,这个实例中只有一个cbWndExtra啊,在不同的窗口(都通过这个窗口类创建)间切换时,cbWndExtra怎么表示各个窗口自己的变量值?
      

  6.   

    每一个窗口都是这个窗口类(WNDCLASS)的实例,如同C++的对象都是相应类的实例一样.
      

  7.   

    To Zark(金陵五月):
    能不能解释一下?就这么说没法理解呀
      

  8.   

    c++的类定义实例就像定义变量一样啊
    WNDCLASS wndclass1,wndclass2
    wndclass1,wndclass2两个不同的实例中名称相同的成员可以保存各自的值很好理解
    但是CreateWindows函数用同一个wndclass的啊
      

  9.   

    唉,牛角尖里转身不易啊!WNDCLASS类似于C++的class.C++中是通过两种方式产生对象实例的,一是
    class A{};A a;
    另一是
    A* ptr=new A;而WNDCLASS产生实例是通过CreateWindows()函数实现的,HWND hWnd1=CreateWindows(...);
    HWND hWnd2=CreateWindows(...);这里可以将hWnd1和hWnd2 看成是WNDCLASS的两个"实例".
      

  10.   

    哈哈
    也是通宵的hWnd1,hWnd2是指向两个窗口没错啊,但是不表示它们共用的wndclass也有两个呀?
      

  11.   

    共用wndclass是没错但是在系统内部每个窗口还有各自的数据结构
      

  12.   

    现在一看,ross兄前面的贴说得很对
    cbClsExtra
    Specifies the number of extra bytes to allocate following the window-class structure. cbWndExtra
    Specifies the number of extra bytes to allocate following the window instance.cbClsExtra是才每个窗口共用的,放在wndclass后面,而cbWndExtra是每个窗口实例共用的,在CreateWinow时,windows根据这一项在每个窗口实例后面增加一段空间。