VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1111|回复: 3

[已解决]高级班之窗口篇P5 ShowWindow() 失效

[复制链接]
61_avatar_middle
最佳答案
0 
donate_vip 发表于 2020-7-3 17:52:57 | 显示全部楼层 |阅读模式
本帖最后由 KATZ 于 2020-7-3 17:58 编辑

问题如题, 高级班之窗口篇P5
https://www.bilibili.com/video/BV1Ct411B7Gz?t=3719&p=5(让程序只运行一个实例)
自定义消息中显示对话框无反应/失效。
第五个方法
⑤、互斥体+自定义广播系统消息法;
1、系统消息的注册:
  1. #define REG_MSG (_T("{7510EF00-BADA-48de-A6CE-5FBC817616DD}"))
  2. UINT WM_ACTIVE_MSG = ::RegisterWindowMessage(REG_MSG);
复制代码


2、发现实例后,进行消息的广播:
InitInstance() 函数中添加如下代码:

  1. HANDLE m_hMutex = ::CreateMutex(NULL, FALSE, _T("{6668BB0A-DE0C-499d-8520-79653FF9B2EB}"));
  2. if ( GetLastError() == ERROR_ALREADY_EXISTS ){
  3.         AfxMessageBox(_T("已经有一个实例正在运行中……"));
  4.         CloseHandle(m_hMutex);
  5.         m_hMutex = NULL;

  6.         DWORD dwRecipients = BSM_APPLICATIONS;
  7.         ::BroadcastSystemMessage(BSF_NOHANG, &dwRecipients, WM_ACTIVE_MSG, 0, 0);

  8.         return FALSE;
  9. }
复制代码

//清理工作
  1. if (m_hMutex) {
  2.         CloseHandle(m_hMutex);
  3.         m_hMutex = NULL;
  4. }
复制代码


3、窗口类中全局变量的作用域扩展:
  1. extern UINT WM_ACTIVE_MSG;
复制代码


4、窗口类中自定义消息的响应:
  1. afx_msg LRESULT OnActiveMsg(WPARAM wParam, LPARAM lParam);
  2. ON_REGISTERED_MESSAGE(WM_ACTIVE_MSG, &CDlgTestDlg::OnActiveMsg)
  3. LRESULT CDlgTestDlg::OnActiveMsg(WPARAM wParam, LPARAM lParam)
  4. {
  5.         ::ShowWindow(m_hWnd, SW_NORMAL);
  6.         ::SetForegroundWindow(m_hWnd);
  7.         return TRUE;
  8. }
复制代码


百度谷歌各种方法都试过 ShowWindow与SetForegroundWindow() 失效 、
无论是不是全局函数按视频操作也都没有正常运行 视频中也没有详细讲解 故发此提问。
最佳答案
51_avatar_small
2020-7-3 23:10:13
直接使用 PostMessage(HWND_BROADCAST, WM_ACTIVE_MSG, 0, 0); 吧,试试,这个广播消息应该可以




上一篇:VC设计界面调用matlab子程序
下一篇:size_t 定义类时怎么有时可以,有时候不行
51_avatar_middle
最佳答案
90 
online_admins 发表于 2020-7-3 22:24:28 | 显示全部楼层
CDlgTestDlg::OnActiveMsg 这个函数调用了吗?或者说触发了吗?
61_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-7-3 22:44:10 | 显示全部楼层
Syc 发表于 2020-7-3 22:24
CDlgTestDlg::OnActiveMsg 这个函数调用了吗?或者说触发了吗?

这个消息响应并没有触发........
那应该怎么做?
51_avatar_middle
最佳答案
90 
online_admins 发表于 2020-7-3 23:10:13 | 显示全部楼层    本楼为最佳答案   
bestAnswer
直接使用 PostMessage(HWND_BROADCAST, WM_ACTIVE_MSG, 0, 0); 吧,试试,这个广播消息应该可以
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-29 12:49

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表