static void app_run_message_loop() { MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { if (msg.message == AM_INVOKE && msg.hwnd == NULL) { INVOKE_LATER_FUNC func = (INVOKE_LATER_FUNC)msg.wParam; void *context = (void *)msg.lParam; func(context); } else { TranslateMessage(&msg); DispatchMessage(&msg); } autorelease_cleanup(); } }
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int nShowCmd) { MSG msg; HWND hwnd; g_hinst = hinst; g_dwMainThreadId = GetCurrentThreadId(); // create message queue PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE); if (!InitApp()) return 0; AllocConsole(); freopen("CONOUT$", "wb", stdout); project_add_new("c:\\Dropbox\\GitHub\\LiveReload2"); project_add_new("c:\\Dropbox\\GitHub\\keymapper_tip"); g_hMainWindowBgBitmap = (HBITMAP) LoadImage(g_hinst, MAKEINTRESOURCE(IDB_MAIN_WINDOW_BG), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); g_hListBoxSelectionBgBitmap = (HBITMAP) LoadImage(g_hinst, MAKEINTRESOURCE(IDB_LISTBOX_SELECTION_BG), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); g_hProjectPaneBgBitmap = (HBITMAP) LoadImage(g_hinst, MAKEINTRESOURCE(IDB_MAINWND_PROJECT_PANE_BG), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); g_hProjectIcon = (HICON) LoadImage(g_hinst, MAKEINTRESOURCE(IDI_FOLDER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); g_hNormalFont12 = CreateFont(-12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Lucida Sans Unicode"); int width = kWindowWidth + kOuterShadowLeft + kOuterShadowRight; int height = kWindowHeight + kOuterShadowTop + kOuterShadowBottom; MONITORINFO mi; mi.cbSize = sizeof(mi); GetMonitorInfo(MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY), &mi); RECT rcToCenterIn = mi.rcWork; int left = (rcToCenterIn.right + rcToCenterIn.left) / 2 - width / 2; int top = (rcToCenterIn.bottom + rcToCenterIn.top) / 2 - height / 2; hwnd = CreateWindowEx(WS_EX_LAYERED, L"LiveReload", L"LiveReload", WS_POPUP, left, top, width, height, NULL, NULL, hinst, 0); ShowWindow(hwnd, nShowCmd); while (GetMessage(&msg, NULL, 0, 0)) { if (msg.message == AM_INVOKE && msg.hwnd == NULL) { INVOKE_LATER_FUNC func = (INVOKE_LATER_FUNC)msg.wParam; void *context = (void *)msg.lParam; func(context); } else { TranslateMessage(&msg); DispatchMessage(&msg); } autorelease_cleanup(); } return 0; }