hur.cn - 华软网

 热门搜索

小弟不才,问一个MFC窗口调用的基本问题。

  作者:未知    来源:网络    更新时间:2011/6/13
问题1:在窗口A中,点击按钮,出现B窗口。一般的典型做法是怎样的?

我的做法是:在A窗口类中,声明一个类型为B类的成员变量,然后在A窗口初始化的时候,用B.Create把窗口创建出来,再用B.showwindow(false)把窗体隐藏。当点击A窗口的按钮时,调用B.showwindow(true)把它再显示出来。

这种做法正常么?有没有更好的做法?

问题2:如果用我的那种做法,窗口B怎么得到窗口A的句柄呢?创建B窗口类对象的时候,初始化函数里的参数是CWnd * pParent,我需要传递什么进去?还是在构造函数中加一个HWND参数,直接把窗口A的句柄传递进去?

问题3:如果用我的那种做法,窗口A怎么知道窗口B的句柄呢?

谢过谢过!
---华软 网友回答---
问题一,建立全局变量,然后创建实例,如果是局部变量,声明为指针,否则无法显示
问题二,句柄可以传递给其他窗体啊,通过属性,public的方法,重载构造函数等等
---华软网友回复---
1、我认为你那个做法就行,还有更好的吗?
2、初始化函数里的参数是CWnd * pParent 设定为this,以后再想用A的时候GetParent即可
3、窗口A怎么知道窗口B的句柄呢?  B是A的成员变量  故B.m_hWnd即可
---华软网友回复---
1. 看你是需要的是模态还是非模态对话框?DoModal()显示模态对话框也可以
2. 如果你创建的子对话框的时候指定的父窗口的指针是this的话,在你的子对话框的类中GetParent()就可以得到父对话框类的指针了。
3. 参考上述
---华软网友回复---
引用 2 楼 simoreg 的回复:
1、我认为你那个做法就行,还有更好的吗?
2、初始化函数里的参数是CWnd * pParent 设定为this,以后再想用A的时候GetParent即可
3、窗口A怎么知道窗口B的句柄呢?  B是A的成员变量  故B.m_hWnd即可


嗯,我一开始也是这么弄的,但发现如果在B为A的成员变量是,对其实例化的时候,不能传this指针,提示this指针使用错误,可能是因为A类还没有定义完成吧?
---华软网友回复---
引用 3 楼 visualeleven 的回复:
1. 看你是需要的是模态还是非模态对话框?DoModal()显示模态对话框也可以
2. 如果你创建的子对话框的时候指定的父窗口的指针是this的话,在你的子对话框的类中GetParent()就可以得到父对话框类的指针了。
3. 参考上述


对,就是什么时候把this指针传给子对话框,因为如果把子对话框作为父对话框的类成员变量的话,如:

#include <b.h>

class A
{
...
     private:
     B b(this);
}

会提示this使用错误……

我现在是直接在A的某个函数里面,声明B * b = new B(this),然后在B退出是 delete this 可否?
---华软网友回复---
1、先能清两个窗口的是各个独立程序,还是同一个程序,说白了是两个exe,还是一个exe里窗口。
2、如果同一exe里面的两个窗口,在初始化窗口A的,初始化窗口B,只是隐藏B即可,这时肯定要在A定义B,很容易知道B的句柄,B知道A,如果A是B的父窗口,直接GetParent()即可,也可以在B定义一个A的句柄变量,在A里初始化B后,直接附值就行了。
3、如果是两个独立的exe,在A的初始化中直接隐藏执行B即可,双方互相通过查看窗口标题或类名FindWindow找到对方的句柄。
---华软网友回复---
你还在A中声明B
然后在A的OnInitDialog中Create(ID,this),
如果需要显示的时候,ShowWindow
如果你在资源中去掉Visiable的话,需要ShowWindow才能显示出来对话框.
---华软网友回复---
#include <b.h>

class A
{
...
  private:
  B b(this); // 囧,写成B b;
}
---华软网友回复---
引用 8 楼 visualeleven 的回复:
#include <b.h>

class A
{
...
  private:
  B b(this); // 囧,写成B b;
}


呃~~~话说只是想把B类构造函数里面那个CWnd*参数附上值而已……
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。