// ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { int id; HDC hdc; PAINTSTRUCT ps; LPCTSTR lpszStr = TEXT("猫でもわかるWindowsプログラミング"); switch (msg) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // MyTextOut関数がDLL内から呼び出さる MyTextOut(hdc, 10, 10, lpszStr); EndPaint(hWnd, &ps); break; case WM_CLOSE: id = MessageBox(hWnd, TEXT("終了してもよろしいですか"), TEXT("終了確認"), MB_YESNO); if (id == IDYES) DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }
BOOL CALLBACK MyWindowEnumProc ( HWND hwnd, LPARAM lParam ) { TCHAR wndcaption[1024], buf[1024]; EnumData* ped = (EnumData*)lParam; GetWindowText ( hwnd, wndcaption, sizeof(wndcaption)/sizeof(*wndcaption) ); _sntprintf ( buf, sizeof(buf)/sizeof(*buf), _T("%x - %s"), hwnd, wndcaption ); MyTextOut ( ped->hdc, ped->x, ped->y, buf ); ped->y += 13; return TRUE; }
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hDC; RECT rect; TCHAR buf[100]; EnumData ed; switch(msg) { case WM_PAINT: hDC = BeginPaint(hWnd, &ps); SelectObject(hDC, tf); GetClientRect ( hWnd, &rect ); FillRect ( hDC, &rect, hbrBackground ); MyTextOut ( hDC, 10, 10, "EnumWnd Test" ); _sntprintf ( buf, sizeof(buf)/sizeof(*buf), _T("My HWND: %x"), hWnd ); MyTextOut ( hDC, 10, 30, buf ); ed.hdc = hDC; ed.x = 10; ed.y = 70; switch ( test ) { case 1: MyTextOut ( hDC, 10, 50, _T("Test #1: EnumWindows()") ); EnumWindows ( MyWindowEnumProc, (LPARAM)&ed ); break; case 2: MyTextOut ( hDC, 10, 50, _T("Test #2: EnumChildWindows()") ); EnumChildWindows ( hWnd, MyWindowEnumProc, (LPARAM)&ed ); break; case 3: MyTextOut ( hDC, 10, 50, _T("Test #3: EnumDesktopWindows") ); EnumDesktopWindows ( NULL, MyWindowEnumProc, (LPARAM)&ed ); break; case 4: MyTextOut ( hDC, 10, 50, _T("Test #4: EnumThreadWindows") ); EnumThreadWindows ( GetCurrentThreadId(), MyWindowEnumProc, (LPARAM)&ed ); break; default: MyTextOut ( hDC, 10, 50, _T("Press any of the number keys from 1 to 4 to run a test") ); MyTextOut ( hDC, 10, 70, _T("Press the left and right mouse buttons to cycle through the tests") ); break; } EndPaint(hWnd, &ps); break; case WM_CHAR: test = (TCHAR)wParam - '1' + 1; RedrawWindow ( hWnd, NULL, NULL, RDW_INVALIDATE ); break; case WM_LBUTTONDOWN: if ( ++test > 4 ) test = 1; RedrawWindow ( hWnd, NULL, NULL, RDW_INVALIDATE ); break; case WM_RBUTTONDOWN: if ( !--test ) test = 4; RedrawWindow ( hWnd, NULL, NULL, RDW_INVALIDATE ); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, msg, wParam, lParam); } return 0; }