编写的MFC应用默认会存在可同时打开多个窗口问题,这样有可能产生问题。如何防止打开多次。
FindWindow(L"#32770", L"DemoApp");
// 创建互斥量,确保单实例运行. 不同应用要不一样名字
HANDLE hMutex = ::CreateMutex(NULL, FALSE, L"CDemoAppSingleInstance");
if (hMutex != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
{
// 已经有实例在运行,找到主窗口并激活
HWND hWnd = ::FindWindow(L"#32770", L"DemoApp");
if (hWnd)
{
if (::IsIconic(hWnd)) // 如果最小化,恢复
::ShowWindow(hWnd, SW_RESTORE);
::SetForegroundWindow(hWnd); // 激活窗口
}
return FALSE; // 退出新实例
}
新开窗口,能直接打开之前的。但是标题变化后会找不到窗口。
HWND hWnd = ::FindWindow(L"CDemoAppWndClass", NULL);
在PreCreateWindow 中自定义class。
不会应标题变化而改变,但是再次打开应用时,不会跳到之前窗口。
发自定义MESSAGE 也是如此。