I have programmed a MFC utility with some radio buttons on the main window.
When I click on a radio button the BN_CLICKED message is captured by the handler and does some task.
I have seen an unexpected behaviour: when I open another window (hard disk explorer, control panel, speaker volume and also a generic folder) and then I close it, the radio button clicks even I haven't clicked the mouse on the radio button.
I suppose that this is caused by my program's window that get the focus when I close the other window.
How can I block this behaviour?
This behavior is, or at least used to be, by design. When [de]activating the window, the radio buttons do not know that. All they know is that they got focus, and the behavior for radio buttons is to auto-select on focus.
I have read the WM_SETFOCUS page and now I disable all the radiobuttons when the window lose focus. This works but it seems a strange solution to me.
I wonder if there is a better way to solve the problem. I want to discard message from radiobuttons when they are launched by focus changes.
I just put together a dummy MFC app with four radio buttons, and an ON_BN_CLICKED() handler for each. With the app running, I open various other windows and then switch back to it, none of the four handlers are fired. Hmmmm
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
they aren't fired because you switch from one window to another without have a focus on radiobutton.
If you click on a radio button with the mouse the radio button gets focus: if you switch frome one window to another you will see that the handlers are fired.
If you never click on radiobutton with mouse this doesn't happen.
Does somebody have an idea why will the following happen:
printf("Min Value: %d\n", minValue(root));
printf("Max Value: %d\n", maxValue(root));
// not sure why line below throws segmentation core
//printf("Min Val: %d Max Val: %d\n", minValue(root), maxValue(root));
minValue and maxValue are recursive functions returning the min/max value of a binary tree, when called separately as in lines 1 & 2 they work fine, but when called from the same printf statement I get a segmenation fault in linux.