518抽奖软件源码之:主窗口上含对话框时如何最小化

来源:互联网 发布:js 设置高度 编辑:程序博客网 时间:2024/05/16 15:57

在开发“518抽奖软件”的时候,需要用到主窗口上含对话框时最小化的功能。 本来很简单的一行代码 ShowWindow(SW_MINIMIZE) 即可,但是这个代码在XP系统下不能用,一旦执行,最小化后就无法再恢复窗口了(窗口无法再打开了)。 所以在XP下采用了其它的方法,详情如下:

窗口创建阶段源码

if (g_app.m_osVer <= 5){WNDCLASSEX wcex = { 0 };wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;wcex.lpfnWndProc = (WNDPROC)Proc_minimized;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MY518CJ);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wcex.lpszMenuName = NULL;wcex.lpszClassName = L"518cjMinimized";wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);RegisterClassEx(&wcex);m_hMinimized = CreateWindow(L"518cjMinimized", g_title, WS_POPUP, 0, 0, 300, 150, NULL, NULL, m_hInst, NULL);}

主窗口上含对话框时最小化源码

static list  wnds;void Tapp::minimize_app(){if (g_app.m_osVer >= 6){ShowWindow(m_hMain, SW_MINIMIZE);return;}wnds.clear();HWND h = GetLastActivePopup(m_hMain);if (h != m_hMain){wnds.push_back(h);REGET:h = GetWindow(h, GW_OWNER);if (h && h != m_hMain){wnds.push_back(h);goto REGET;}}list::iterator pos = wnds.begin();while (pos != wnds.end()){ShowWindow((*pos), SW_HIDE);pos++;}ShowWindow(m_hMain, SW_HIDE);ShowWindow(m_hMinimized, SW_MINIMIZE);}LRESULT CALLBACK Proc_minimized(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){PAINTSTRUCT ps;switch (message){case WM_QUERYOPEN:{list::iterator pos = wnds.begin();while (pos != wnds.end()){ShowWindow((*pos), SW_SHOW);pos++;}ShowWindow(g_app.m_hMain, SW_SHOW);ShowWindow(hWnd, SW_HIDE);break;}case WM_PAINT:BeginPaint(hWnd, &ps);EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}
阅读全文
0 0
原创粉丝点击