MFC 基于单文档的对话框问题。 请问我创建基于单文档的MFC程序,程序本身有个AboutBox的对话框,但它是模态的,我把他改为非模态的,但现在有个问题,我想把这对话框弄成象文档一样只能在主界面里面移动应该怎么弄?还有我自己新添加了个类继承了CDialog,同样创建为非模态并在菜单上加了显示这个类所对应的对话框的函数,但问题是这个这个对话框显示第2次的时候就出错,每次开程序只能点一次。为什么??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想把这对话框弄成象文档一样只能在主界面里面移动应该怎么弄?==========单文档不好弄吧除非你切分一个View出来~XXXBar什么的都会到外面去的~ 同样创建为非模态并在菜单上加了显示这个类所对应的对话框的函数,但问题是这个这个对话框显示第2次的时候就出错,每次开程序只能点一次。================是不是Create了没有Destory呢? 想把这对话框弄成象文档一样只能在主界面里面移动应该怎么弄?--------------------------------------------------------------在鼠标移动消息中查找当前的活动窗口(其实就是你点着鼠标时移动的窗口),并求取活动窗口的屏幕坐标,再求取主对话框的屏幕坐标,由此判断子对话框是否已经移出主对话框,当移出时,用MoveWindow或SetWindowPos将其设置回到主对话框之内。这个对话框显示第2次的时候就出错,每次开程序只能点一次----------------------------------------------------------------什么叫做第二次显示,第一次你是如何关闭的?用Close()还是DestroyWindow()?如果是前者,第二次再调用ShowWindow()显示即可,如果是后者,则要重新Create。而如果你是用Close()关闭,而第二次又用Create,那么就会出错。 1。单文档不能做?那什么才能做出这样的效果,就是对话框只能在主截面中移动2。不管我是否关闭我创建的新的对话框,只要第2次点击菜单的TEST就会出错,而WINDOWS自己创建的那个IDD_ABOUTBOX缺不管打开几次都行? 1。单文档不能做?那什么才能做出这样的效果,就是对话框只能在主截面中移动-----------------------------------------昨天没看清楚,单文档道理和这个是一样的,用GetClientRect()和ClientToScreen()分别求出子对话框和CMainFrame()类的坐标,在鼠标WM_MOUSEMOVE消息处理函数中用MoveWindow或SetWindowPos限制子窗体的移动范围即可2。不管我是否关闭我创建的新的对话框,只要第2次点击菜单的TEST就会出错,而WINDOWS自己创建的那个IDD_ABOUTBOX缺不管打开几次都行?--------------------------------------------你如何创建和隐藏非模对话框当然会有关系,一个非模对话框在你没有Destory的时候再次Create就会出错。所以才问你是如何关闭它的,系统调用的那个是用局部变量,模态对话框的方式,出函数体就自动销毁了,再次调用当然没问题。你用的应该是成员变量,这个就得手动的去销毁或者隐藏 谢谢,现在关于对话框只能在主界面移动的问题解决了,我的做法是新建个类基类为CDialog,其构造函数为CTestDlg(CWnd* pParent = NULL);并把对话框设置为CHILD.然后在CTESTView里加上该类的对象做成员变量,然后加入新类的头文件void CTESTView::OnTest() { // TODO: Add your command handler code here ctest.Create(IDD_TEST1_DIALOG,this); // ctest.MoveWindow(0,0,400,600); ctest.ShowWindow(SW_SHOW);}这样就达到了想文档那样只能在主界面移动的效果但问题来了,该对话框中我加了3个Edit控件,运行时,鼠标点不上去,然而我按TAB却能将光标移上去,其他比如BUTTON什么的空间都没这问题,而且我将对话框style改为Ovlapped时就能点到Edit控件上了,但我要的只能在主界面移动的效果没了,请大大们解决. 关于COM的使用:不知道interface可以使用COM吗? VS2005还提供组件吗 图片居中显示 初学,向大家请教! 救命啊,谁能帮我解惑? 关于XML在VC.Net中的使用 请问ULONG_PTR是什么数据类型,我用的是VC6但是却不认识这个宏.... 怎么我用lib静态调用方式调用不到dll里的函数呢? 逻辑坐标和设备坐标的转换问题 如何将ListCtrl的某一行的颜色设置成Highlight,或... 在一个com中如何调用另一个com中的方法,过程是怎样的 如何调用另一个工程中的类? 请问如何在VC++中使用OpenFileDialog类?
==========单文档不好弄吧除非你切分一个View出来~XXXBar什么的都会到外面去的~
================是不是Create了没有Destory呢?
--------------------------------------------------------------
在鼠标移动消息中查找当前的活动窗口(其实就是你点着鼠标时移动的窗口),并求取活动窗口的屏幕坐标,再求取主对话框的屏幕坐标,由此判断子对话框是否已经移出主对话框,当移出时,用MoveWindow或SetWindowPos将其设置回到主对话框之内。这个对话框显示第2次的时候就出错,每次开程序只能点一次
----------------------------------------------------------------
什么叫做第二次显示,第一次你是如何关闭的?用Close()还是DestroyWindow()?如果是前者,第二次再调用ShowWindow()显示即可,如果是后者,则要重新Create。而如果你是用Close()关闭,而第二次又用Create,那么就会出错。
2。不管我是否关闭我创建的新的对话框,只要第2次点击菜单的TEST就会出错,而WINDOWS自己创建的那个IDD_ABOUTBOX缺不管打开几次都行?
-----------------------------------------
昨天没看清楚,单文档道理和这个是一样的,用GetClientRect()和ClientToScreen()分别求出子对话框和CMainFrame()类的坐标,在鼠标WM_MOUSEMOVE消息处理函数中用MoveWindow或SetWindowPos限制子窗体的移动范围即可2。不管我是否关闭我创建的新的对话框,只要第2次点击菜单的TEST就会出错,而WINDOWS自己创建的那个IDD_ABOUTBOX缺不管打开几次都行?
--------------------------------------------
你如何创建和隐藏非模对话框当然会有关系,一个非模对话框在你没有Destory的时候再次Create就会出错。所以才问你是如何关闭它的,系统调用的那个是用局部变量,模态对话框的方式,出函数体就自动销毁了,再次调用当然没问题。你用的应该是成员变量,这个就得手动的去销毁或者隐藏
然后在CTESTView里加上该类的对象做成员变量,然后加入新类的头文件
void CTESTView::OnTest()
{
// TODO: Add your command handler code here
ctest.Create(IDD_TEST1_DIALOG,this);
// ctest.MoveWindow(0,0,400,600);
ctest.ShowWindow(SW_SHOW);
}这样就达到了想文档那样只能在主界面移动的效果
但问题来了,该对话框中我加了3个Edit控件,运行时,鼠标点不上去,然而我按TAB却能将光标移上去,其他比如BUTTON什么的空间都没这问题,而且我将对话框style改为Ovlapped时就能点到Edit控件上了,但我要的只能在主界面移动的效果没了,请大大们解决.