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 Offline
    Y Offline
    yaminisridaran
    wrote on last edited by
    #1

    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

    N M 2 Replies Last reply
    0
    • 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

      N Offline
      N Offline
      Nelek
      wrote on last edited by
      #2

      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 1 Reply Last reply
      0
      • 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