/*++ * * Hello.c * Simple 16-bit Windows App * * Copyright (c) 1991, Microsoft Corporation * * History: * Created 27-Jan-1991 by Jeff Parsons (jeffpar) * From "Programming Windows" by C. Petzold, p.16-19 * * Updated 02-May-1991 by Jeff Parsons (jeffpar) * To serve as a bare-bones shell (user-friendly of course) --*/ #include #include "hello.h" #define BUTTON_REVERSI 1 // button IDs #define BUTTON_WIDTH 80 // width and height for all buttons #define BUTTON_HEIGHT 20 BOOL FAR PASCAL EnumWindowFunc(HWND hwnd, DWORD lParam) { char achTmp[80]; wsprintf(achTmp, "HELLO: Window %04x enumerated\n", hwnd); OutputDebugString(achTmp); return TRUE; // return non-zero to continue enumeration } LONG FAR PASCAL WndProc(HWND hwnd, WORD wMsg, int wParam, LONG lParam) { HDC hdc; PAINTSTRUCT ps; HANDLE hTask; char achTmp[80]; static char achTextOut[] = "The User-Friendly WOW Shell"; switch(wMsg) { case WM_CREATE: CreateWindow("Button", "Reversi", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 8, 8 + BUTTON_REVERSI*24, BUTTON_WIDTH, BUTTON_HEIGHT, hwnd, BUTTON_REVERSI, ((LPCREATESTRUCT)lParam)->hInstance, NULL); return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 8, 8, achTextOut, sizeof(achTextOut)-1); EndPaint(hwnd, &ps); return 0; case WM_COMMAND: // See if the command is from a menu if (LOWORD(lParam) == 0) { switch(wParam) { case IDM_BREAKPOINT: _asm int 3 // Hokey timing test -JTP GetParent(hwnd); { int i; for (i=0; i<10000; i++) GetParent(hwnd); } return 0; case IDM_ENUMWINDOWS: OutputDebugString("HELLO: Enumerating windows\n"); EnumWindows(EnumWindowFunc, 0x10000001); return 0; case IDM_ENUMCHILDWINDOWS: wsprintf(achTmp, "HELLO: Enumerating child windows for hwnd %04x\n", hwnd); OutputDebugString(achTmp); EnumChildWindows(hwnd, EnumWindowFunc, 0x10000002); return 0; case IDM_ENUMTASKWINDOWS: hTask = GetCurrentTask(); wsprintf(achTmp, "HELLO: Enumerating task windows for task %04x\n", hTask); OutputDebugString(achTmp); EnumTaskWindows(hTask, EnumWindowFunc, 0x10000003); return 0; } } // The command must be a button notification // (or something else I'm too ignorant to know about -JTP) else { if (wParam == BUTTON_REVERSI) { // _asm int 3 WinExec("REVERSI.EXE", SW_SHOWNORMAL); // _asm int 3 } return 0; } break; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, wMsg, wParam, lParam); } int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmd, int iCmd) { HWND hwnd; MSG msg; WNDCLASS wc; static char szApp[] = "WOW"; if (!hPrevInstance) { wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground= GetStockObject(WHITE_BRUSH); wc.lpszMenuName = szApp; wc.lpszClassName= szApp; if (!RegisterClass(&wc)) return 0; } hwnd = CreateWindow( szApp, // window class name szApp, // window caption (WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME) | WS_VISIBLE, 50, 50, 250, 128, NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL // creation parameters ); if (!hwnd) return 0; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }