Why am I unable to produce a button with this Win32 program? All I have been able to produce is the empty window.
Code:
#include <windows.h> // Declare WndProcedure LRESULT CALLBACK WndProcedure(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND button; MSG Msg; HWND hWnd; HRESULT hRet; WNDCLASSEX WndClsEx; // Populate the WNDCLASSEX structure WndClsEx.cbSize = sizeof(WNDCLASSEX); WndClsEx.style = CS_HREDRAW | CS_VREDRAW; WndClsEx.lpfnWndProc = WndProcedure; WndClsEx.cbClsExtra = 0; WndClsEx.cbWndExtra = 0; WndClsEx.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClsEx.hCursor = LoadCursor(NULL, IDC_ARROW); WndClsEx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); WndClsEx.lpszMenuName = NULL; WndClsEx.lpszClassName = "GlowdotWin32TutorialPartI"; WndClsEx.hInstance = hInstance; WndClsEx.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // Register the class RegisterClassEx(&WndClsEx); // Create the window object hWnd = CreateWindow("GlowdotWin32TutorialPartI", "Glowdot Win32 Tutorial - Part I", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); button = CreateWindow( "BUTTON", // predefined class "OK", // button text WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // styles // Size and position values are given // explicitly, because the CW_USEDEFAULT // constant gives zero values for buttons. 100, // starting x position 100, // starting y position 200, // button width 200, // button height hWnd, // parent window NULL, // No menu hInstance, // Our apps HINSTANCE NULL // pointer not needed ); if ( !button) return 0; // Verify window creation if( !hWnd ) // If the window was not created, return 0; // stop the application // Show the window ShowWindow(hWnd, SW_SHOWNORMAL); ShowWindow(button, SW_SHOWNORMAL); UpdateWindow(hWnd); UpdateWindow(button); // our message pump while( (hRet = GetMessage( &Msg, NULL, 0, 0 )) != 0) { if (hRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&Msg); DispatchMessage(&Msg); } } } ////////////////// // WndProcedure // ////////////////// LRESULT CALLBACK WndProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch(Msg) { case WM_DESTROY: // user wants to exit PostQuitMessage(WM_QUIT); break; default: // Hand off unprocessed messages to DefWindowProc return DefWindowProc(hWnd, Msg, wParam, lParam); } return 0; }
Comment