Home | Step1 | Step2 | Step3 | Step4 | Step5 |
Introduction |
In the last couple of years the freeware community has released several
compilers and front ends. The one I like the most is nowadays Codeblocks. It is
a front end for the MingW compiler. You can download it here. Be sure to download the full version
including the Mingw compiler.
I may warn
you that C and C++ are not the easiest languages to start with. Buy a good
book and/or read some tutorials on the net! I will comment the code as much as I
can, but I will not teach you programming from the ground up!
![]() |
This is how Codeblocks looks when you start it.
You can open an old project or start a
new. |
This is how it looks when you have opened or created a project.
You have all the source files in the left pane and source code to the right. Below you have a status window where messages from the compiler and linker shows. |
![]() |
Now you got a very powerful compiler. You can make console (runnable in a "dos" window) programs, or full fledged windows programs with toolbars, statusbars, dialogs and menus.
Lets start! |
First we need to test the compiler. We start with a simple window with no
functionality at all.
Download the source and
projectfile.
#include <windows.h> /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /* Make the class name into a global variable */ char szClassName[ ] = "WindowsApp"; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int cmdShow) { HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */ /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX); /* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; /* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0; /* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Windows App", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ ShowWindow (hwnd, cmdShow); /* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; } /* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }If this compiles with no problems - Congratulations! You are now a Windows programmer!
![]() |
Well, not much of a program eh?
At least you can close/minimize/maximize the window. By changing the source you can change the size of the window, the placement, window title, icon, cursor etc. Take look in the Win32Api help file and search for LoadIcon, LoadCursor, RegisterClassEx / WNDCLASSEX. |
If you got problems - look in the Forum for Codeblocks and don't forget to search the Forum first. Almost all "newbie" problems has been covered before.