• 启动程序(第二次开启程序,显示第一次打开的程序)


          很多时候我们会限制程序只能开启一个,一般我们会用全局命名互斥量来实现这个任务。

    如果程序没有界面,这样做可以很好实现。但是如果程序有界面呢,用户在双点桌面的快捷方式时,程序不能开启,最多只能提示程序已开启。这样就算完事了。但对用户来说,还要在任务栏上找个半天(也许这时个任务栏已全部都排满了。所以这对用户是很大的不方便。

        下面写的是我最近看到的一个方案,它在第二次启动时最就第一次打开的界面显示在最前面。用户操作很方便多

    // CAtlFileMapping<HWND> m_mapping; map里放的时程序开启后的主界面窗口句柄

    #define APP_OBJECT_NAME _T(“asfasdfadsfadsfasd”)

    if (m_mapping.GetHandle())

        return TRUE;

    BOOL bAlreadExisted = FALSE;

    BOOL bRet = mapping.MapShareMem(sizeof(HWND), APP_OBJECT_NAME, &bAlreadExisted);

    if (FAILED(bRet))

        return bRet;

    if (bAlreadyExisted) {

        HWND hWnd =  *((HWND *)m_mapping);

        if (!::IsWindowVisible(hWnd))

            ::ShowWindow(hWnd, SW_SHOW);

        if (::IsIconic(hWnd))

            ::SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE | HTCAPTION, 0);

        ::SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0 SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOACTIVATE);

        ::SetForegroundWindow(hWnd);

        ::SetFocus(hWnd);

        return FALSE

    }

  • 相关阅读:
    VC++数据类型最佳解释
    C++类型转换
    内核态和用户态
    AZMan使用经验点滴
    解析#pragma指令(转)
    htc使用心得
    在VS.net 2008中利用ATL来创建COM关于接口文件的引用变动
    移植Reporting Service报表到项目报表
    const常量、指向常量的指针和常量指针(转)
    extern用法详解(转)
  • 原文地址:https://www.cnblogs.com/Mingxx/p/2275068.html
Copyright © 2020-2023  润新知