ptrTestDlg = new TestDlg(this);
ptrTestDlg ->Create(IDD_TESTDLG,this);
ptrTestDlg ->UpdateData(TRUE);
ptrTestDlg ->RedrawWindow();
ptrTestDlg ->CenterWindow(this);
ptrTestDlg ->ShowWindow(SW_SHOW);
点击ok按钮后hide掉然后show主窗口,但现在奇怪的是hide掉以后好像主窗口失去了焦点,点击鼠标没有任何反映,然后点击其他\程序,或者点击任务栏,这是点击主窗口,就可以用了,不知道什么原因,也没做什么其他处理啊。
16 个解决方案
#1
OK按钮内部的代码,不能使用OnOk函数必须使用消息传递让ptrTestDlg的父窗口处理
#2
用SetForegroundWindow和SetFocus函数试一试
#3
在ok处理函数中向ptrTestDlg的父窗口发消息,在ptrTestDlg的父窗口中处理后再向MainDlg发消息处理的,是这样处理有问题吗?
#4
SetForegroundWindow,SetFocus,Invalidate,SetActiveWindow我都试了,不行,郁闷
#5
昨天想了一天也没想出来是为什么,郁闷啊,debug时又没什么问题,搞晕了
#6
随便建一个对话框程序,然后用一个按钮,在按钮里弹出一个新窗口,不会有你说的情况出现,
如果你的新窗口只是一个普通的窗口的,
那么问题应该是出在你弹出窗口的时机,以及主窗口上,你的主窗口是什么样的,你的主窗口上有没有其它的莫名其妙的窗口等等
如果你的新窗口只是一个普通的窗口的,
那么问题应该是出在你弹出窗口的时机,以及主窗口上,你的主窗口是什么样的,你的主窗口上有没有其它的莫名其妙的窗口等等
#7
IsTopParentActive()返回值是什么意思?我看了一下我的返回值是0
#8
google没搜到,各位用过吗?
#9
汗,MS根本没有提供过IsTopParentActive这个API。楼主用的是谁实现的函数?
#10
BOOL CWnd::IsTopParentActive() const
{
ASSERT(m_hWnd != NULL);
ASSERT_VALID(this);
return CWnd::GetForegroundWindow() ==
GetTopLevelParent()->GetLastActivePopup();
}
用VC在你的VC目录(...\MICROSOFT VISUAL STUDIO\VC98\MFC)下搜索IsTopParentActive就能找到源码
#11
CWnd里面有这个函数啊,我的新窗口就是一个普通的窗口。我创建了一个主窗口然后创建了两个Child类型的子窗口,而TestDlg就是一个Login对话框,属性与主对话框相同,在显示login以及隐藏login的时候,主窗口肯定只有一个
#12
焦点不对吧
有两种方法可以获得焦点:
1.打开资源编辑器中的对话框模板,在Layout菜单中选择TabOrder选项。按对话框中的控制来重新排列这些控制的tab顺序。
2.用文本编辑器(比如:记事本等)直接打开*.rc文件,会看到各个控件资源以文本的方式按加入时的顺序排列如下:
BEGIN
EDITTEXT IDC_EDIT 1,20,19,86,21,ES_ AUTOHSCROLL
COMBOBOX IDC_COMBO 1,15,57,92, 18,CBS_DROPDOWN|CBS_SORT|WS_ VSCROLL|WS_TABSTOP
END
排在前面的(比如本例的EDITTEXT)就是首先获得焦点的空间,只要改变其排列顺序即可。
有两种方法可以获得焦点:
1.打开资源编辑器中的对话框模板,在Layout菜单中选择TabOrder选项。按对话框中的控制来重新排列这些控制的tab顺序。
2.用文本编辑器(比如:记事本等)直接打开*.rc文件,会看到各个控件资源以文本的方式按加入时的顺序排列如下:
BEGIN
EDITTEXT IDC_EDIT 1,20,19,86,21,ES_ AUTOHSCROLL
COMBOBOX IDC_COMBO 1,15,57,92, 18,CBS_DROPDOWN|CBS_SORT|WS_ VSCROLL|WS_TABSTOP
END
排在前面的(比如本例的EDITTEXT)就是首先获得焦点的空间,只要改变其排列顺序即可。
#13
问题是我现在点对话框的任何位置都没反映,点关闭按钮都不行,鼠标必须点程序外其他地方然后才可以,疑惑
#14
还有一个奇怪的问题,我在在该对话框加了一个按钮test,一个Static控件test static,结果字都显示不出来,我已经updatedata了,奇怪
#15
程序内部附值,一般应该是updatedata(FALSE);
#16
把TestDlg改为无模式对话框,
把ptrTestDlg = new TestDlg(this);中的this 去掉,然后试
把ptrTestDlg = new TestDlg(this);中的this 去掉,然后试
#1
OK按钮内部的代码,不能使用OnOk函数必须使用消息传递让ptrTestDlg的父窗口处理
#2
用SetForegroundWindow和SetFocus函数试一试
#3
在ok处理函数中向ptrTestDlg的父窗口发消息,在ptrTestDlg的父窗口中处理后再向MainDlg发消息处理的,是这样处理有问题吗?
#4
SetForegroundWindow,SetFocus,Invalidate,SetActiveWindow我都试了,不行,郁闷
#5
昨天想了一天也没想出来是为什么,郁闷啊,debug时又没什么问题,搞晕了
#6
随便建一个对话框程序,然后用一个按钮,在按钮里弹出一个新窗口,不会有你说的情况出现,
如果你的新窗口只是一个普通的窗口的,
那么问题应该是出在你弹出窗口的时机,以及主窗口上,你的主窗口是什么样的,你的主窗口上有没有其它的莫名其妙的窗口等等
如果你的新窗口只是一个普通的窗口的,
那么问题应该是出在你弹出窗口的时机,以及主窗口上,你的主窗口是什么样的,你的主窗口上有没有其它的莫名其妙的窗口等等
#7
IsTopParentActive()返回值是什么意思?我看了一下我的返回值是0
#8
google没搜到,各位用过吗?
#9
汗,MS根本没有提供过IsTopParentActive这个API。楼主用的是谁实现的函数?
#10
BOOL CWnd::IsTopParentActive() const
{
ASSERT(m_hWnd != NULL);
ASSERT_VALID(this);
return CWnd::GetForegroundWindow() ==
GetTopLevelParent()->GetLastActivePopup();
}
用VC在你的VC目录(...\MICROSOFT VISUAL STUDIO\VC98\MFC)下搜索IsTopParentActive就能找到源码
#11
CWnd里面有这个函数啊,我的新窗口就是一个普通的窗口。我创建了一个主窗口然后创建了两个Child类型的子窗口,而TestDlg就是一个Login对话框,属性与主对话框相同,在显示login以及隐藏login的时候,主窗口肯定只有一个
#12
焦点不对吧
有两种方法可以获得焦点:
1.打开资源编辑器中的对话框模板,在Layout菜单中选择TabOrder选项。按对话框中的控制来重新排列这些控制的tab顺序。
2.用文本编辑器(比如:记事本等)直接打开*.rc文件,会看到各个控件资源以文本的方式按加入时的顺序排列如下:
BEGIN
EDITTEXT IDC_EDIT 1,20,19,86,21,ES_ AUTOHSCROLL
COMBOBOX IDC_COMBO 1,15,57,92, 18,CBS_DROPDOWN|CBS_SORT|WS_ VSCROLL|WS_TABSTOP
END
排在前面的(比如本例的EDITTEXT)就是首先获得焦点的空间,只要改变其排列顺序即可。
有两种方法可以获得焦点:
1.打开资源编辑器中的对话框模板,在Layout菜单中选择TabOrder选项。按对话框中的控制来重新排列这些控制的tab顺序。
2.用文本编辑器(比如:记事本等)直接打开*.rc文件,会看到各个控件资源以文本的方式按加入时的顺序排列如下:
BEGIN
EDITTEXT IDC_EDIT 1,20,19,86,21,ES_ AUTOHSCROLL
COMBOBOX IDC_COMBO 1,15,57,92, 18,CBS_DROPDOWN|CBS_SORT|WS_ VSCROLL|WS_TABSTOP
END
排在前面的(比如本例的EDITTEXT)就是首先获得焦点的空间,只要改变其排列顺序即可。
#13
问题是我现在点对话框的任何位置都没反映,点关闭按钮都不行,鼠标必须点程序外其他地方然后才可以,疑惑
#14
还有一个奇怪的问题,我在在该对话框加了一个按钮test,一个Static控件test static,结果字都显示不出来,我已经updatedata了,奇怪
#15
程序内部附值,一般应该是updatedata(FALSE);
#16
把TestDlg改为无模式对话框,
把ptrTestDlg = new TestDlg(this);中的this 去掉,然后试
把ptrTestDlg = new TestDlg(this);中的this 去掉,然后试