// BHOのサイトに実装
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
ATLASSERT(pMsg);
// キーボードメッセージのみ対応
if ((WM_KEYFIRST <= pMsg->message) && (pMsg->message <= WM_KEYLAST))
{
// 全てのオブジェクトに対して処理を行なう
iterator iter = this->begin();
while (iter != this->end())
{
CString strClsID = iter->first;
IUnknownPtr spUnk = iter->second;
if (TranslateAccelerator(spUnk, pMsg) != FALSE)
{
return TRUE;
}
iter++;
}
}
return FALSE;
}
static BOOL TranslateAccelerator(IInputObjectPtr spInputObject, MSG* pMsg)
{
ATLASSERT(pMsg);
if (spInputObject == NULL)
{
return FALSE;
}
HRESULT hr = S_OK;
// フォーカスを保持している場合
// → S_OK/S_FALSE
hr = spInputObject->HasFocusIO();
if (hr == S_OK)
{
// アクセラレータ処理を実行
// → S_OK/S_FALSE
hr = spInputObject->TranslateAcceleratorIO(pMsg);
if (hr == S_OK)
{
return TRUE;
}
}
return FALSE;
}