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. WM_DRAWITEM does not process for tab control

WM_DRAWITEM does not process for tab control

Scheduled Pinned Locked Moved C / C++ / MFC
18 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.
  • Y yaminisridaran

    I am using a tab control. I want to change the background colour of the tab control. I selected the ownerdrawfixed in the properties of the tab control. but still the execution does not come to OnDrawItem function S.Yamini

    M Offline
    M Offline
    Mark Salsbery
    wrote on last edited by
    #3

    Where are you handling WM_DRAWITEM? What about overriding CTabCtrl::DrawItem() in your tab control class? Mark

    Mark Salsbery Microsoft MVP - Visual C++ :java:

    Y 1 Reply Last reply
    0
    • N Nelek

      What are you trying to do it?

      Greetings. -------- M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you “The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson

      Y Offline
      Y Offline
      yaminisridaran
      wrote on last edited by
      #4

      I am trying to change the background colour of the tab control. I will be able to it in drawitem method but the execution does not come to draw item method even if i select ownerdrawfixed in the properties of the tab control.

      1 Reply Last reply
      0
      • M Mark Salsbery

        Where are you handling WM_DRAWITEM? What about overriding CTabCtrl::DrawItem() in your tab control class? Mark

        Mark Salsbery Microsoft MVP - Visual C++ :java:

        Y Offline
        Y Offline
        yaminisridaran
        wrote on last edited by
        #5

        The execution does not come to drawitem method. Why

        M 1 Reply Last reply
        0
        • Y yaminisridaran

          The execution does not come to drawitem method. Why

          M Offline
          M Offline
          Mark Salsbery
          wrote on last edited by
          #6

          The following code works for me... Note you have to have a tab control subclassed by an object of your CTabCtrl-derived class, otherwise DrawItem() will never get called...

          class CMyTabCtrl : public CTabCtrl
          {
          public:
          CMyTabCtrl() : CTabCtrl() {}

          virtual void DrawItem(LPDRAWITEMSTRUCT /\*lpDrawItemStruct\*/);
          

          };

          void CMyTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
          {
          CDC dc;
          dc.Attach(lpDrawItemStruct->hDC);

          // Note:  My test tab control has two tabs inserted :)
          
          if (0 == lpDrawItemStruct->itemID)
              dc.DrawText(\_T("Tab 1"), &lpDrawItemStruct->rcItem, DT\_CENTER);
          else
              dc.DrawText(\_T("Tab 2"), &lpDrawItemStruct->rcItem, DT\_CENTER);
          
          dc.Detach();
          

          }

          Mark Salsbery Microsoft MVP - Visual C++ :java:

          Y 2 Replies Last reply
          0
          • M Mark Salsbery

            The following code works for me... Note you have to have a tab control subclassed by an object of your CTabCtrl-derived class, otherwise DrawItem() will never get called...

            class CMyTabCtrl : public CTabCtrl
            {
            public:
            CMyTabCtrl() : CTabCtrl() {}

            virtual void DrawItem(LPDRAWITEMSTRUCT /\*lpDrawItemStruct\*/);
            

            };

            void CMyTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
            {
            CDC dc;
            dc.Attach(lpDrawItemStruct->hDC);

            // Note:  My test tab control has two tabs inserted :)
            
            if (0 == lpDrawItemStruct->itemID)
                dc.DrawText(\_T("Tab 1"), &lpDrawItemStruct->rcItem, DT\_CENTER);
            else
                dc.DrawText(\_T("Tab 2"), &lpDrawItemStruct->rcItem, DT\_CENTER);
            
            dc.Detach();
            

            }

            Mark Salsbery Microsoft MVP - Visual C++ :java:

            Y Offline
            Y Offline
            yaminisridaran
            wrote on last edited by
            #7

            Thanks for ur help I created a dialog based application. I selected a tab control and moved to my dialog . I have created an MFC class named CMyTabCtrl derived from CTabCtrl. I added ur code to it. I created a member variable in the dialog class for the tab control using class wizard which is CMyTabCtrl m_Tab I have selected the owner draw fixed properties But still the drawitem of CMyTabCtrl does not called. Please implement this and if u r getting let me know what u did.

            M 1 Reply Last reply
            0
            • Y yaminisridaran

              Thanks for ur help I created a dialog based application. I selected a tab control and moved to my dialog . I have created an MFC class named CMyTabCtrl derived from CTabCtrl. I added ur code to it. I created a member variable in the dialog class for the tab control using class wizard which is CMyTabCtrl m_Tab I have selected the owner draw fixed properties But still the drawitem of CMyTabCtrl does not called. Please implement this and if u r getting let me know what u did.

              M Offline
              M Offline
              Mark Salsbery
              wrote on last edited by
              #8

              I did the same - I used a DDX_Control() call in DoDataExchange() to subclass the control...

              void CMyDialog::DoDataExchange(CDataExchange* pDX)
              {
              CDialog::DoDataExchange(pDX);
              DDX_Control(pDX, IDC_TAB1, m_Tab); <-- make sure you use the right ID!!!
              }

              Mark Salsbery Microsoft MVP - Visual C++ :java:

              Y 1 Reply Last reply
              0
              • M Mark Salsbery

                I did the same - I used a DDX_Control() call in DoDataExchange() to subclass the control...

                void CMyDialog::DoDataExchange(CDataExchange* pDX)
                {
                CDialog::DoDataExchange(pDX);
                DDX_Control(pDX, IDC_TAB1, m_Tab); <-- make sure you use the right ID!!!
                }

                Mark Salsbery Microsoft MVP - Visual C++ :java:

                Y Offline
                Y Offline
                yaminisridaran
                wrote on last edited by
                #9

                I have done that. But still does not work Can u send me ur sample project.

                M 1 Reply Last reply
                0
                • Y yaminisridaran

                  I have done that. But still does not work Can u send me ur sample project.

                  M Offline
                  M Offline
                  Mark Salsbery
                  wrote on last edited by
                  #10

                  It's a VS2008 project - is that OK?

                  Mark Salsbery Microsoft MVP - Visual C++ :java:

                  Y 1 Reply Last reply
                  0
                  • M Mark Salsbery

                    It's a VS2008 project - is that OK?

                    Mark Salsbery Microsoft MVP - Visual C++ :java:

                    Y Offline
                    Y Offline
                    yaminisridaran
                    wrote on last edited by
                    #11

                    ok

                    1 Reply Last reply
                    0
                    • M Mark Salsbery

                      The following code works for me... Note you have to have a tab control subclassed by an object of your CTabCtrl-derived class, otherwise DrawItem() will never get called...

                      class CMyTabCtrl : public CTabCtrl
                      {
                      public:
                      CMyTabCtrl() : CTabCtrl() {}

                      virtual void DrawItem(LPDRAWITEMSTRUCT /\*lpDrawItemStruct\*/);
                      

                      };

                      void CMyTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
                      {
                      CDC dc;
                      dc.Attach(lpDrawItemStruct->hDC);

                      // Note:  My test tab control has two tabs inserted :)
                      
                      if (0 == lpDrawItemStruct->itemID)
                          dc.DrawText(\_T("Tab 1"), &lpDrawItemStruct->rcItem, DT\_CENTER);
                      else
                          dc.DrawText(\_T("Tab 2"), &lpDrawItemStruct->rcItem, DT\_CENTER);
                      
                      dc.Detach();
                      

                      }

                      Mark Salsbery Microsoft MVP - Visual C++ :java:

                      Y Offline
                      Y Offline
                      yaminisridaran
                      wrote on last edited by
                      #12

                      Am I doing anything wrong in setting the properties of the tab control. Shall I send the sample code.

                      M 1 Reply Last reply
                      0
                      • Y yaminisridaran

                        Am I doing anything wrong in setting the properties of the tab control. Shall I send the sample code.

                        M Offline
                        M Offline
                        Mark Salsbery
                        wrote on last edited by
                        #13

                        It seems like you're doing everything.... Send me an email from here and I'll reply with the project. Mark

                        Mark Salsbery Microsoft MVP - Visual C++ :java:

                        Y 2 Replies Last reply
                        0
                        • M Mark Salsbery

                          It seems like you're doing everything.... Send me an email from here and I'll reply with the project. Mark

                          Mark Salsbery Microsoft MVP - Visual C++ :java:

                          Y Offline
                          Y Offline
                          yaminisridaran
                          wrote on last edited by
                          #14

                          I am waiting for ur reply

                          1 Reply Last reply
                          0
                          • M Mark Salsbery

                            It seems like you're doing everything.... Send me an email from here and I'll reply with the project. Mark

                            Mark Salsbery Microsoft MVP - Visual C++ :java:

                            Y Offline
                            Y Offline
                            yaminisridaran
                            wrote on last edited by
                            #15

                            It works now when i call insert item Thanks

                            M 1 Reply Last reply
                            0
                            • Y yaminisridaran

                              It works now when i call insert item Thanks

                              M Offline
                              M Offline
                              Mark Salsbery
                              wrote on last edited by
                              #16

                              Ohhh you had no tabs :) I guess the email through CodeProject isn't working yet....I sent one so I could get your address to send the project. Glad you got it working! Mark

                              Mark Salsbery Microsoft MVP - Visual C++ :java:

                              Y 1 Reply Last reply
                              0
                              • M Mark Salsbery

                                Ohhh you had no tabs :) I guess the email through CodeProject isn't working yet....I sent one so I could get your address to send the project. Glad you got it working! Mark

                                Mark Salsbery Microsoft MVP - Visual C++ :java:

                                Y Offline
                                Y Offline
                                yaminisridaran
                                wrote on last edited by
                                #17

                                Thanks for ur support

                                M 1 Reply Last reply
                                0
                                • Y yaminisridaran

                                  Thanks for ur support

                                  M Offline
                                  M Offline
                                  Mark Salsbery
                                  wrote on last edited by
                                  #18

                                  You're welcome!

                                  Mark Salsbery Microsoft MVP - Visual C++ :java:

                                  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