MFC只运行一个实例窗口
来源:互联网 发布:windows字体库样式 编辑:程序博客网 时间:2024/06/05 05:38
1. 概述
在编写MFC程序的时候,有些时候需要程序只能运行一个实例。需要实现这样功能,首先要阻止多个实例的运行,并将运行了的实例放置到最前面。本篇文章中采用互斥量来实现。
2. 实现
在InitInstance()对应的App类中添加一个互斥量句柄m_hMutex。之后在InitInstance()的最前面添加如下代码
//只运行一个实例m_hMutex = CreateMutex(NULL, FALSE, _T("My_App"));if (GetLastError() == ERROR_ALREADY_EXISTS)//检查互斥量对象名称是否已经存在{CWnd* pDesktopWnd = CWnd::GetDesktopWindow();//寻找桌面窗口CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD);//获取桌面上的窗口while (pWnd != NULL)//从桌面窗口上的窗口开始,一直寻找窗口,判断是不是已经存在了{if (::GetProp(pWnd->m_hWnd, m_pszExeName))//判断找到的窗口是不是需要找到的程序窗口,也就是自身{pWnd->SetForegroundWindow();//将找到的窗口放置在最前面break;//return FALSE;//返回}pWnd = pWnd->GetWindow(GW_HWNDNEXT);//获取下一个窗口}MessageBox(NULL, _T("已经有一个实例在运行了"), _T("提示"), MB_OK);return FALSE;}在XXXDlg类中添加ON_CREATE响应函数,添加语句
::SetProp(m_hWnd, AfxGetApp()->m_pszExeName, (HANDLE)NULL);//添加窗口属性、标记在XXXDlg类中添加ON_DESTROY响应函数,添加语句
::RemoveProp(m_hWnd, AfxGetApp()->m_pszExeName);//删除窗口属性,标记
阅读全文
0 0
- MFC只运行一个实例窗口
- MFC 只运行一个实例
- MFC只运行一个实例
- C# winform 只运行一个实例窗口
- MFC程序只运行一个实例
- mfc应用程序只运行一个实例
- mfc程序只运行一个实例
- 让MFC程序只运行一个实例
- MFC 对话框只允许一个实例运行
- MFC中应用程序只允许运行一个实例
- MFC中应用程序只允许运行一个实例方法一
- MFC中应用程序只允许运行一个实例
- MFC中应用程序只允许运行一个实例
- MFC中应用程序只允许运行一个实例
- MFC中应用程序只允许运行一个实例
- MFC中应用程序只允许运行一个实例
- 只运行一个实例
- 只运行一个实例
- Android M Runtime Permission 介绍
- manageQuery()
- springBoot启动报错Cannot determine embedded database driver class for database type NONE
- bzoj2301 [HAOI2011]Problem b
- Servlet3.0特性详解-笔记
- MFC只运行一个实例窗口
- 函数式宏定义与普通函数
- Mybatis控制台打印SQL
- python 安装 Scrapy 报错(已解决)
- hdoj1062 Text Reverse(字符串操作题)
- Python杂记
- WebSocket初体验(Netty)
- Java电话号码和手机号码正则验证
- jsf primefaces中commandbutton刷新页面bug,lazymodel的datatable查询及重置问题