Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. change background color of dialog

change background color of dialog

Scheduled Pinned Locked Moved C / C++ / MFC
helptutorial
17 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Z zhiyuan16

    Dear all how to change the background color of dialog, i have done some code below, pls help me to check, however i couldn't change the background color after i picked the color. thanks.

    void CMeiTengDlg::OnBnClickedChangebkcolor()
    {
    // TODO: Add your control notification handler code here
    CColorDialog dlg;
    if (dlg.DoModal() == IDOK)
    COLORREF color=dlg.GetColor();
    //change my background color of dialog code here

    }

    J Offline
    J Offline
    Jijo Raj
    wrote on last edited by
    #4

    Check this[^] one too. Regards, Jijo.

    _____________________________________________________ http://weseetips.com[^] Visual C++ tips and tricks. Updated daily.

    1 Reply Last reply
    0
    • Z zhiyuan16

      thanks, malli i would like to use this way what i mentioned in the previous post. how can i achieve it? thanks a lot.

      M Offline
      M Offline
      Malli_S
      wrote on last edited by
      #5

      Delete the old brush and update the brush color by creating the new one

      m_brush.CreateSolidBrush(RGB(255, 255, 255));

      with the selected color.

      [Delegates]      [Virtual Desktop]      [Tray Me !]
      -Malli...! :rose:****

      Z 1 Reply Last reply
      0
      • M Malli_S

        Delete the old brush and update the brush color by creating the new one

        m_brush.CreateSolidBrush(RGB(255, 255, 255));

        with the selected color.

        [Delegates]      [Virtual Desktop]      [Tray Me !]
        -Malli...! :rose:****

        Z Offline
        Z Offline
        zhiyuan16
        wrote on last edited by
        #6

        thanks malli don't understand well, i wanna change different color for different person, when someone click change background color. so i need a changbackground(COLORREF color), don't how to write down it. thanks. could you help me. thanks. i tried your that way, just can change once.

        M 1 Reply Last reply
        0
        • Z zhiyuan16

          thanks malli don't understand well, i wanna change different color for different person, when someone click change background color. so i need a changbackground(COLORREF color), don't how to write down it. thanks. could you help me. thanks. i tried your that way, just can change once.

          M Offline
          M Offline
          Malli_S
          wrote on last edited by
          #7

          I hope following code snippet will help you. I've not included the details in depth. Just try it out.

          class CMeiTengDlg: public CDialog
          {
          ...
          //Add the member variable.
          protected:
          CBrush m_objMyBrush;

          ...
          };

          BOOL CMyDlg::OnInitDialog()
          {
          ...
          //initialize it with default brush color (back color)
          m_objMyBrush.CreateSolidBrush(RGB(255, 255, 255)); // color white brush
          ...
          }

          BOOL CMyDlg::DistroyWindow()
          {
          //delete it while distroying the dialog.
          m_objMyBrush.DeleteObject();
          }

          HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
          {
          /*
          ** No need to do this!
          **
          ** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
          */

          /*
          ** Return your brush.
          */
          return m_objMyBrush;
          }

          void CMeiTengDlg::OnBnClickedChangebkcolor()
          {
          // TODO: Add your control notification handler code here
          CColorDialog dlg;
          if (dlg.DoModal() == IDOK)
          COLORREF color=dlg.GetColor();
          //change my background color of dialog code here
          changbackground(color);
          }

          //probably this is what you were searching for
          void CMeiTengDlg::changbackground(COLORREF color)
          {
          //change the brush color
          m_objMyBrush.DeleteObject();
          m_objMyBrush.CreateSolidBrush( color );
          Invalidate(TRUE);
          }

          [Delegates]      [Virtual Desktop]      [Tray Me !]
          -Malli...! :rose:****

          Z 1 Reply Last reply
          0
          • M Malli_S

            I hope following code snippet will help you. I've not included the details in depth. Just try it out.

            class CMeiTengDlg: public CDialog
            {
            ...
            //Add the member variable.
            protected:
            CBrush m_objMyBrush;

            ...
            };

            BOOL CMyDlg::OnInitDialog()
            {
            ...
            //initialize it with default brush color (back color)
            m_objMyBrush.CreateSolidBrush(RGB(255, 255, 255)); // color white brush
            ...
            }

            BOOL CMyDlg::DistroyWindow()
            {
            //delete it while distroying the dialog.
            m_objMyBrush.DeleteObject();
            }

            HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
            {
            /*
            ** No need to do this!
            **
            ** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
            */

            /*
            ** Return your brush.
            */
            return m_objMyBrush;
            }

            void CMeiTengDlg::OnBnClickedChangebkcolor()
            {
            // TODO: Add your control notification handler code here
            CColorDialog dlg;
            if (dlg.DoModal() == IDOK)
            COLORREF color=dlg.GetColor();
            //change my background color of dialog code here
            changbackground(color);
            }

            //probably this is what you were searching for
            void CMeiTengDlg::changbackground(COLORREF color)
            {
            //change the brush color
            m_objMyBrush.DeleteObject();
            m_objMyBrush.CreateSolidBrush( color );
            Invalidate(TRUE);
            }

            [Delegates]      [Virtual Desktop]      [Tray Me !]
            -Malli...! :rose:****

            Z Offline
            Z Offline
            zhiyuan16
            wrote on last edited by
            #8

            thanks Malli i want to confirm i just wanna change my CMeiTengDlg background color, what mentioned above is CMyDlg, CAboutDlg, so i no need to add one class, right? so i followed your idea, but after compiled, one error is c:\documents and settings\zhiyuan li\desktop\meiteng\meiteng\meitengdlg.cpp(163) : error C4716: 'CMeiTengDlg::DistroyWindow' : must return a value Build log was saved at "file://c:\Documents and Settings\ZhiYuan Li\Desktop\MeiTeng\MeiTeng\Debug\BuildLog.htm" MeiTeng - 1 error(s), 0 warning(s) by the way,could i get your email, and keep in touch. thanks.

            M 1 Reply Last reply
            0
            • Z zhiyuan16

              thanks Malli i want to confirm i just wanna change my CMeiTengDlg background color, what mentioned above is CMyDlg, CAboutDlg, so i no need to add one class, right? so i followed your idea, but after compiled, one error is c:\documents and settings\zhiyuan li\desktop\meiteng\meiteng\meitengdlg.cpp(163) : error C4716: 'CMeiTengDlg::DistroyWindow' : must return a value Build log was saved at "file://c:\Documents and Settings\ZhiYuan Li\Desktop\MeiTeng\MeiTeng\Debug\BuildLog.htm" MeiTeng - 1 error(s), 0 warning(s) by the way,could i get your email, and keep in touch. thanks.

              M Offline
              M Offline
              Malli_S
              wrote on last edited by
              #9

              Sorry Zhiyuan16, I forgot to replace the CMyDls with your dialog class name. And you should return value from DestroyWindow function. I had deleted rest of the code (and put ....) considering you'd put the required one. For details have a look at here[^]

              [Delegates]      [Virtual Desktop]      [Tray Me !]
              -Malli...! :rose:****

              Z 1 Reply Last reply
              0
              • M Malli_S

                Sorry Zhiyuan16, I forgot to replace the CMyDls with your dialog class name. And you should return value from DestroyWindow function. I had deleted rest of the code (and put ....) considering you'd put the required one. For details have a look at here[^]

                [Delegates]      [Virtual Desktop]      [Tray Me !]
                -Malli...! :rose:****

                Z Offline
                Z Offline
                zhiyuan16
                wrote on last edited by
                #10

                thanks Malli comiling had no problem, but still no color change of background after i chose different color. where is problem, Malli? thanks

                Z 1 Reply Last reply
                0
                • Z zhiyuan16

                  thanks Malli comiling had no problem, but still no color change of background after i chose different color. where is problem, Malli? thanks

                  Z Offline
                  Z Offline
                  zhiyuan16
                  wrote on last edited by
                  #11

                  dear Malli could you help me to check is it right below: thanks a lot BOOL CMeiTengDlg::OnDestroyWindow() { //delete it while distroying the dialog. m_objMyBrush.DeleteObject(); return TRUE; } HBRUSH CMeiTengDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { return m_objMyBrush; } void CMeiTengDlg::SetBackgroundColor(COLORREF color) { m_objMyBrush.DeleteObject(); m_objMyBrush.CreateSolidBrush( color ); //redraw Invalidate(TRUE); } void CMeiTengDlg::OnBnClickedChangebkcolor() { // TODO: Add your control notification handler code here CColorDialog dlg; if (dlg.DoModal() == IDOK) color=dlg.GetColor(); //change my background color of dialog code here SetBackgroundColor(color); }

                  M 1 Reply Last reply
                  0
                  • Z zhiyuan16

                    dear Malli could you help me to check is it right below: thanks a lot BOOL CMeiTengDlg::OnDestroyWindow() { //delete it while distroying the dialog. m_objMyBrush.DeleteObject(); return TRUE; } HBRUSH CMeiTengDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { return m_objMyBrush; } void CMeiTengDlg::SetBackgroundColor(COLORREF color) { m_objMyBrush.DeleteObject(); m_objMyBrush.CreateSolidBrush( color ); //redraw Invalidate(TRUE); } void CMeiTengDlg::OnBnClickedChangebkcolor() { // TODO: Add your control notification handler code here CColorDialog dlg; if (dlg.DoModal() == IDOK) color=dlg.GetColor(); //change my background color of dialog code here SetBackgroundColor(color); }

                    M Offline
                    M Offline
                    Malli_S
                    wrote on last edited by
                    #12

                    The above code worked for me (only 'color' variable I found missing). Do you have any overlapping control on your dialog ? And I think you should call return CDialog::DestroyWindow(); in your dialog's DistroyWindow();

                    [Delegates]      [Virtual Desktop]      [Tray Me !]
                    -Malli...! :rose:****

                    Z 1 Reply Last reply
                    0
                    • M Malli_S

                      The above code worked for me (only 'color' variable I found missing). Do you have any overlapping control on your dialog ? And I think you should call return CDialog::DestroyWindow(); in your dialog's DistroyWindow();

                      [Delegates]      [Virtual Desktop]      [Tray Me !]
                      -Malli...! :rose:****

                      Z Offline
                      Z Offline
                      zhiyuan16
                      wrote on last edited by
                      #13

                      no other control.. Malli could you check for me the following my dialog .h and .cpp files thanks. CMeiTengDlg.h file

                      // MeiTengDlg.h : header file
                      //

                      #pragma once
                      #include "afxwin.h"

                      // CMeiTengDlg dialog
                      class CMeiTengDlg : public CDialog
                      {
                      // Construction
                      public:
                      CMeiTengDlg(CWnd* pParent = NULL); // standard constructor
                      void SetBackgroundColor(COLORREF color);

                      // Dialog Data
                      enum { IDD = IDD_MEITENG_DIALOG };

                      protected:
                      virtual void DoDataExchange(CDataExchange\* pDX);	// DDX/DDV support
                      

                      // Implementation
                      protected:
                      HICON m_hIcon;
                      //CBrush m_brush;
                      //COLORREF m_crBackGnd;
                      CBrush m_objMyBrush;
                      COLORREF color;

                      // Generated message map functions
                      virtual BOOL OnInitDialog();
                      virtual BOOL OnDistroyWindow();
                      afx\_msg void OnSysCommand(UINT nID, LPARAM lParam);
                      afx\_msg void OnPaint();
                      afx\_msg HCURSOR OnQueryDragIcon();
                      
                      afx\_msg HBRUSH OnCtlColor(CDC\* pDC, CWnd\* pWnd, UINT nCtlColor);
                      	DECLARE\_MESSAGE\_MAP()
                      

                      public:

                      CComboBox m\_pComboBox;
                      //afx\_msg HBRUSH OnCtlColor(CDC\* pDC, CWnd\* pWnd, UINT nCtlColor);
                      afx\_msg void OnBnClickedChangebkcolor();
                      

                      };

                      CMeiTengDlg.cpp file

                      // MeiTengDlg.cpp : implementation file
                      //

                      #include "stdafx.h"
                      #include "MeiTeng.h"
                      #include "MeiTengDlg.h"

                      #ifdef _DEBUG
                      #define new DEBUG_NEW
                      #endif

                      // CAboutDlg dialog used for App About

                      class CAboutDlg : public CDialog
                      {
                      public:
                      CAboutDlg();

                      // Dialog Data
                      enum { IDD = IDD_ABOUTBOX };

                      protected:
                      virtual void DoDataExchange(CDataExchange\* pDX);    // DDX/DDV support
                      

                      // Implementation
                      protected:
                      DECLARE_MESSAGE_MAP()
                      };

                      CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
                      {
                      }

                      void CAboutDlg::DoDataExchange(CDataExchange* pDX)
                      {
                      CDialog::DoDataExchange(pDX);
                      }

                      BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
                      END_MESSAGE_MAP()

                      // CMeiTengDlg dialog

                      CMeiTengDlg::CMeiTengDlg(CWnd* pParent /*=NULL*/)
                      : CDialog(CMeiTengDlg::IDD, pParent)
                      {
                      m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
                      }

                      void CMeiTengDlg::DoDataExchange(CDataExchange* pDX)
                      {
                      CDialog::DoDataExchange(pDX);
                      DDX_Control(pDX, IDC_BITMAP, m_pComboBox);
                      // DDX_Control(pDX, IDC_Enjoystatic, m_pEnjoyStatic);
                      }

                      BEGIN_MESSAGE_MAP(CMeiTengDlg, CDialog)
                      ON_WM_SYSCOMMAND()
                      ON_WM_PAINT()
                      ON_WM_QUERYDRAGICON()
                      //}}AFX_MSG_MAP

                      ON\_BN\_CLICKED(IDC\_ChangeBKColor, &CMeiTengDlg::OnBnClickedChangebkcolor)
                      

                      END_MESSAGE_MAP()

                      // CMeiTengDlg message handlers

                      BOOL CMeiTengDlg::OnInitDialog()

                      M 1 Reply Last reply
                      0
                      • Z zhiyuan16

                        no other control.. Malli could you check for me the following my dialog .h and .cpp files thanks. CMeiTengDlg.h file

                        // MeiTengDlg.h : header file
                        //

                        #pragma once
                        #include "afxwin.h"

                        // CMeiTengDlg dialog
                        class CMeiTengDlg : public CDialog
                        {
                        // Construction
                        public:
                        CMeiTengDlg(CWnd* pParent = NULL); // standard constructor
                        void SetBackgroundColor(COLORREF color);

                        // Dialog Data
                        enum { IDD = IDD_MEITENG_DIALOG };

                        protected:
                        virtual void DoDataExchange(CDataExchange\* pDX);	// DDX/DDV support
                        

                        // Implementation
                        protected:
                        HICON m_hIcon;
                        //CBrush m_brush;
                        //COLORREF m_crBackGnd;
                        CBrush m_objMyBrush;
                        COLORREF color;

                        // Generated message map functions
                        virtual BOOL OnInitDialog();
                        virtual BOOL OnDistroyWindow();
                        afx\_msg void OnSysCommand(UINT nID, LPARAM lParam);
                        afx\_msg void OnPaint();
                        afx\_msg HCURSOR OnQueryDragIcon();
                        
                        afx\_msg HBRUSH OnCtlColor(CDC\* pDC, CWnd\* pWnd, UINT nCtlColor);
                        	DECLARE\_MESSAGE\_MAP()
                        

                        public:

                        CComboBox m\_pComboBox;
                        //afx\_msg HBRUSH OnCtlColor(CDC\* pDC, CWnd\* pWnd, UINT nCtlColor);
                        afx\_msg void OnBnClickedChangebkcolor();
                        

                        };

                        CMeiTengDlg.cpp file

                        // MeiTengDlg.cpp : implementation file
                        //

                        #include "stdafx.h"
                        #include "MeiTeng.h"
                        #include "MeiTengDlg.h"

                        #ifdef _DEBUG
                        #define new DEBUG_NEW
                        #endif

                        // CAboutDlg dialog used for App About

                        class CAboutDlg : public CDialog
                        {
                        public:
                        CAboutDlg();

                        // Dialog Data
                        enum { IDD = IDD_ABOUTBOX };

                        protected:
                        virtual void DoDataExchange(CDataExchange\* pDX);    // DDX/DDV support
                        

                        // Implementation
                        protected:
                        DECLARE_MESSAGE_MAP()
                        };

                        CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
                        {
                        }

                        void CAboutDlg::DoDataExchange(CDataExchange* pDX)
                        {
                        CDialog::DoDataExchange(pDX);
                        }

                        BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
                        END_MESSAGE_MAP()

                        // CMeiTengDlg dialog

                        CMeiTengDlg::CMeiTengDlg(CWnd* pParent /*=NULL*/)
                        : CDialog(CMeiTengDlg::IDD, pParent)
                        {
                        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
                        }

                        void CMeiTengDlg::DoDataExchange(CDataExchange* pDX)
                        {
                        CDialog::DoDataExchange(pDX);
                        DDX_Control(pDX, IDC_BITMAP, m_pComboBox);
                        // DDX_Control(pDX, IDC_Enjoystatic, m_pEnjoyStatic);
                        }

                        BEGIN_MESSAGE_MAP(CMeiTengDlg, CDialog)
                        ON_WM_SYSCOMMAND()
                        ON_WM_PAINT()
                        ON_WM_QUERYDRAGICON()
                        //}}AFX_MSG_MAP

                        ON\_BN\_CLICKED(IDC\_ChangeBKColor, &CMeiTengDlg::OnBnClickedChangebkcolor)
                        

                        END_MESSAGE_MAP()

                        // CMeiTengDlg message handlers

                        BOOL CMeiTengDlg::OnInitDialog()

                        M Offline
                        M Offline
                        Malli_S
                        wrote on last edited by
                        #14

                        ON_WM_CTLCOLOR() is missing in your message map. I hope you've added OnCtlColor handler manually.

                        [Delegates]      [Virtual Desktop]      [Tray Me !]
                        -Malli...! :rose:****

                        Z 1 Reply Last reply
                        0
                        • M Malli_S

                          ON_WM_CTLCOLOR() is missing in your message map. I hope you've added OnCtlColor handler manually.

                          [Delegates]      [Virtual Desktop]      [Tray Me !]
                          -Malli...! :rose:****

                          Z Offline
                          Z Offline
                          zhiyuan16
                          wrote on last edited by
                          #15

                          thanks malli now is ok. i have one more question here: in my dialog, i have several buttons, when i changed the background color, but dun chanaged the buttons' color, how can i can change the buttons' color after i choose different color. thanks

                          M 1 Reply Last reply
                          0
                          • Z zhiyuan16

                            thanks malli now is ok. i have one more question here: in my dialog, i have several buttons, when i changed the background color, but dun chanaged the buttons' color, how can i can change the buttons' color after i choose different color. thanks

                            M Offline
                            M Offline
                            Malli_S
                            wrote on last edited by
                            #16

                            I think this[^] would help you.

                            [Delegates]      [Virtual Desktop]      [Tray Me !]
                            -Malli...! :rose:****

                            Z 1 Reply Last reply
                            0
                            • M Malli_S

                              I think this[^] would help you.

                              [Delegates]      [Virtual Desktop]      [Tray Me !]
                              -Malli...! :rose:****

                              Z Offline
                              Z Offline
                              zhiyuan16
                              wrote on last edited by
                              #17

                              thanks, malli i have 3 radio buttons and one common button now, for 3 radio buttons, one is change background color, one is play music, last one is browse photoes, so when i check anyone radio button, and my that common button will show correspoding content what the radio button contains. thanks a lot.i searched online, but my pc and connection are slow, counldn't find. thanks.

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups