Basic WinMain function

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hInstancePrev,
    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; // set instance handle
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;

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

    hwnd = CreateWindow(szAppName,
                        TEXT("Hello Windows"),
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        400,
                        200,
                        NULL,
                        NULL,
                        hInstance,
                        NULL);

    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);
    CenterWindow(hwnd);

    while (GetMessage( &msg, NULL, 0, 0) > 0) {
        TranslateMessage( &msg);
        DispatchMessage( &msg);
    }
    return msg.wParam;
}
		




Creating a window

hwnd = CreateWindow(
	szAppName,
	TEXT("Window Caption"),
	WS_OVERLAPPEDWINDOW,
	CW_USEDEFAULT, // initial X position
	CW_USEDEFAULT, // initial Y position
	400,        // Width
	200,        // Height
	NULL,       // parent window handle
	NULL,       // window menu handle
	hInstance,  // program instance handle
	NULL) ;     // creation parameters


ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
CenterWindow(hwnd);
		




Window Styles

  WS_BORDER
  WS_CAPTION
  WS_CHILDWINDOW
  WS_CLIPCHILDREN
  WS_CLIPSIBLINGS
  WS_DISABLED
  WS_DLGFRAME
  WS_GROUP
  WS_HSCROLL
  WS_ICONIC
  WS_MAXIMIZE
  WS_MAXIMIZEBOX
  WS_MINIMIZE
  WS_MINIMIZEBOX
  WS_OVERLAPPED
  WS_OVERLAPPEDWINDOW
  WS_POPUP
  WS_POPUPWINDOW
  WS_SIZEBOX
  WS_SYSMENU
  WS_TABSTOP
  WS_THICKFRAME
  WS_TILED
  WS_TILEDWINDOW
  WS_VISIBLE
  WS_VSCROLL
  

Basic Window Procedure

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    switch (iMsg)
    {
    case WM_CREATE:
        break;
    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);
		
        // All painting occurs here, between BeginPaint and EndPaint.
		
        FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
        EndPaint(hwnd, &ps);
    }
        break;
    case WM_DESTROY :
        PostQuitMessage(0);
        break;
    }
    return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}