#if 1 #define NOMINMAX #define _CRT_SECURE_NO_WARNINGS #define _CRTDBG_MAP_ALLOC #include #include #include #include #include #pragma comment(lib, "comctl32") HWND g_Scroll; void PaintContent(HWND hwnd, PAINTSTRUCT* pps) { HDC hdc = CreateCompatibleDC(pps->hdc); DeleteDC(hdc); } BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpcs) { g_Scroll = CreateWindowExW(0, WC_SCROLLBAR, NULL, WS_CHILD | WS_VISIBLE | SBS_HORZ, 10, 10, 500, 30, hwnd, (HMENU)NULL, GetModuleHandle(NULL), (PVOID)NULL); return TRUE; } void OnDestroy(HWND hwnd) { PostQuitMessage(0); } void OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { OutputDebugStringA("OnCommand\n"); } static int nProp = 1; BOOL CALLBACK WinPropProc(HWND hwndSubclass, LPWSTR lpszString, HANDLE hData, ULONG_PTR lpwApplicationData) { if (HIWORD(lpszString)) { wprintf(L"WinProp %d: %s", nProp++, lpszString); } else { wprintf(L"WinProp %d: #%X", nProp++, lpszString); } return TRUE; } void OnKeyUp(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) { if (vk == VK_F1) { nProp = 1; wprintf(L"%s\n", L"Beginning enum"); EnumPropsExW(g_Scroll, WinPropProc, NULL); wprintf(L"%s\n", L"End enum"); } } LRESULT OnNotify(HWND hwnd, int idFrom, NMHDR* notify) { OutputDebugStringA("OnNotify\n"); return 0; } void OnSize(HWND hwnd, UINT state, int cx, int cy) { } void OnPaint(HWND hwnd) { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); PaintContent(hwnd, &ps); EndPaint(hwnd, &ps); } void OnPrintClient(HWND hwnd, HDC hdc) { PAINTSTRUCT ps; ps.hdc = hdc; GetClientRect(hwnd, &ps.rcPaint); PaintContent(hwnd, &ps); } LRESULT CALLBACK WndProc(HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { switch (uiMsg) { HANDLE_MSG(hwnd, WM_CREATE, OnCreate); HANDLE_MSG(hwnd, WM_DESTROY, OnDestroy); HANDLE_MSG(hwnd, WM_KEYUP, OnKeyUp); HANDLE_MSG(hwnd, WM_COMMAND, OnCommand); HANDLE_MSG(hwnd, WM_NOTIFY, OnNotify); HANDLE_MSG(hwnd, WM_SIZE, OnSize); HANDLE_MSG(hwnd, WM_PAINT, OnPaint); case WM_PRINTCLIENT: OnPrintClient(hwnd, (HDC)wParam); return 0; } return DefWindowProc(hwnd, uiMsg, wParam, lParam); } BOOL InitApp(void) { WNDCLASS wc; wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = GetModuleHandle(NULL); wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = TEXT("Scratch"); if (!RegisterClass(&wc)) return FALSE; INITCOMMONCONTROLSEX ex = { sizeof(ex), ICC_STANDARD_CLASSES }; InitCommonControlsEx(&ex); return TRUE; } #endif #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' ""version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") int do_gui(int argc, char** argv) { MSG msg; HWND hwnd; InitApp(); hwnd = CreateWindow(TEXT("Scratch"), TEXT("Scratch"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, GetModuleHandle(NULL), 0); ShowWindow(hwnd, SW_SHOW); while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.lParam; }