Code: #include <stdio.h> #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, WPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("HelloWin"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra= 0 ; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR); } hwnd = CreateWindow (szAppName, TEXT ("The Hello Program"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) {TranslateMessage(&msg); DispatchMessage (&msg); } return msg.wParam; } LRESULT CALLBACK Wndproc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; switch (message) /*case WM_CREATE; PlaySound (TEXT("hellowin.wav"), NULL, SND_FILENAME|SND_ASYNCE); return 0; */ {case WM_PAINT: hdc = BeginPaint (hwnd,&ps); GetClientRect (hwnd, &rect); DrawText (hdc, TEXT ("Hello, Win 98!"), -1, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint (hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc (hwnd,message, wParam, lParam); } Now all the code works, with the exception of this: Code: wndclass.lpfnWndProc = WndProc ; and I think it is because of a different os (since Mr. Petzold wrote under win 98/NT) and I am using Win Vista. So what would be the replacement? And is it because it is a long pointer? Thanks