Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Win32 (http://www.go4expert.com/forums/win32/)
-   -   Creating Windows Will Be Easier... (http://www.go4expert.com/forums/creating-windows-easier-t766/)

AhmedHan 28Apr2006 19:20

Creating Windows Will Be Easier...
 
1 Attachment(s)
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.


All times are GMT +5.5. The time now is 16:47.