Hi
I am learning windows programming in C++ . I just did a tutorial learning simply making a window appear & I am surprised by the all the things necessary to make a window appear. Maybe its just the tutorial that is too complicated with unecessary code.
Is all this code necessary just to create a window?
Is there a simpler code, is all windows coding this complicated? Does anyone know of any good windows programming tutorials? :)
#include "winnie.h"
// This is the entry point of every Windows program
int WINAPI WinMain
(HINSTANCE hInst, HINSTANCE hPrevInst, char * cmdParam, int cmdShow)
{
char className [] = "Winnie";
// Define a Window Class and register it under the name "Winnie"
WinClass winClass (WindowProcedure, className, hInst);
winClass.Register ();
// Create and show a window
WinMaker win ("Hello Windows!", className, hInst);
win.Show (cmdShow);
MSG msg;
int status;
// Keep pumping messages--they end up in our Window Procedure
while ((status = ::GetMessage (&msg, 0, 0, 0)) != 0)
{
if (status == -1)
return -1;
::DispatchMessage (&msg);
}
return msg.wParam;
}
WinClass::WinClass (WNDPROC wndProc, char const * className, HINSTANCE hInst)
{
_class.style = 0;
_class.lpfnWndProc = wndProc; // Window Procedure: mandatory
_class.cbClsExtra = 0;
_class.cbWndExtra = 0;
_class.hInstance = hInst; // owner of the class: mandatory
_class.hIcon = 0;
_class.hCursor = ::LoadCursor (0, IDC_ARROW); // optional
_class.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // optional
_class.lpszMenuName = 0;
_class.lpszClassName = className; // mandatory
}
WinMaker::WinMaker
(char const * caption, char const * className, HINSTANCE hInstance)
{
_hwnd = ::CreateWindow (
className, // name of a registered window class
caption, // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // x position
CW_USEDEFAULT, // y position
CW_USEDEFAULT, // witdh
CW_USEDEFAULT, // height
0, // handle to parent window
0, // handle to menu
hInstance, // application instance
0 ); // window creation data
}
// Window Procedure called by Windows with all kinds of messages
LRESULT CALLBACK WindowProcedure
(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
// In this simple program, this is the only message we are processing
case WM_DESTROY:
::PostQuitMessage (0);
return 0; // return zero when processed
}
// All the unprocessed messages go there, to be dealt in some default way
return ::DefWindowProc (hwnd, message, wParam, lParam );
}