Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

Using Window Classes

This topic has a code example that shows how to register a local window and use it to create a main window.

Each process must register its own window classes. To register an application local class, use the RegisterClassEx function. You must define the window procedure, fill the members of the WNDCLASSEX structure, and then pass a pointer to the structure to the RegisterClassEx function.

The following example shows how to register a local window class and use it to create a main window.

#include <windows.h> 
 
// Global variable 
 
HINSTANCE hinst; 
 
// Function prototypes. 
 
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); 
InitApplication(HINSTANCE); 
InitInstance(HINSTANCE, int); 
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); 
 
// Application entry point. 
 
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, 
 LPSTR lpCmdLine, int nCmdShow) 
{ 
 MSG msg; 
 
 if (!InitApplication(hinstance)) 
 return FALSE; 
 
 if (!InitInstance(hinstance, nCmdShow)) 
 return FALSE; 
 
 BOOL fGotMessage;
 while ((fGotMessage = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0 && fGotMessage != -1) 
 { 
 TranslateMessage(&msg); 
 DispatchMessage(&msg); 
 } 
 return msg.wParam; 
 UNREFERENCED_PARAMETER(lpCmdLine); 
} 
 
BOOL InitApplication(HINSTANCE hinstance) 
{ 
 WNDCLASSEX wcx; 
 
 // Fill in the window class structure with parameters 
 // that describe the main window. 
 
 wcx.cbSize = sizeof(wcx); // size of structure 
 wcx.style = CS_HREDRAW | 
 CS_VREDRAW; // redraw if size changes 
 wcx.lpfnWndProc = MainWndProc; // points to window procedure 
 wcx.cbClsExtra = 0; // no extra class memory 
 wcx.cbWndExtra = 0; // no extra window memory 
 wcx.hInstance = hinstance; // handle to instance 
 wcx.hIcon = LoadIcon(NULL, 
 IDI_APPLICATION); // predefined app. icon 
 wcx.hCursor = LoadCursor(NULL, 
 IDC_ARROW); // predefined arrow 
 wcx.hbrBackground = GetStockObject( 
 WHITE_BRUSH); // white background brush 
 wcx.lpszMenuName = "MainMenu"; // name of menu resource 
 wcx.lpszClassName = "MainWClass"; // name of window class 
 wcx.hIconSm = LoadImage(hinstance, // small class icon 
 MAKEINTRESOURCE(5),
 IMAGE_ICON, 
 GetSystemMetrics(SM_CXSMICON), 
 GetSystemMetrics(SM_CYSMICON), 
 LR_DEFAULTCOLOR); 
 
 // Register the window class. 
 
 return RegisterClassEx(&wcx); 
} 
 
BOOL InitInstance(HINSTANCE hinstance, int nCmdShow) 
{ 
 HWND hwnd; 
 
 // Save the application-instance handle. 
 
 hinst = hinstance; 
 
 // Create the main window. 
 
 hwnd = CreateWindow( 
 "MainWClass", // name of window class 
 "Sample", // title-bar string 
 WS_OVERLAPPEDWINDOW, // top-level window 
 CW_USEDEFAULT, // default horizontal position 
 CW_USEDEFAULT, // default vertical position 
 CW_USEDEFAULT, // default width 
 CW_USEDEFAULT, // default height 
 (HWND) NULL, // no owner window 
 (HMENU) NULL, // use class menu 
 hinstance, // handle to application instance 
 (LPVOID) NULL); // no window-creation data 
 
 if (!hwnd) 
 return FALSE; 
 
 // Show the window and send a WM_PAINT message to the window 
 // procedure. 
 
 ShowWindow(hwnd, nCmdShow); 
 UpdateWindow(hwnd); 
 return TRUE; 
 
} 

Registering an application global class is similar to registering an application local class, except that the style member of the WNDCLASSEX structure must specify the CS_GLOBALCLASS style.


Feedback

Was this page helpful?

Additional resources