An Unclickable Button

  Download Source Code and Demo Project

Environment: VC++ 5.0 (SP3) NT 4.0 (SP3), Win95

I wrote this a while back for a friend. It is basically just a normal pushbutton, except that when the user tries to click on it, it moves out of the way making it practically un-clickable.

I have no idea what anyone would ever want to use such a control in their app, apart from wanting to be extremely annoying to users (and hey - don't we all get like that on occasion?) :)

The button is just a normal button with OnMouseMove overridden: (m_nJumpDistance is the distance in pixels to jump once the mouse has moved over the control).
void CTrickButton::OnMouseMove(UINT nFlags, CPoint point) 
    CWnd* pParent = GetParent();
    if (!pParent) pParent = GetDesktopWindow();

    CRect ParentRect;                                   // Parent client area (Parent coords)

    ClientToScreen(&point);                             // Convert point to parent coords

    CRect ButtonRect;                                   // Button Dimensions (Parent coords)
    CPoint Center = ButtonRect.CenterPoint();           // Center of button (parent coords)

    CSize CriticalSize(ButtonRect.Width()/6, ButtonRect.Height()/6);

    CRect NewButtonRect = ButtonRect;                    // New position (parent coords)

    if (point.x - > Center.x)            // Mouse is right of center
        if (ButtonRect.left > ParentRect.left + ButtonRect.Width() + m_nJumpDistance)
            NewButtonRect -= CSize(ButtonRect.right - point.x + m_nJumpDistance, 0);
            NewButtonRect += CSize(point.x - ButtonRect.left + m_nJumpDistance, 0);
    else if (point.x + < Center.x)      // Mouse is left of center
        if (ButtonRect.right < ParentRect.right - ButtonRect.Width() - m_nJumpDistance)
            NewButtonRect += CSize(point.x - ButtonRect.left + m_nJumpDistance, 0);
            NewButtonRect -= CSize(ButtonRect.right - point.x + m_nJumpDistance, 0);

    if (point.y - > Center.y)           // Mouse is below center
        if ( > + ButtonRect.Height() + m_nJumpDistance)
            NewButtonRect -= CSize(0, ButtonRect.bottom - point.y + m_nJumpDistance);
            NewButtonRect += CSize(0, point.y - + m_nJumpDistance);
    else if (point.y + < Center.y)      // Mouse is above center
        if (ButtonRect.bottom < ParentRect.bottom - ButtonRect.Height() - m_nJumpDistance)
            NewButtonRect += CSize(0, point.y - + m_nJumpDistance);
            NewButtonRect -= CSize(0, ButtonRect.bottom - point.y + m_nJumpDistance);

	CButton::OnMouseMove(nFlags, point);

Last updated: 16 June 1998


  • Classic Comments

    Posted by Hydranix on 07/01/2015 11:14pm

    There's just a cool feeling you get reading comments left on this website over 16 years ago.

  • thanks

    Posted by Legacy on 05/02/2003 12:00am

    Originally posted by: mahmoud

    it's good as beginner but what is the advance

  • HaHa :)

    Posted by Legacy on 04/28/2003 12:00am

    Originally posted by: garaber

    Cute but other than a gag what would you use it for. It's cute though.

  • button can be unclickable if

    Posted by Legacy on 05/21/2002 12:00am

    Originally posted by: Pradeep Kumar

    we can it by one of the following.
    1. disable the button when it get focuse;
    2. hide the button when mouse is just over the button.
    3. make button, like not having tab order.
    4. disable button when mouse over.

  • The Unclickable clickable.

    Posted by Legacy on 08/04/2000 12:00am

    Originally posted by: BiGcOcK

    There is two ways I found the button could be clicked.
    1 Move the mouse on the button realy quickly and click
    2 Tab it to the button, Press Enter and the mouse will be right on the button.

  • Saw similar

    Posted by Legacy on 03/29/2000 12:00am

    Originally posted by: Thorsten S.

    I saw something like that, where the icons of the detop were moving out of the way when the mouse approaches.
    BTW: How could I do like that? Subclassing the desktop is dangerous, everybody keeps telling me . . .

  • don't forget to clear the tab stop property :)

    Posted by Legacy on 09/15/1999 12:00am

    Originally posted by: Ivailo Bardarov

    don't forget to clear the tab stop property :)

  • also seen the button

    Posted by Legacy on 04/28/1999 12:00am

    Originally posted by: beavis

    I have seen the button on the clinton survey-liked it so much i thought of my own theme-sent by your significant other to see if you have been faithful. just try to push yes-was funny.
    I am not much of a programmer though, but trying to learn. but did figure out how to open it and change the text.

  • I've seen this in use

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

    Originally posted by: Dave Williss

    A few months ago, a friend sent me a program that
    actually used this. It came up with a dialog titled
    "Slick Willie's idea of a fair public opinion survey..."
    It pretended to be from Bill Clinton and asked if
    he should resign and leave public office in shame.
    The "yes" button jummpd around so you couldn't click
    it (And if you managed to do so, it did nothing).
    The "no" button thanked you for your honest opinion.
    It was good for a laugh.

    I find it ironic that as I type this, the banner ad at
    the top of the page is for personalized email addresses
    and the example it gives is "" They
    certianly wern't thinking of Lewinsky :-)

  • Really funny !!

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

    Originally posted by: T.S.Venkateswaran

    I've allways wondered abt. creating such apps.
    This one is real fun !
    Hope it keeps users busy ;-))
    Pls. keep posting such 'interesting' stuffs.


  • Loading, Please Wait ...

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

Top White Papers and Webcasts

  • Enterprises are increasingly looking to platform as a service (PaaS) to lower their costs and speed their time to market for new applications. Developing, deploying, and managing applications in the cloud eliminates the time and expense of managing a physical infrastructure to support them. PaaS offerings must deliver additional long-term benefits, such as a lower total cost of ownership (TCO), rapid scalability, and ease of integration, all while providing robust security and availability. This report …

  • Moving from an on-premises environment to Office 365 does not remove the need to plan for disruptions or reduce the business risk requirements for protecting email services. If anything, some risks increase with a move to the cloud. Read how to ease the transition every business faces if considering or already migrating to cloud email. This white paper discusses: Setting expectations when migrating to Office 365 Understanding the implications of relying solely on Exchange Online security Necessary archiving …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date