HWND g_hMain = NULL;
#define ZPOS_FLAGS (SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOACTIVATE | SWP_NOSENDCHANGING)
void CALLBACK WinEventProc(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
if (event == EVENT_SYSTEM_MINIMIZEEND) //结束
{
::SetWindowPos(g_hMain, HWND_NOTOPMOST, 0, 0, 0, 0, ZPOS_FLAGS);
::SetWindowPos(g_hMain, HWND_BOTTOM, 0, 0, 0, 0, ZPOS_FLAGS);
}
if (event == EVENT_SYSTEM_MINIMIZESTART) //开始
{
::SetWindowPos(g_hMain, HWND_TOPMOST, 0, 0, 0, 0, ZPOS_FLAGS);
}
}
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
::CoInitialize(NULL);
CPaintManagerUI::SetInstance(hInstance);
CPaintManagerUI::SetCurrentPath(CPaintManagerUI::GetInstancePath());
CPaintManagerUI::SetResourcePath(L"Skin");
CFrameWnd *pFrame = new CFrameWnd(_T("MainWnd.xml"));
pFrame->Create(NULL, _T("Redrain半透明窗体demo"), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
g_hMain = pFrame->GetHWND();
HWINEVENTHOOK WinEventHook = ::SetWinEventHook(
EVENT_SYSTEM_MINIMIZESTART,
EVENT_SYSTEM_MINIMIZEEND,
nullptr,
WinEventProc,
0,
0,
WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
pFrame->ShowModal();
delete pFrame;
if (NULL != WinEventHook){ ::UnhookWinEvent(WinEventHook); }
::CoUninitialize();
return 0;
}