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. CDialog

CDialog

Scheduled Pinned Locked Moved C / C++ / MFC
question
23 Posts 6 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.
  • U Offline
    U Offline
    User 3037427
    wrote on last edited by
    #1

    How can i change the dialog box background color dynamically.:confused:

    H N V N 5 Replies Last reply
    0
    • U User 3037427

      How can i change the dialog box background color dynamically.:confused:

      H Offline
      H Offline
      Hamid Taebi
      wrote on last edited by
      #2

      you ca use WM_CTLCOLORor WM_PAINT_**


      **_

      whitesky


      U E 2 Replies Last reply
      0
      • H Hamid Taebi

        you ca use WM_CTLCOLORor WM_PAINT_**


        **_

        whitesky


        U Offline
        U Offline
        User 3037427
        wrote on last edited by
        #3

        But i want to chage the background depending on the color specified dynamically. I am getting an exception when i post the WM_CTLCOLOR message . Thanks for ur reply,

        H 1 Reply Last reply
        0
        • U User 3037427

          But i want to chage the background depending on the color specified dynamically. I am getting an exception when i post the WM_CTLCOLOR message . Thanks for ur reply,

          H Offline
          H Offline
          Hamid Taebi
          wrote on last edited by
          #4

          i guess you getting exception because use a brush,yes? see here maybe it is some helpful to you void CAnswerDlg::OnPaint() { CPaintDC dc(this); // device context for painting dc.FillSolidRect(0,0,GetSystemMetrics (SM_CXSCREEN),GetSystemMetrics (SM_CYSCREEN), RGB(53,97,200)); } -------------- HBRUSH CAnswerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); return (HBRUSH)GetStockObject(WHITE_BRUSH); }_**


          **_

          whitesky


          U 1 Reply Last reply
          0
          • U User 3037427

            How can i change the dialog box background color dynamically.:confused:

            N Offline
            N Offline
            NiceNaidu fo
            wrote on last edited by
            #5

            Try this CRect rc; GetClientRect(&rc); // // Paint the client in the specified background color // pDC->FillSolidRect(&rc, m_clrBack); Appu.. "If you judge people, you have no time to love them."

            1 Reply Last reply
            0
            • U User 3037427

              How can i change the dialog box background color dynamically.:confused:

              N Offline
              N Offline
              NiceNaidu fo
              wrote on last edited by
              #6

              Hey Sruthi, Chk this.This contains everything. http://www.nntu.sci-nnov.ru/DISLRN/cpppage/q117778.htm[^] Appu.. "If you judge people, you have no time to love them."

              1 Reply Last reply
              0
              • H Hamid Taebi

                i guess you getting exception because use a brush,yes? see here maybe it is some helpful to you void CAnswerDlg::OnPaint() { CPaintDC dc(this); // device context for painting dc.FillSolidRect(0,0,GetSystemMetrics (SM_CXSCREEN),GetSystemMetrics (SM_CYSCREEN), RGB(53,97,200)); } -------------- HBRUSH CAnswerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); return (HBRUSH)GetStockObject(WHITE_BRUSH); }_**


                **_

                whitesky


                U Offline
                U Offline
                User 3037427
                wrote on last edited by
                #7

                The code was working fine. But the controls like edit box etc.. are not visible bcoz of FillSolidRect(). How can i solve this problem :)

                H 1 Reply Last reply
                0
                • U User 3037427

                  The code was working fine. But the controls like edit box etc.. are not visible bcoz of FillSolidRect(). How can i solve this problem :)

                  H Offline
                  H Offline
                  Hamid Taebi
                  wrote on last edited by
                  #8

                  Are you sure i test your problem but these are visible i used this code (editbox,button,radio,..)are visible COLORREF Color; Color=GetDC()->GetBkColor(); .... .... void CAnswerDlg::OnPaint() { CPaintDC dc(this); // device context for painting dc.FillSolidRect(0,0,GetSystemMetrics (SM_CXSCREEN),GetSystemMetrics (SM_CYSCREEN), Color); } void CAnswerDlg::OnBnClickedButton1() { Color=RGB(53,97,200); Invalidate(); }_**


                  **_

                  whitesky


                  1 Reply Last reply
                  0
                  • U User 3037427

                    How can i change the dialog box background color dynamically.:confused:

                    V Offline
                    V Offline
                    Viorel
                    wrote on last edited by
                    #9

                    I think the appropriate place to change the background colour of your dialog box is the handler for WM_ERASEBKGND notification. You can put here just two lines:

                    BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)
                    {
                    	pDC->FillRect(CRect(0,0,32000,32000), &CBrush(RGB(0,0,255))); // blue
                    	return TRUE;
                    }
                    

                    If you need to vary the colour (or just to optimize the solution), make a CBrush member variable and use CreateSolidBrush to set the colour. You can use CreatePatternBrush or CreateHatchBrush to have another kind of background. -- modified at 3:13 Friday 16th June, 2006

                    1 Reply Last reply
                    0
                    • U User 3037427

                      How can i change the dialog box background color dynamically.:confused:

                      N Offline
                      N Offline
                      Naveen
                      wrote on last edited by
                      #10

                      one way HBRUSH MYDialog::OnCtlColor( CDC* pDC_i, CWnd* pWnd_i, UINT uCtlColor_i ) { HBRUSH hDefaultBrush = CDialog::OnCtlColor( pDC_i, pWnd_i, uCtlColor_i ); if( CTLCOLOR_DLG == uCtlColor_i ) { // Return a black brush so that the background become balck return reinterpret_cast(GetStockObject( BLACK_BRUSH )); } return hDefaultBrush; } Another way from the InitInstance of the App class u may call SetDialogBkColor( RGB(255,0,0) ) nave

                      U 1 Reply Last reply
                      0
                      • N Naveen

                        one way HBRUSH MYDialog::OnCtlColor( CDC* pDC_i, CWnd* pWnd_i, UINT uCtlColor_i ) { HBRUSH hDefaultBrush = CDialog::OnCtlColor( pDC_i, pWnd_i, uCtlColor_i ); if( CTLCOLOR_DLG == uCtlColor_i ) { // Return a black brush so that the background become balck return reinterpret_cast(GetStockObject( BLACK_BRUSH )); } return hDefaultBrush; } Another way from the InitInstance of the App class u may call SetDialogBkColor( RGB(255,0,0) ) nave

                        U Offline
                        U Offline
                        User 3037427
                        wrote on last edited by
                        #11

                        But the background color is not changing. Here is my code: OnPaint() { ............. CSliderApp* app=(CSliderApp*)AfxGetApp(); app->ChangeDialogColor((COLORREF)m_clr.GetPos()); } void CSliderApp::ChangeDialogColor(COLORREF ref) { SetDialogBkColor(ref); } Is there anything wrong:confused:

                        H V N 3 Replies Last reply
                        0
                        • U User 3037427

                          But the background color is not changing. Here is my code: OnPaint() { ............. CSliderApp* app=(CSliderApp*)AfxGetApp(); app->ChangeDialogColor((COLORREF)m_clr.GetPos()); } void CSliderApp::ChangeDialogColor(COLORREF ref) { SetDialogBkColor(ref); } Is there anything wrong:confused:

                          H Offline
                          H Offline
                          Hamid Taebi
                          wrote on last edited by
                          #12

                          what error you have previous error can you show your code that how to use to change background color_**


                          **_

                          whitesky


                          1 Reply Last reply
                          0
                          • U User 3037427

                            But the background color is not changing. Here is my code: OnPaint() { ............. CSliderApp* app=(CSliderApp*)AfxGetApp(); app->ChangeDialogColor((COLORREF)m_clr.GetPos()); } void CSliderApp::ChangeDialogColor(COLORREF ref) { SetDialogBkColor(ref); } Is there anything wrong:confused:

                            V Offline
                            V Offline
                            Viorel
                            wrote on last edited by
                            #13

                            If you are using VS 2003 or VS 2005, you will found that the definition of SetDialogBkColor function in afxwin2.inl file is:

                            _AFXWIN_INLINE void CWinApp::SetDialogBkColor(COLORREF /*clrCtlBk*/, COLORREF /*clrCtlText*/)
                            {
                            }
                            

                            Therefore it does nothing. Documentation says that it is obsolete. You should consider other solutions.

                            1 Reply Last reply
                            0
                            • H Hamid Taebi

                              you ca use WM_CTLCOLORor WM_PAINT_**


                              **_

                              whitesky


                              E Offline
                              E Offline
                              Eytukan
                              wrote on last edited by
                              #14

                              Though you could do it by these ways, HandlingWM_ERASEBKGND is the right one for it.


                              --[:jig:]-- [My Current Status]

                              H 1 Reply Last reply
                              0
                              • U User 3037427

                                But the background color is not changing. Here is my code: OnPaint() { ............. CSliderApp* app=(CSliderApp*)AfxGetApp(); app->ChangeDialogColor((COLORREF)m_clr.GetPos()); } void CSliderApp::ChangeDialogColor(COLORREF ref) { SetDialogBkColor(ref); } Is there anything wrong:confused:

                                N Offline
                                N Offline
                                Naveen
                                wrote on last edited by
                                #15

                                ok... i Understood instead of calling the ChangeDialogColor from onPaint call this Function as the first line of OnCtlColor funtion nave

                                U 1 Reply Last reply
                                0
                                • E Eytukan

                                  Though you could do it by these ways, HandlingWM_ERASEBKGND is the right one for it.


                                  --[:jig:]-- [My Current Status]

                                  H Offline
                                  H Offline
                                  Hamid Taebi
                                  wrote on last edited by
                                  #16

                                  but i want to know why he cant show controls its attract for me to find answer for this question (of course i need to see his code that how to use)_**


                                  **_

                                  whitesky


                                  U 1 Reply Last reply
                                  0
                                  • N Naveen

                                    ok... i Understood instead of calling the ChangeDialogColor from onPaint call this Function as the first line of OnCtlColor funtion nave

                                    U Offline
                                    U Offline
                                    User 3037427
                                    wrote on last edited by
                                    #17

                                    No its not working. Thanks for ur reply.:)

                                    N 1 Reply Last reply
                                    0
                                    • U User 3037427

                                      No its not working. Thanks for ur reply.:)

                                      N Offline
                                      N Offline
                                      Naveen
                                      wrote on last edited by
                                      #18

                                      ok another way... forgot every thing done before...Now do as below 1. Create a member variable of CBrush say m_BkBrush 2. Write Function like this ChangeColor( COLORREF clr_i ) { if( m_BkBrush.m_hObject ) m_BkBrush.DeleteObject(); m_BkBrush.CreateSolidBrush( clr_i ) Invalidate(); } 3. Call this function in the OnInitDialog and where ever u want to change the color 4. now overide the WM_CTLCOLOR message and inside that write as below HBRUSH MYDialog::OnCtlColor( CDC* pDC_i, CWnd* pWnd_i, UINT uCtlColor_i ) { HBRUSH hDefaultBrush = CDialog::OnCtlColor( pDC_i, pWnd_i, uCtlColor_i ); if( CTLCOLOR_DLG == uCtlColor_i ) { return m_BkBrush; } return hDefaultBrush; } try and tell me the result..;) nave

                                      U 1 Reply Last reply
                                      0
                                      • N Naveen

                                        ok another way... forgot every thing done before...Now do as below 1. Create a member variable of CBrush say m_BkBrush 2. Write Function like this ChangeColor( COLORREF clr_i ) { if( m_BkBrush.m_hObject ) m_BkBrush.DeleteObject(); m_BkBrush.CreateSolidBrush( clr_i ) Invalidate(); } 3. Call this function in the OnInitDialog and where ever u want to change the color 4. now overide the WM_CTLCOLOR message and inside that write as below HBRUSH MYDialog::OnCtlColor( CDC* pDC_i, CWnd* pWnd_i, UINT uCtlColor_i ) { HBRUSH hDefaultBrush = CDialog::OnCtlColor( pDC_i, pWnd_i, uCtlColor_i ); if( CTLCOLOR_DLG == uCtlColor_i ) { return m_BkBrush; } return hDefaultBrush; } try and tell me the result..;) nave

                                        U Offline
                                        U Offline
                                        User 3037427
                                        wrote on last edited by
                                        #19

                                        Sorry, its not working.:(

                                        N 1 Reply Last reply
                                        0
                                        • U User 3037427

                                          Sorry, its not working.:(

                                          N Offline
                                          N Offline
                                          Naveen
                                          wrote on last edited by
                                          #20

                                          ok yaar..I cannot figure out why its not working.... Well...Where r u working..? I am from India->Kerala.. nave

                                          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