Re: Yay. It works!
Hi David,
Your probably right. I haven't gotten to that point just yet.
Like I said, I have not tested it in a Dialog.
The odd thing is that if I don't comment out the =
CWnd::OnKillFocus(pNewWnd);
The messages go directly to the View.
The control has the "Focus", (Need a different word) but the WM_KEYDOWN =
messages are going to the View.
I'm not sure what makes a window "Active", or if it even cares.
I think it is just another rect and somewhere in the background, it does =
something like
IsTopLevelWindow() Yes
PointInRect(point) Yes,
Well then, send mouse messages to that Window.
I don't know exactly what is going on just yet.
I can open a dialog, or any other window and whatever window/control =
gains the focus.
and when I come back to my control, it has focus.
(Note that I do not call set focus again. I only call SetFocus once.)
So, that wouldn't be right if it works like your thinking, which sounds =
correct, I might add.
Maybe it is working like OnMouseMove().
If somehow, WM_MOUSEMOVE is disabled, the control would never get the =
mouse messages.
(That could be very well be the case in a static text control, hence the =
SS_NOTIFY ... for keyboard messages )
but, you don't have to call SetFocus() for mouse messages, yet the mouse =
messages still work in other windows,
That could be very well what is going on.
I could just be enabling Keyboard messages to go to my control instead =
of SetCapture() which keeps the messages
from propagating, which is what you and I are thinking.
That is the best I can figure so far.
I'll put the control in a dialog and let you know how things go.
Heck, I am happy I got this far.
P.S.
Something interesting as far as controls go.
Do you know who sends WM_INITDIALOG or WM_INITIALUPDATE.
That is kind of bugging me. CFrameWnd::OnInitialUpdate() might be doing =
it for the View, but I am not sure
who sends the message to the dialog?
P.S.S. Some beer speak. Rambling on...
Thanks,
"David Ching" <dc@remove-this.dcsoft.com> wrote in message =
news:w3hli.37796$YL5.14917@newssvr29.news.prodigy.net...
I'm still not sure if it is correct behavior for a control to set =
focus to
itself on creation. What if the caller doesn't want that? What if =
there
are 2 or more instances of the control in the dialog; which one should =
get
focus? The caller (i.e. dialog) needs to have control of this! The =
world
would be a mess if all the controls in the dialog tried to grab focus =
like
this.
-- David
"Nobody" <Nobody@yahoo.com> wrote in message
news:eBVB$VCxHHA.4592@TK2MSFTNGP05.phx.gbl...
Hi,
I had to comment out the CWnd::OnKillFocus(). I guess that prevents if =
from
losing focus.
like it shows here http://www.winterdom.com:80/dev/mfc/PopupEdit.cpp
#include <afxpriv.h> //for WM_INITs
/* If in a dialog */
ON_MESSAGE(WM_INITDIALOG, InitialUpdate)
/* If in a view */
ON_MESSAGE(WM_INITIALUPDATE, InitialUpdate)
Control::InitialUpdate(WPARAM wParam, LPARAM lParam)
{
SetFocus();
}
void Control::OnKillFocus(CWnd* pNewWnd)
{
// CWnd::OnKillFocus(pNewWnd);
}
I haven't tested it in a dialog yet.
Thanks all!