Solved

Owner Draw CButton Not Relinquishing Press State

Posted on 2008-06-20
2
822 Views
Last Modified: 2013-11-20
I've created an owner-drawn CButton class to do custom painting including a hover state.  I've added tooltip functionality as well.  Everything works correctly, except if I select the button with the left mouse, then before releasing the left mouse, I move the cursor off the button.  I would expect the button to unselect, similar to standard windows buttons.  When I release the left mouse, the button selects no matter where the cursor is located on the screen (it can even be over a different application).

In my code, I'm checking the LPDRAWITEMSTRUCT object for disabled, selected, and focus states to paint the correct button state.  Additionally, I maintain a m_bHovering bool to tell me when I'm hovering over a button.  All states work correctly, and the button paints exactly how I want it to.

My problem is what I mentioned above, I can't get the button to "disengage" once it has been selected with the mouse.  Once it has received the left mouse down message, that button is going to get selected eventually (once the left button is released), even if I don't want it to.

It doesn't seem like a painting issue to me.  Functionally, I add the BS_OWNERDRAW style in PreCreateWindow().  In OnCreate() I create the tooltip control and create some fonts. I do handle OnKeyDown(), and it sends a message to it's parent. Otherwise, the remainder of the code does tooltip stuff, and painting stuff.

Thanks for any help...
0
Comment
Question by:Voltus_WoW
2 Comments
 
LVL 49

Accepted Solution

by:
DanRollins earned 500 total points
ID: 21838665
I suggest using Spy++ to examine the sequence of messages that normally occur (on a standard button) when you click-and-hold then drag off of the button and release.  Then I'd do the same thing for these special buttons, and compare the message logs to see what's different.
0
 

Author Comment

by:Voltus_WoW
ID: 21887846
The answer definitely pointed me in the direction I needed.  I found out that the we overrode the MouseMove event handler but failed to call the base class functionality.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
how do i create updater to My Activex application? 3 74
Tab names are off by one 5 49
format the code in java 6 73
Making an alias 7 54
Introduction: Finishing the grid – keyboard support for arrow keys to manoeuvre, entering the numbers.  The PreTranslateMessage function is to be used to intercept and respond to keyboard events. Continuing from the fourth article about sudoku. …
Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now