/************************************************************************************** hellowin.cpp displays "Hello, Windows" in a fully responsive GUI window ***************************************************************************************/ #include <windows.h> //provided by the compiler //------- Callback function that "runs" the program LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); //------- OS point of entry. Replaces main() int WINAPI WinMain (HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nCmdShow) { static char szAppName[] = "HelloWin"; HWND hwnd; MSG msg; WNDCLASS wcl; if (!hPrevInst) { //this is the first running copy of the program //setup the window class for this program wcl.hInstance = hThisInst; //handle to this copy wcl.lpszClassName = szAppName; //window class name wcl.lpfnWndProc = WndProc; //name of function that processes messages wcl.style = CS_HREDRAW | CS_VREDRAW; //window display style wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); //default icon wcl.hCursor = LoadCursor(NULL, IDC_ARROW); //default cursor wcl.lpszMenuName = NULL; //no menu wcl.cbClsExtra = 0; //no additional class data wcl.cbWndExtra = 0; //no additional window data wcl.hbrBackground = GetStockObject(WHITE_BRUSH); //window background fill color if(!RegisterClass (&wcl)) return 0; } //after verifying that the window class exists, create a window based on it //this is actually a function call, but because it has so many parameters, we //usually format it as if it were a statement, including indents hwnd = CreateWindow ( szAppName, // Window class "The Hello Program", // string for the Title Bar WS_OVERLAPPEDWINDOW, // Window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size HWND_DESKTOP, // parent window handle NULL, // window menu handle hThisInst, // program instance handle NULL // additional creation parameters ); ShowWindow(hwnd, nCmdShow); 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; //device context handle PAINTSTRUCT ps; //paint structure RECT rect; //rectangle parameters switch (message) { case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect); DrawText(hdc, "Hello, Windows!", -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); }