Re: Please help: trying to capture Enter Key in ComboBox within ToolBar
On Mar 23, 12:37 pm, "AliR \(VC++ MVP\)" <A...@online.nospam> wrote:
One more question. What are you using to add the combobox to the toolbar?
AliR.
"AliR (VC++ MVP)" <A...@online.nospam> wrote in messagenews:zOVMh.9556$yW.6620@newssvr11.news.prodigy.net...
What kind of combobox is it? Simple/DorpDown/DropList? Is your
SubclassWindow call getting hit?
AliR.
<jeff.g.ander...@gmail.com> wrote in message
news:1174675271.227976.174730@l77g2000hsb.googlegroups.com...
I have an SDI application with a toolbar (rebar) that contains a
combobox. I need to capture key events (particularly the enter key)
in that combobox. I have followed the MFCIE example from microsoft.
I have also read that in order to capture keypress events in the
combobox, you must dynamically subclass the edit control inside of the
combobox using the OnCtlColor event handler. I have done so like
this:
HBRUSH MyCombo::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor )
{
if (nCtlColor == CTLCOLOR_EDIT)
{
//Edit control
if (m_xEdit.GetSafeHwnd() == NULL)
m_xEdit.SubclassWindow(pWnd->GetSafeHwnd());
}
HBRUSH hbr = CComboBoxEx::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
The call to SubclassWindow returns "1" which is supposed to be a
success. m_xEdit is my derived Edit Control (CComboEdit) which has
handlers for the key events:
BEGIN_MESSAGE_MAP(CComboEdit, CEdit)
//{{AFX_MSG_MAP(CComboEdit)
ON_WM_CHAR()
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CComboEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
TRACE("KEYDOWN");
}
void CComboEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
TRACE("ONCHAR");
}
None of these keypress event handlers is ever hit. Am I missing
something with the dynamic subclassing? I have never done that
before, but it seemed pretty straightforward.
Please help, I've been stuck on this a while.
Thanks,
Jeff- Hide quoted text -
- Show quoted text -
Thanks for your fast reply. Here is the line that creates the
combobox:
m_wndAddress.Create(CBS_DROPDOWN | WS_CHILD, CRect(0, 0, 200, 120),
this, AFX_IDW_TOOLBAR + 1)
And here is the line that adds it to the toolbar:
m_wndReBar.AddBar(&m_wndAddress, str, NULL, RBBS_FIXEDBMP |
RBBS_BREAK);
Both of these are in the OnCreate of my main CFrameWnd frame.
And yes, the subclasswindow call is hit and it returns "1". According
to the docs, a nonzero return is a success.
Thanks Again.
Jeff