Re: OnCancel not being called
Hi,
That is interesting...
It seems like a bad way to use SetFocus().
I have been mucking around with that myself.
Only when the control is "activated" should it SetFocus(),
Then you would have things like OnPreTranslateMessage(), or OnKeyDown() =
to cancel out of it (Like hitting the Esc Key.)
OnButtonCanel()
{
GetProgressCtrl()->Cancel()
*or*
GetProgressCtrl()->SendMessage(ID_CANCEL);
}
I think probably when he was developing it, he wanted to use the UP and =
Down arrows?
Which, is what happens in a ScrollBar or other control, but only when =
"activated" should it do that.
Glad you found the problem.
HTH,
<cbdeja@my-deja.com> wrote in message =
news:1184342162.709771.280690@o61g2000hsh.googlegroups.com...
On Jul 13, 3:13 am, "David Ching" <d...@remove-this.dcsoft.com> wrote:
<cbd...@my-deja.com> wrote in message
... And yet both situations should be the same. They both end up =
calling
CWnd:EnableWindow and the hwnd used in there is the correct one for
CMyDialog.
So goodness knows why they cause different behaviours.
Weird!
Maybe Windows doesn't like any function called GoModal()! ;) Very =
weird.
On further testing today it looks like the EnableWindow() thing was an
abberation - it does NOT solve the problem. :(
However I think I've now found the solution, and it's due to a bug/
feature of CProgressWnd.
Whenever CProgressWnd::SetPos is called it checks to see if its hwnd
has the focus - if not it does a SetFocus() using its hwnd to bring it
back into focus. I've found that if I replace this with a SetFocus()
to the Cancel button instead, the Cancel button is drawn with a dotted
focus indicator, and when I click the Cancel button it always works
properly. (At least I've tried it about 30 times and it's not failed
once).
What I *think* might be happening is that when pressing the Cancel
button, the SetPos function is somehow getting in first and switching
the focus away from the Cancel button so a Cancel message does not get
generated - unless you click at it like crazy. But I would have
thought that a click on a button would have always generated a message
whether that button had the focus or not. So it's still a bit
mysterious but at least I seem to have found the solution (fingers
crossed).