MFC应用实例控件

一个有趣的问题,几天前在一个 我们的C++论坛 ,如下所示:

null

一种可能的方法,基于 互斥对象 ,几个小时后发布。在建议的模式中,您在MFC应用程序类(即类头)中声明一个互斥对象:

  1. //MFC应用程序类声明
  2. CYourAppClass::CWinApp
  3. {
  4. 处理Mutexh;
  5. UINT m U WinMsg U用户界面;
  6. }

定义MFC应用程序时 InitInstance() 方法,则尝试创建互斥锁-互斥锁的创建将在第一次成功后失败-

  1. BOOL CYourAppclass::InitInstance()
  2. {
  3. mu WinMsgu ui=注册窗口消息(u T( “ONNMESSAGE” ));
  4. m_Mutex_h=::CreateMutex(NULL,FALSE,STR_VIEWUTILITYMUTEX);
  5. 如果 ((mu Mutexu h=NULL)&&(GetLastError()=错误(已存在)
  6. {
  7. //应用程序未运行两次
  8. 古德格;
  9. mu pMainWnd=&dlg;
  10. INT_PTR nResponse=dlg.DoModal();
  11. }
  12. 其他的
  13. {
  14. //应用程序正在运行两次向正在运行的应用程序发送消息,
  15. //应用程序现在将知道第二个实例已启动
  16. ·SendMessage(HWNDu BROADCAST,mu WinMsgu ui,0,0);
  17. }
  18. //接下来将进行更多初始化
  19. }

关于 其他的 , 解决方案支持者(Bordon) 下面的人说

“这个” 发送消息 “仅当您希望运行的应用程序知道第二个实例已启动时才需要。您向正在运行的应用程序发送一条已注册的windows消息,而正在运行的应用程序将收到此消息并知道第二个实例已启动。你可以在消息处理程序中创建代码,将你的应用程序放到最前面。

很有趣。原来的人把它标记为解决方案,所以它似乎起了作用。你会推荐另一种方法吗?

更新: 请在评论部分查看微软MFC专家Pat Brenner关于这个问题的评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享