CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

双击程序使隐藏的窗口再次显示出来?

楼主4102509(物到极时终必反.....)2005-05-04 19:35:22 在 VC/MFC / 基础类 提问

我的程序要求只运行一次,当我关闭我的窗口时只是用ShowWindow(SW_HIDE);  
  当我再次点击程序时,我如何使得这个窗口显示出来,而不是打开另外一个同样的程序? 问题点数:50、回复次数:15Top

1 楼bauhaus()回复于 2005-05-04 19:43:13 得分 0

你说得很对  
  我学会了  
  谢谢Top

2 楼woodwoodwood3()回复于 2005-05-04 19:45:47 得分 0

启动程序的第二个实例时,用互斥判断程序已经在运行,  
  用进程间通讯发送消息给已经运行的程序  
  响应消息,动作ShowWindow(SW_SHOW);Top

3 楼4102509(物到极时终必反.....)回复于 2005-05-04 19:59:01 得分 0

互斥判断程序我会;  
  问题ShowWindow(SW_SHOW);我在那里写?  
  我是重新再双击一次应用程序,如果另已经隐藏的窗口显示出来?  
   
  Top

4 楼uovk(石头)回复于 2005-05-04 20:12:06 得分 50

HANDLE   hMutex   =   CreateMutex(NULL,FALSE,"OnlyOnce");  
  if(hMutex   ==   NULL   ||   ERROR_ALREADY_EXIST)  
  {  
  HWND   hWnd;  
  hWnd=::FindWindow(NULL,_T("窗口名称"));  
  ::ShowWindow(hWnd,SW_SHOW);  
  }Top

5 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-05-04 20:19:04 得分 0

::ShowWindow(hWnd,SW_SHOW);  
  就可以显示隐藏了的Top

6 楼4102509(物到极时终必反.....)回复于 2005-05-04 20:21:16 得分 0

hWnd=::FindWindow(NULL,_T("窗口名称"));在窗口已经隐藏后好像不能查找出来窗口吧???  
  我隐藏时连进程也隐藏啦~Top

7 楼uovk(石头)回复于 2005-05-04 20:31:47 得分 0

查得出..要不VC的spy++就没用了Top

8 楼4102509(物到极时终必反.....)回复于 2005-05-04 20:41:10 得分 0

if((hMutex   ==   NULL   ||   ERROR_ALREADY_EXISTS)  
  {  
  HWND   hWnd;  
  hWnd=::FindWindow(NULL,_T("BarDemo"));  
  ::ShowWindow(hWnd,SW_SHOW);  
  return   FALSE;  
  }  
  else  
  {       pFrame->ShowWindow(SW_MAXIMIZE);  
  pFrame->UpdateWindow();  
  return   TRUE;  
  }  
  我按你说的,我在程序中是这样写的,想有且只有一个窗口,但好像不行,可以重复多个同样的窗口??Top

9 楼uovk(石头)回复于 2005-05-04 20:42:11 得分 0

你可能是在Win98  
  Win98不支持互斥命名Top

10 楼uovk(石头)回复于 2005-05-04 20:42:43 得分 0

HANDLE   hMutex   =   CreateMutex(NULL,FALSE,"OnlyOnce");  
   
  //这个不能用于win98Top

11 楼4102509(物到极时终必反.....)回复于 2005-05-04 20:43:10 得分 0

hWnd=::FindWindow(NULL,_T("BarDemo"));  
  ::ShowWindow(hWnd,SW_SHOW);其中这两行好像不是将那个隐藏的窗口然后显示的代码,而是重新运行一个窗口吧?Top

12 楼4102509(物到极时终必反.....)回复于 2005-05-04 20:43:34 得分 0

我的在XP下~~Top

13 楼uovk(石头)回复于 2005-05-04 20:53:58 得分 0

还有一个原因是你加的位置不对  
   
  应该是加在主个前面   XXXX.CPP  
  的InitInstance()  
     
  {       //加在这里  
   
  CXXXDlg   dlg;  
  m_pMainWnd   =   &dlg;  
  int   nResponse   =   dlg.DoModal();  
  if   (nResponse   ==   IDOK)  
  {  
  //   TODO:   Place   code   here   to   handle   when   the   dialog   is  
  //     dismissed   with   OK  
  }  
  else   if   (nResponse   ==   IDCANCEL)  
  {  
  //   TODO:   Place   code   here   to   handle   when   the   dialog   is  
  //     dismissed   with   Cancel  
  }  
  return   false;  
  }Top

14 楼4102509(物到极时终必反.....)回复于 2005-05-04 21:02:21 得分 0

解决啦,谢谢石头啦~~  
  给分~Top

15 楼surstar(我要写个操作系统出来……)回复于 2005-05-04 21:14:43 得分 0

给个例子给你~  
  http://www.csdn.net/cnshare/soft/15/15267.shtm  
   
  去下载这个里面里的程序,仔细看里面的代码~   他就是只能运行一次的  
   
    我把里面的代码提取出来贴在下面~   (在AdoRWAccess.cpp文件中,你改改应该可以满足要求)  
  BOOL   CAdoRWAccessApp::InitInstance()  
  {  
  AfxEnableControlContainer();  
   
  //   Standard   initialization  
  //   If   you   are   not   using   these   features   and   wish   to   reduce   the   size  
  //     of   your   final   executable,   you   should   remove   from   the   following  
  //     the   specific   initialization   routines   you   do   not   need.  
   
  #ifdef   _AFXDLL  
  Enable3dControls(); //   Call   this   when   using   MFC   in   a   shared   DLL  
  #else  
  Enable3dControlsStatic(); //   Call   this   when   linking   to   MFC   statically  
  #endif  
   
  //   此程序只能运行一次,用互斥量来判断程序是否已运行  
          HANDLE   m_hMutex=CreateMutex(NULL,TRUE,   m_pszAppName);    
          if(GetLastError()==ERROR_ALREADY_EXISTS)   {   return   FALSE;   }  
   
  //   设置对话框背景和文本颜色  
  // SetDialogBkColor(RGB(160,180,220),RGB(0,0,0));  
   
  //   ------------------------------------------------------------------------------------------------  
  //   初始化COM,创建ADO连接等操作  
  AfxOleInit();  
  m_pConnection.CreateInstance(__uuidof(Connection));  
   
  //   在ADO操作中建议语句中要常用try...catch()来捕获错误信息,  
  //   因为它有时会经常出现一些想不到的错误。jingzhou   xu  
  try                                    
  {  
  //   打开本地Access库Demo.mdb  
  m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=Demo.mdb","","",adModeUnknown);  
   
  }  
  catch(_com_error   e)  
  {  
  AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");  
  return   FALSE;  
  }    
  //   ---------------------------------------------------------------------------------------------------  
   
  CAdoRWAccessDlg   dlg;  
  m_pMainWnd   =   &dlg;  
  int   nResponse   =   dlg.DoModal();  
  if   (nResponse   ==   IDOK)  
  {  
  //   TODO:   Place   code   here   to   handle   when   the   dialog   is  
  //     dismissed   with   OK  
  }  
  else   if   (nResponse   ==   IDCANCEL)  
  {  
  //   TODO:   Place   code   here   to   handle   when   the   dialog   is  
  //     dismissed   with   Cancel  
  }  
   
  //   Since   the   dialog   has   been   closed,   return   FALSE   so   that   we   exit   the  
  //     application,   rather   than   start   the   application's   message   pump.  
  return   FALSE;  
  }Top

相关问题

  • 如何用程序隐藏和显示DataGrid中的一列
  • ◆如何让指定的程序显示隐藏的FORM?
  • 如何隐藏*。EXE文件,具体是此*.EXE文件由其他程序调用,而不惜望直接打开(如双击)来着有分
  • 怎样用程序控制 CEDIT 和 CButton 控件的显示与隐藏,enable & disable???
  • Winform中如何用程序隐藏和显示DataGrid中的一列,,help me!
  • SDI程序,如何隐藏本窗体并显示另一个窗体?
  • 静态文本控件和GroupBox怎样通过程序隐藏和显示
  • 如何使另外一个程序的界面隐藏或显示啊??
  • 如何隐藏线程不让其显示在“关闭程序”中和如何判断程序已经运行。
  • 请问如何用程序隐藏/显示其它程序启动后留在系统托盘的图标

关键词

  • win98
  • null
  • 隐藏
  • 程序
  • showwindow
  • sw
  • hwnd
  • nresponse
  • 显示
  • hmutex

得分解答快速导航

  • 帖主:4102509
  • uovk

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo