,这种特殊的自定义消息 有什么用

zrdongjiao 2013-05-13 10:53:58

if(hnd != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
{
//CString str;
//str.LoadString(IDS_ALREADYEXIST);
//AfxMessageBox(str);
UINT uMsg = RegisterWindowMessage(_T("自定义字符串"));
::PostMessage(HWND_BROADCAST, uMsg, 0, 0);

bFirstOne = FALSE;
CloseHandle (hnd);
return FALSE;
}


这代码有啥用,

为什么用注册一个消息?

...全文
108 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zrdongjiao 2013-05-13
  • 打赏
  • 举报
回复
引用 2 楼 stjay 的回复:
只运行一个实例(一般用互斥,判断ERROR_ALREADY_EXISTS) 后面运行的实例,把第一个实例的窗口显示出来或放到最前面(这里是通过RegisterWindowMessage,这样才能用PostMessage HWND_BROADCAST,一般是用FindWindow + PostMessage,窗口响应这个自定义消息,把自己先显示出来)
晕, 有了字符串 messagebox不就可以了吗? 或者通过sendmessage把字符串地址发到要显示的地方不就行了吗
stjay 2013-05-13
  • 打赏
  • 举报
回复
只运行一个实例(一般用互斥,判断ERROR_ALREADY_EXISTS) 后面运行的实例,把第一个实例的窗口显示出来或放到最前面(这里是通过RegisterWindowMessage,这样才能用PostMessage HWND_BROADCAST,一般是用FindWindow + PostMessage,窗口响应这个自定义消息,把自己先显示出来)
微型蚂蚁 2013-05-13
  • 打赏
  • 举报
回复
函数名(function):RegisterWindowMessage 函数说明:RegisterWindowMessage函数定义一个新的窗口消息,保证该消息在系统范围内是唯一的。通常调用SendMessage或者PostMessage函数时,可以使用该函数返回的消息值。 ::PostMessage(HWND_BROADCAST, uMsg, 0, 0);是向系统中所有Top-level窗口发送这个消息
stjay 2013-05-13
  • 打赏
  • 举报
回复
有人认为FindWindow不靠谱,标题、类名可能相同 所以用RegisterWindowMessage,这个可靠一点,全局自定义消息,基本不会重复
stjay 2013-05-13
  • 打赏
  • 举报
回复
搜索一下“vc 单实例”就有啦 http://www.cnblogs.com/kenter/archive/2010/12/24/1916363.html
// Create the mutex with the class name
    m_hMutex = CreateMutex(NULL, FALSE, m_strClassName);
    // Check for errors
    if ( GetLastError() == ERROR_ALREADY_EXISTS ) {
        // Reset our mutex handle (just in case)
        m_hMutex = NULL;
        // The mutex already exists: an instance is already
        // running. Find the app window and bring it to foreground
        HWND hWnd = FindWindowEx(NULL, NULL, m_strClassName, NULL);
        if ( hWnd != NULL ) {
            ShowWindow( hWnd, SW_RESTORE );
            BringWindowToTop( hWnd );
            SetForegroundWindow( hWnd );
        }
    
        // Return failure
        return FALSE;
    }
combobox2013 2013-05-13
  • 打赏
  • 举报
回复
引用 4 楼 stjay 的回复:
[quote=引用 3 楼 zrdongjiao 的回复:] 晕, 有了字符串 messagebox不就可以了吗?
作者想要这种效果 后面运行的实例,把第一个实例的窗口显示出来或放到最前面 当然你弹窗也可以的,随你喜欢
引用 3 楼 zrdongjiao 的回复:
或者通过sendmessage把字符串地址发到要显示的地方不就行了吗
MSDN里说了,要用HWND_BROADCAST,必须用RegisterWindowMessage先注册一个消息 我见过单实例的代码,大多数是用FindWindow + PostMessage方式的 不管你怎样SendMessage,或弹窗,目的都是是告诉用户“程序已经运行”, 有人认为把程序窗口显示出来比较友好。 [/quote] 你说的单实例的findwindow的例子, 可以发个链接,我学习一下吗
stjay 2013-05-13
  • 打赏
  • 举报
回复
引用 3 楼 zrdongjiao 的回复:
晕, 有了字符串 messagebox不就可以了吗?
作者想要这种效果 后面运行的实例,把第一个实例的窗口显示出来或放到最前面 当然你弹窗也可以的,随你喜欢
引用 3 楼 zrdongjiao 的回复:
或者通过sendmessage把字符串地址发到要显示的地方不就行了吗
MSDN里说了,要用HWND_BROADCAST,必须用RegisterWindowMessage先注册一个消息 我见过单实例的代码,大多数是用FindWindow + PostMessage方式的 不管你怎样SendMessage,或弹窗,目的都是是告诉用户“程序已经运行”, 有人认为把程序窗口显示出来比较友好。

16,471

社区成员

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

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

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