1. This forum is in read-only mode.

Programming Windows Charles Petzold Code Help

Discussion in 'Computers & Modding' started by vivo, Feb 5, 2012.

  1. vivo

    vivo Well-Known Member

    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