窗口上创建窗口

jannl 2009-05-19 10:18:06
请问在一个SDI程序上,单击菜单项创建一个窗口A,窗口A上有一个按钮,如何做单击按钮则在窗口A上创建一个窗口B?
...全文
164 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
ice_beauty1 2009-05-19
  • 打赏
  • 举报
回复
按钮的响应函数里添加,
CBDialog b;
b.DoModal();


记住要在A对话框类的cpp文件头部#include b对话框类的头文件
lose_forest 2009-05-19
  • 打赏
  • 举报
回复
hide a show b;
hide b show a;
EndureAxis 2009-05-19
  • 打赏
  • 举报
回复
没问题
Quers 2009-05-19
  • 打赏
  • 举报
回复
回帖是一种美德!每天回帖即可获得 10 分可用分!
na_he 2009-05-19
  • 打赏
  • 举报
回复
肯定是主框架首先接受消息,窗口A定义一个接口其功能是创建窗口B,可供外界调用,这样主框架直接跳用这个接口就可以实现了,因为窗口A也是主框架创建的。它的对象当然拥有了。
Ryanwen 2009-05-19
  • 打赏
  • 举报
回复
你创建的代码贴上来看看 我试了没问题
jannl 2009-05-19
  • 打赏
  • 举报
回复
B是A的子窗口,实际上我是想用SetWindowLong拦截窗口A的部分消息,用Create(IDD_DIALOG1 ,this);{this是窗口A的CWND对象}创建不行么?
用WIN32工程。直接在winmain窗口中注册创建一个窗口,在这个窗口上用Create创建一个对话框类似于在窗口A上创建窗口B没有问题,在MFC中总是不行,觉得很奇怪~~~
Ryanwen 2009-05-19
  • 打赏
  • 举报
回复
窗口A上创建一个窗口B?
B是A的子窗口还是一个Popup窗口
WaistCoat18 2009-05-19
  • 打赏
  • 举报
回复
CreateWindowEx创建窗口B,类型为子窗口,父窗口指定为A
LeviZhou 2009-05-19
  • 打赏
  • 举报
回复
如果窗口B也是对话框之类的话,你可能需要实现那种停靠窗口才行,就是让B停靠到A上面, 可能需要CControlBar,或者CDialogBar之类的咚咚

要是B也是控件的话,你完全可以先把B隐藏掉,在点击按钮的时候在显示出来就OK
Ryanwen 2009-05-19
  • 打赏
  • 举报
回复
SetWindowLong ModifyStyle都可以在创建后更改窗口属性
jannl 2009-05-19
  • 打赏
  • 举报
回复
讨论一下
PreCreateWindow函数确实可以改,不过如果在窗口创建之后动态改其属性是否可以?暂时让窗口不显示,改完然后显示?
Ryanwen 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jannl 的回复:]
void VWDialog::OnBnClickedOk()
{
tierDialog = new TierWinDialog;
tierDialog->Create(IDD_DIALOG1 ,this);
tierDialog->ShowWindow(SW_SHOW);
//OnOK();
}

这样能显示,但问题是这个窗口B不在窗口A上,而是Popup式的独立窗口,想创建一个类似按钮窗口的子窗口
[/Quote]

在资源编辑器里设置窗口属性为CHILD不行吗? 反正资源都创建了,多改一个属性没关系吧

或者你重载TierWinDialog类的PreCreateWindow函数,在里面根据一个标志位来更改窗口的属性,如果需要显示为子窗口,则在create之前将标志位设为true,
jannl 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 Conry 的回复:]
引用 12 楼 jannl 的回复:
这么说吧,在一个SDI主窗口上单击菜单项,创建一个弹出式窗口A,在此A窗口上有一按钮,单击此按钮要在A窗口上创建类似按钮的子窗口B,在子窗口B上要动态画三个按钮。我就迷茫在创建子窗口B的问题上。如果自定义一个继承自CDialog类的窗口类,用Create(IDD_DIALOG1 ,this);创建之后ShowWindow没反应,窗口没出来,这样创建不行么?
于是改成用CreateWindowEx,不知道如何创建,是否首先需要AfxRe…
[/Quote]
崩溃,原来改成child.....,
不过有没有办法用代码实现更改这个属性?
jannl 2009-05-19
  • 打赏
  • 举报
回复
void VWDialog::OnBnClickedOk()
{
tierDialog = new TierWinDialog;
tierDialog->Create(IDD_DIALOG1 ,this);
tierDialog->ShowWindow(SW_SHOW);
//OnOK();
}

这样能显示,但问题是这个窗口B不在窗口A上,而是Popup式的独立窗口,想创建一个类似按钮窗口的子窗口
Conry 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jannl 的回复:]
这么说吧,在一个SDI主窗口上单击菜单项,创建一个弹出式窗口A,在此A窗口上有一按钮,单击此按钮要在A窗口上创建类似按钮的子窗口B,在子窗口B上要动态画三个按钮。我就迷茫在创建子窗口B的问题上。如果自定义一个继承自CDialog类的窗口类,用Create(IDD_DIALOG1 ,this);创建之后ShowWindow没反应,窗口没出来,这样创建不行么?
于是改成用CreateWindowEx,不知道如何创建,是否首先需要AfxRegisterWndClass一个窗口类?…
[/Quote]
IDD_DIALOG1 的属性改为child
Ryanwen 2009-05-19
  • 打赏
  • 举报
回复
用Create(IDD_DIALOG1 ,this)有什么问题?
jannl 2009-05-19
  • 打赏
  • 举报
回复
直接CreateWindowEx不行啊,没反应。貌似要给第二个参数注册窗口类

::CreateWindowEx(0, ,_T("TierWinDialog") ,WS_CHILD|WS_VISIBLE ,100,100,200,200,m_hWnd ,(HMENU)IDD_DIALOG1 ,AfxGetApp()->m_hInstance ,NULL);


这是我的创建
sgwezz 2009-05-19
  • 打赏
  • 举报
回复
CreateWindowEx创建窗口B,类型为子窗口,父窗口指定为A
jannl 2009-05-19
  • 打赏
  • 举报
回复
这么说吧,在一个SDI主窗口上单击菜单项,创建一个弹出式窗口A,在此A窗口上有一按钮,单击此按钮要在A窗口上创建类似按钮的子窗口B,在子窗口B上要动态画三个按钮。我就迷茫在创建子窗口B的问题上。如果自定义一个继承自CDialog类的窗口类,用Create(IDD_DIALOG1 ,this);创建之后ShowWindow没反应,窗口没出来,这样创建不行么?
于是改成用CreateWindowEx,不知道如何创建,是否首先需要AfxRegisterWndClass一个窗口类?然后再创建?
加载更多回复(1)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧