#include <windows.h>

#define M_HINSTANCE     (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE)


LRESULT CALLBACK EditProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
       static WNDPROC oldProc = NULL;

       if (! oldProc)
               oldProc = (WNDPROC)GetWindowLong(hWnd, GWL_USERDATA);

       switch(msg) {
               case WM_KEYDOWN:
                       if (wParam == VK_RETURN) {
                               MessageBox(NULL, "Enter has been pressed", "Yeaho", MB_OK);
                               return 0;
                       }
                       break;
       }

       return CallWindowProc(oldProc, hWnd, msg, wParam, lParam);
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
       static HWND hWndEdit;
       static HINSTANCE hInstance;
       WNDPROC oldProc;

       switch(msg) {
               case WM_CREATE :
                       hWndEdit = CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_STATICEDGE, TEXT("Edit"), NULL,
                                       WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL,
                                       2, 422, 605, 25,
                                       hWnd, NULL, M_HINSTANCE, NULL);

                       oldProc = (WNDPROC)GetWindowLong(hWndEdit, GWL_WNDPROC);
                       SetWindowLong(hWndEdit, GWL_WNDPROC, (LONG)EditProc);
                       SetWindowLong(hWndEdit, GWL_USERDATA, (LONG)oldProc);
                       return 0;

               case WM_SETFOCUS:
                       SetFocus(hWndEdit);
                       return 0;

               case WM_DESTROY:
                       PostQuitMessage(0);
                       return 0;
       }

       return DefWindowProc(hWnd, msg, wParam, lParam);
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                  PSTR szCmdLine, int iCmdShow)
{
       HWND         hWnd;
       MSG          msg;
       WNDCLASS     wndclass;

       wndclass.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
       wndclass.lpfnWndProc   = WndProc;
       wndclass.cbClsExtra    = 0;
       wndclass.cbWndExtra    = 0;
       wndclass.hInstance     = hInstance;
       wndclass.hIcon         = LoadIcon(hInstance, IDI_APPLICATION);
       wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
       wndclass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
       wndclass.lpszMenuName  = (HMENU)NULL;
       wndclass.lpszClassName = "WindowClass";

       if (! RegisterClass(&wndclass)) {
               MessageBox(NULL, TEXT("Program requires Windows NT!"),
                               "Error",MB_ICONERROR);
               return 0;
       }

       hWnd = CreateWindow("WindowClass", TEXT("-- PeChat --"),
                       WS_DLGFRAME | WS_SYSMENU | WS_MINIMIZEBOX,
                       CW_USEDEFAULT, CW_USEDEFAULT, 800, 498,
                       NULL, NULL, hInstance, NULL);

       ShowWindow(hWnd, iCmdShow);
       UpdateWindow(hWnd);

       while (GetMessage(&msg, NULL, 0, 0)) {
               TranslateMessage(&msg);
               DispatchMessage(&msg);
       }

       return msg.wParam;
}