Article ID: 179696
Article Last Modified on 12/8/2003
typedef enum tagKEYMODIFIERS
{
KEYMOD_NONE = 0X00000000,
KEYMOD_SHIFT = 0x00000001,
KEYMOD_CONTROL = 0x00000002,
KEYMOD_ALT = 0x00000004
} KEYMODIFIERS;
class ATL_NO_VTABLE Csc_ctrl2 :
...
{
...
BEGIN_MSG_MAP(CAtlEdit)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
MESSAGE_HANDLER(WM_MOUSEACTIVATE, OnMouseActivate)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnChildSetFocus)
MESSAGE_HANDLER(WM_KILLFOCUS, OnChildKillFocus)
END_MSG_MAP()
...
STDMETHOD(TranslateAccelerator)(LPMSG lpmsg)
{
CComQIPtr<IOleControlSite,&IID_IOleControlSite>
spCtrlSite(m_spClientSite);
if (spCtrlSite)
{
if ((lpmsg->message == WM_KEYDOWN) && (
(LOWORD(lpmsg->wParam) == VK_RETURN) ||
(LOWORD(lpmsg->wParam) == VK_TAB) ))
{
DWORD keymods = 0;
keymods += (GetKeyState(VK_SHIFT) < 0) ? KEYMOD_SHIFT
: KEYMOD_NONE;
keymods +=
(GetKeyState(VK_CONTROL) < 0) ? KEYMOD_CONTROL
: KEYMOD_NONE;
keymods += (GetKeyState(VK_MENU) < 0) ? KEYMOD_ALT
: KEYMOD_NONE;
return spCtrlSite->TranslateAccelerator(lpmsg,keymods);
}
}
return S_FALSE;
}
LRESULT OnSetFocus(UINT /* nMsg */,
WPARAM /* wParam */,
LPARAM /* lParam */,
BOOL& bHandled /* bHandled */)
{
::SetFocus(m_EditCtrl.m_hWnd);
bHandled = TRUE;
return 0;
}
LRESULT OnChildSetFocus(UINT /* nMsg */,
WPARAM /* wParam */,
LPARAM /* lParam */,
BOOL& /* bHandled */)
{
CComQIPtr <IOleControlSite, &IID_IOleControlSite>
spSite(m_spClientSite);
if (m_bInPlaceActive && spSite)
spSite->OnFocus(TRUE);
return 0;
}
LRESULT OnKillFocus(UINT /* nMsg */,
WPARAM /* wParam */,
LPARAM /* lParam */,
BOOL& /* bHandled */)
{
return 0;
}
LRESULT OnChildKillFocus(UINT /* nMsg */,
WPARAM /* wParam */,
LPARAM /* lParam */,
BOOL& /* bHandled */)
{
CComQIPtr <IOleControlSite, &IID_IOleControlSite>
spSite(m_spClientSite);
if (m_bInPlaceActive && spSite)
spSite->OnFocus(FALSE);
return 0;
}
LRESULT OnMouseActivate(UINT /* nMsg */,
WPARAM /* wParam */,
LPARAM /* lParam */,
BOOL& /* bHandled */)
{
InPlaceActivate(OLEIVERB_UIACTIVATE);
return 0;
}
Additional query words: Visual Studio C++ Basic subedit
Keywords: kbctrlcreate kbkeyaccel kbprb kbeditctrl kbacceleratorkey KB179696