模态对话框对同一个主窗口下非模态showwindow执行的影响

孙郎 2013-10-08 03:40:38
问题是这样的:
我想为程序创建一个老板键来隐藏窗口,具体就是
1、主窗口创建;
2、点击某一项,弹出非模态;
3、点击某一项,弹出模态。
然后隐藏的时候发现非模态窗口不能被隐藏!!(问题所在)单独模态或非模态都没有问题

我这样处理老板键:
//老板键隐藏主窗口时隐藏其模态窗口
activitiWnd = GetLastActivePopup();
if(activitiWnd != this && activitiWnd != NULL)
{
activitiWnd->ShowWindow(SW_HIDE);
}

// this->EnableWindow();//加上这一句隐藏所有窗口问题解决,但是重新显示会出错

SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
this->ShowWindow(SW_HIDE);

//隐藏窗口的时候也不显示托盘
Shell_NotifyIcon(NIM_DELETE, &m_Notify);
m_bMainShow = FALSE;

烦请各位MFC高手啊~~~
...全文
182 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
孙郎 2013-10-11
  • 打赏
  • 举报
回复
问题都解决了,非模态刷新是由重现时 icon和窗口顺序颠倒造成的,谢谢各位了~
孙郎 2013-10-09
  • 打赏
  • 举报
回复
引用 6 楼 flydreamGG 的回复:
把你的非模态的窗口父窗口指定为当前窗口
关键是无法获取非模态的窗口句柄或者指针,也就无法指定父窗口了。。。但这个问题我通过ShowOwnedPopups这个函数解决了。 现在的问题是非模态窗口重新显示不行,也就是鼠标指到哪,非模态刷新到哪。。。否则就是透明的,搞郁闷了。。
昨夜无风 2013-10-08
  • 打赏
  • 举报
回复
把你的非模态的窗口父窗口指定为当前窗口
孙郎 2013-10-08
  • 打赏
  • 举报
回复
引用 4 楼 yaozhiyong110 的回复:
那你用一个CDlalog*保存当前弹出的撒...
百来个cpp文件。。。这样做工作量太大了,能有什么方法获取主窗口的所有弹出式资源么?
yaozhiyong110 2013-10-08
  • 打赏
  • 举报
回复
引用 2 楼 sd_sunlang 的回复:
[quote=引用 1 楼 yaozhiyong110 的回复:] SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);前面你先隐藏那个非模态的 你有非模态的对话框指针或者句柄的吧?
没有句柄或指针啊,因为有可能弹出好多非模态窗口,不能确定是哪个。。。[/quote] 那你用一个CDlalog*保存当前弹出的撒...
孙郎 2013-10-08
  • 打赏
  • 举报
回复
孙郎 2013-10-08
  • 打赏
  • 举报
回复
引用 1 楼 yaozhiyong110 的回复:
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);前面你先隐藏那个非模态的 你有非模态的对话框指针或者句柄的吧?
没有句柄或指针啊,因为有可能弹出好多非模态窗口,不能确定是哪个。。。
yaozhiyong110 2013-10-08
  • 打赏
  • 举报
回复
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);前面你先隐藏那个非模态的 你有非模态的对话框指针或者句柄的吧?
采用MFC编程时,子对话框常常要向窗口传递数据,获取窗口的对象指针便显得非常重要了。 void CMyView::OnModel() //点击菜单,创建对话框的几种变量设置,总共是4种方法,模态的一种,非模态的三种 { // TODO: Add your command handler code here //CDialog modDlg(MAKEINTRESOURCE(IDD_MODEL),this); //modDlg.DoModal(); static bool num=0;//第一次执行第一段,以后再打开都执行第二段。 static CModDlg Dlgless(this);//将MyView指针传进去 if (0==num) { CModDlg mod(this);//将MyView指针传进去 //mod.SetWindowText("局部变量——模态对话框");不允许动态设置模态对话框标题?这句编绎会出错 mod.DoModal(); Dlgless.Create(IDD_MODEL);//重复执行会出错,要放到构造函数中好 Dlgless.ShowWindow(SW_SHOW); Dlgless.SetWindowText("局部静态变量——非模对话框"); m_dlgless.Create(IDD_MODEL,this);//重复执行会出错,要放到构造函数中好 m_dlgless.ShowWindow(SW_SHOW); m_dlgless.SetWindowText("成员非指针变量——非模对话框"); m_pDlgless=new CModDlg(this);//重复执行会出错,要放到构造函数中好, m_pDlgless->Create(IDD_MODEL);//重复执行会出错,要放到构造函数中好, m_pDlgless->ShowWindow(SW_SHOW); m_pDlgless->SetWindowText("成员指针变量——非模对话框"); num=1; } else { Dlgless.ShowWindow(SW_SHOW); m_dlgless.ShowWindow(SW_SHOW); m_pDlgless->ShowWindow(SW_SHOW); } }
编写一个如示例WinMain的Windows应用程序,其中窗口的背景色、光标、图标等属性可以设置成自己喜欢的风格。作为该示例的扩展,要求编程实现当在该窗口中单击右键时,播放一曲自己喜欢的音乐。(4学时) 编写一个如示例ExDlgCtl的MFC对话框应用程序,其中必须实现的功能包括: “对话框”菜单下的模态对话框、非模态对话框和文件对话框; “控件”菜单下的计算器、动态创建按钮、上网问卷调查、调整对话框背景色等四个对话框。 示例中的其它功能可以根据实际情况决定是否编写。(4学时) 3)编写一个如示例ExMenu的MFC菜单、工具栏和状态栏的应用程序,编写该实验时注意功能的完整性,包括两个菜单的切换、右键弹出式菜单、工具栏的切换、状态栏信息格的添加等功能。(4学时) 4)编写一个如示例ExDraw的MFC绘图应用程序,实现画点、线、矩形、椭圆等图形,并可以根据用户选择的画笔和画刷进行绘制,最后要求实现画笔的功能。(4学时) LRESULT CALLBACK WinProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // pointer to command line int nCmdShow // show state of window ) { WNDCLASS wndclas; wndclas.cbClsExtra=0; wndclas.cbWndExtra=0; wndclas.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclas.hCursor=LoadCursor(NULL,IDC_ARROW); wndclas.hIcon=LoadIcon(NULL,IDI_EXCLAMATION); wndclas.hInstance=hInstance; wndclas.lpfnWndProc=WinProc; wndclas.lpszClassName="ABCD"; wndclas.lpszMenuName=NULL; wndclas.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndclas;); void CTestView::OnDialogModal() //模态对话框 { // TODO: Add your command handler code here CTestDlg1 dlg; dlg.DoModal(); } void CTestView::OnDialogModalless()//非模态对话框 { // TODO: Add your command handler code here CTestDlg2 *pd=new CTestDlg2(); pd->Create(IDD_DIALOG2,this); pd->ShowWindow(SW_SHOW); } void CTestView::OnDialogFile() //文件对话框 {

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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