I recently prepared a window creating header file for Win32 programming. I want to share it with you guys. Code: class CCommon { public: DWORD dwExStyle; char lpClassName[MAX_LOADSTRING]; char lpWindowName[MAX_LOADSTRING]; DWORD dwStyle; int x; int y; int nWidth; int nHeight; HWND hWndParent; HMENU hMenu; HINSTANCE hProgInst; LPVOID lpParam; HWND hWnd; HANDLE hImage; CHAR szImageFile[MAX_LOADSTRING]; CCommon() { dwExStyle = 0; StringCbCopy(lpClassName , MAX_LOADSTRING, "ClassName"); StringCbCopy(lpWindowName , MAX_LOADSTRING, "Caption"); dwStyle = WS_VISIBLE | WS_CHILD; x = 5; y = 5; nWidth = 100; nHeight = 100; hWndParent = HWND_DESKTOP; hMenu = NULL; lpParam = NULL; } VOID SetInitials(INT x, INT y, INT nWidth, INT nHeight) { this->x = x; this->y = y; this->nWidth = nWidth; this->nHeight = nHeight; } void Create(void) { hWnd = CreateWindowEx( (DWORD) dwExStyle, (LPCTSTR) lpClassName, (LPCTSTR) lpWindowName, (DWORD) dwStyle, (int) x, (int) y, (int) nWidth, (int) nHeight, (HWND) hWndParent, (HMENU) hMenu, (HINSTANCE) hProgInst, (LPVOID) lpParam); DWORD ErrCode = GetLastError(); if (hWnd == NULL) { MessageBox(NULL, "Error creating control.", "Error", MB_OK); DebugTest(ErrCode); } } void Enable(bool State) { EnableWindow(hWnd, State); } char * GetText(unsigned long int MaxChars) { char * Buffer = new char[MaxChars]; SendMessage(hWnd, WM_GETTEXT, (WPARAM) MaxChars, (LPARAM) Buffer); return Buffer; delete Buffer; } void SetText(char * Buffer) { if(!SendMessage(hWnd, WM_SETTEXT, (WPARAM) NULL, (LPARAM) Buffer)) { DWORD dwError = GetLastError(); DebugTest("Error setting text"); DebugTest(dwError); } } void SetImage(void) { hImage = LoadImage(hInstance, szImageFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); SendMessage(hWnd, STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) hImage); } }; class CUserDefined : public CCommon { public: WNDCLASSEX WindowClass; CUserDefined() { StringCbCopy(lpClassName , MAX_LOADSTRING, "ClassName"); WindowClass.cbSize = (UINT) sizeof(WNDCLASSEX); //Defaults for WNDCLASSEX WindowClass.style = (UINT) CS_DBLCLKS; //WindowClass.lpfnWndProc = (WNDPROC) WindowProcedure; WindowClass.cbClsExtra = (INT) 0; WindowClass.cbWndExtra = (INT) 0; //WindowClass.hInstance = (HINSTANCE) hProgInst; WindowClass.hIcon = (HICON) LoadIcon (NULL, IDI_APPLICATION); WindowClass.hCursor = (HCURSOR) LoadCursor (NULL, IDC_ARROW); WindowClass.hbrBackground = (HBRUSH) COLOR_BACKGROUND; WindowClass.lpszMenuName = (LPCTSTR) NULL; WindowClass.lpszClassName = (LPCTSTR) lpClassName; WindowClass.hIconSm = (HICON) LoadIcon (NULL, IDI_APPLICATION); } void RegisterAndCreate(void) { if (!RegisterClassEx(&WindowClass)) MessageBox(NULL, "Error registering.", "Error", MB_OK); Create(); } void Enable(bool State) { EnableWindow(hWnd, State); } }; class CEdit : public CCommon { public: CEdit() { StringCbCopy(lpClassName , MAX_LOADSTRING, "EDIT"); } }; class CStatic : public CCommon { public: CStatic() { StringCbCopy(lpClassName , MAX_LOADSTRING, "STATIC"); } }; class CImage : public CCommon { public: //HANDLE hImage; //CHAR szImageFile[MAX_LOADSTRING]; CImage() { StringCbCopy(lpClassName , MAX_LOADSTRING, "STATIC"); dwStyle |= SS_BITMAP; } //VOID SetImage(CHAR * szFileName) //{ // hImage = LoadImage(hInstance, szFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // SendMessage(this->hWnd, STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) hImage); //} //VOID SetImage(VOID) //{ // hImage = LoadImage(hInstance, szImageFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // SendMessage(hWnd, STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) hImage); //} }; class CButton : public CCommon { public: CButton() { StringCbCopy(lpClassName , MAX_LOADSTRING, "BUTTON"); } }; class CFrame : public CCommon { public: CFrame() { StringCbCopy(lpClassName , MAX_LOADSTRING, "BUTTON"); dwStyle |= BS_GROUPBOX; } }; class CCheckBox : public CCommon { public: CCheckBox() { StringCbCopy(lpClassName , MAX_LOADSTRING, "BUTTON"); } }; class CRadioButton : public CCommon { public: CRadioButton() { StringCbCopy(lpClassName , MAX_LOADSTRING, "BUTTON"); dwStyle |= BS_AUTORADIOBUTTON; } }; class CMessageLoop { public: MSG Message; HWND hWnd; UINT wMsgFilterMin; UINT wMsgFilterMax; BOOL bReturnValue; BOOL bContinue; DWORD dwLastError; CMessageLoop() { hWnd = NULL; bContinue = TRUE; wMsgFilterMin = 0; wMsgFilterMax = 0; dwLastError = 0; } VOID Loop(VOID) { do { switch(bReturnValue = GetMessage(&Message, NULL, wMsgFilterMin, wMsgFilterMax)) { case 0: bContinue = FALSE; break; case -1: dwLastError = GetLastError(); //For future use if(IDNO == MessageBox(NULL, "Error occured in the message loop.\nDo you want to continue?", "Message Loop", MB_YESNO | MB_ICONERROR)) bContinue = FALSE; break; default: TranslateMessage(&Message); DispatchMessage(&Message); } } while (bContinue); } }; Here is an example : Code: CUserDefined MainWnd; MainWnd.SetInitials(100, 100, 800, 480); MainWnd.hProgInst = hInstance; MainWnd.WindowClass.hInstance = hInstance; StringCbCopy(MainWnd.lpWindowName, MAX_LOADSTRING, "Window Title"); MainWnd.WindowClass.lpfnWndProc = (WNDPROC) WindowProcedure;MainWnd.RegisterAndCreate(); To create a button on this window : Code: CButton Button; Button.SetInitials(100, 100, 800, 480); Button.hWnd = MainWnd.hWnd; Button.Create(); I am still improving this header. There may be bugs and errors. If you ever happen to come across any problem, or have any suggestions please write under this topic. Note : You don't have to copy/paste. I attached a zip file, just download it.