A Switcher Control (like the Windows Task Bar)

Environment: VC6 SP2, WinNT 4.0 SP3, Win98 GOLD

Ever since Windows 95 first came out, I have noticed that just about every developer was scambling to get all the new common controls and UI features into their applications... but it seems like nobody has yet to make a taskbar-like control. So I set out to make one.

After looking at how Microsoft made their task switcher control (they use a modified Tab Control), I decided to just use MFC and subclass a CWnd to make mine.

It was actually pretty simple to make. I simply subclassed a CWnd for the button - CSwitcherButton - and subclassed a window to manage the buttons - CSwitcherWnd.

To use, download the source or demo below and add CSwitcherButton.cpp, CSwitcherButton.h, CSwitcherWnd.cpp, and CSwitcherWnd.h to your project. Then, include CSwitcherWnd.h and CSwitcherButton.h in your window or dialog (or whatever file you want to use it in; it *must* be derived from CWnd, tho). An easy way to include these files globally is to include them in stdafx.h or YourApp.h.

To implement, simply create a CSwitcherWnd object, and call DoCreate.

Example:

(m_wndSwitcher created in the .h file)


m_wndSwitcher.DoCreate(this, 0, 200);

Which will create a switcher at the top of the window with width 200.

That about covers it. Enjoy.

Updates MON MAR 15 1999 - JIMMY BRUSH:

  • Fixed RemoveButton to correctly decrement selected button
  • Added CMemDC by Keith Rule
  • Fixed up Animation a bit

Download demo project - 32 KB

Download source - 8 KB



Comments

  • bugs in it.

    Posted by Legacy on 11/18/2000 12:00am

    Originally posted by: Johnthan

    sometime when u click the button "setsel", u can get it appeared.

    Reply
  • Request: modify so also works for CWnd subclassing

    Posted by Legacy on 12/17/1999 12:00am

    Originally posted by: Rick Shide

    It would be nice if you could modify CSwitcherButton so that it could be subclassed and used as a nice stand-alone button on a CDialog or CFormView.  Youl'd just need to init the m_wndParent == NULL in the constructor, and override PreSubclassWindow to set some specific stuff for normal subclassing:
    
    void CSwitcherButton::PreSubclassWindow()
    {
    if (!m_wndParent) { // normal subclassing
    m_wndParent = GetParent();
    }
    CWnd::PreSubclassWindow();
    }

    also need to figure out how to set the window text

    Reply
  • tab control

    Posted by Legacy on 03/25/1999 12:00am

    Originally posted by: James Kilts

    Yeah, windows does use the tab control with the "button look" style applied, but I like this one better.

    Reply
  • Docking/autohide

    Posted by Legacy on 03/24/1999 12:00am

    Originally posted by: Maxim A. Sidorov

    How do you feel about implementing smart docking/autohiding
    
    feature for control alike office bar and windows taskbar itself.
    Should be great!

    Reply
  • Switcher Control

    Posted by Legacy on 03/23/1999 12:00am

    Originally posted by: Rama Krishna

    Why not just use the tab control with button look style applied. That's what is task bar when looked under Spy++.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • IT decision support impacts all aspects of technology management, from governance and strategy to budgets and resource planning. IT decision support effectiveness often falls prey to data-driven challenges that make it difficult to understand the data in context. These challenges: overwhelming data volumes, heterogeneous data types, and growing data complexity. This Forrester Consulting Paper reports the three key findings from their study conducted, on behalf of BDNA, to test the hypothesis that data …

  • As everyone scrambles to protect customers and consumers from the Heartbleed virus, there will be a variety of mitigating solutions offered up to address this pesky bug. There are a variety of points within the data path where solutions could be put into place to mitigate this (and similar) vulnerabilities and customers must choose the most strategic point in the network at which to deploy their selected mitigation. Read this white paper to learn the ins and outs of mitigating the risk of Heartbleed and the …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds