怎么响应ActiveX控件的PreTranslateMessage函数
1个回答
展开全部
// trap keys and forward on to the control
BOOL CMyActiveXCtrl::PreTranslateMessage(MSG* pMsg)
{
switch (pMsg->message)
{
case WM_KEYDOWN:
case WM_KEYUP:
switch (pMsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_HOME:
case VK_END:
SendMessage (pMsg->message, pMsg->wParam, pMsg->lParam);
// Windowless controls won't be able to call SendMessage.
// Instead, just respond to the message here.
return TRUE;
}
break;
}
return COleControl::PreTranslateMessage(pMsg);
}
如果您有 ActiveX 控件中的子控件,您需要激活 UI 的整个控件时激活的子控件。 渚嫔的方式 如果您有您的 ActiveX 控件内的编辑控件,添加处理程序,如下所示 ActiveX 控件类:
int CMyActiveXCtrl::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT
message)
{
if (!m_bUIActive)
OnActivateInPlace (TRUE, NULL); // == UI-Activate the control
return COleControl::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
因为 Internet Explorer 可能不会立即激活 UI 的控件,如果即使的是唯一的控件在页上,可能需要创建控件时自动申请 UI 激活。 这可以 COleControl::OnCreate (WM_CREATE) 处理程序的过程中执行。 无窗口控件没有得到 WM_CREATE 或任何窗口消息 ; 因此,此代码不会处理在无窗口控件中。 此外请注意这不能保证控件将保持 UI 的激活。 如果页面上其他控件的 UI 的激活请求相似的方式只能有一个将最终被激活 UI 的和将接收键击消息,所述中。 如果用户从一个 ActiveX 控件通过 Tab 切换,IE 将自动停用 UI 的控件。
int CMyActiveXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
OnActivateInPlace (TRUE, NULL); // == UI-Activate the control
return 0;
}
说明:
对于CMyActiveXCtrl能响应PreTranslateMessage,但对于控件的其他窗体类PreTranslateMessag仍然得不到响应
BOOL CMyActiveXCtrl::PreTranslateMessage(MSG* pMsg)
{
switch (pMsg->message)
{
case WM_KEYDOWN:
case WM_KEYUP:
switch (pMsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_HOME:
case VK_END:
SendMessage (pMsg->message, pMsg->wParam, pMsg->lParam);
// Windowless controls won't be able to call SendMessage.
// Instead, just respond to the message here.
return TRUE;
}
break;
}
return COleControl::PreTranslateMessage(pMsg);
}
如果您有 ActiveX 控件中的子控件,您需要激活 UI 的整个控件时激活的子控件。 渚嫔的方式 如果您有您的 ActiveX 控件内的编辑控件,添加处理程序,如下所示 ActiveX 控件类:
int CMyActiveXCtrl::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT
message)
{
if (!m_bUIActive)
OnActivateInPlace (TRUE, NULL); // == UI-Activate the control
return COleControl::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
因为 Internet Explorer 可能不会立即激活 UI 的控件,如果即使的是唯一的控件在页上,可能需要创建控件时自动申请 UI 激活。 这可以 COleControl::OnCreate (WM_CREATE) 处理程序的过程中执行。 无窗口控件没有得到 WM_CREATE 或任何窗口消息 ; 因此,此代码不会处理在无窗口控件中。 此外请注意这不能保证控件将保持 UI 的激活。 如果页面上其他控件的 UI 的激活请求相似的方式只能有一个将最终被激活 UI 的和将接收键击消息,所述中。 如果用户从一个 ActiveX 控件通过 Tab 切换,IE 将自动停用 UI 的控件。
int CMyActiveXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
OnActivateInPlace (TRUE, NULL); // == UI-Activate the control
return 0;
}
说明:
对于CMyActiveXCtrl能响应PreTranslateMessage,但对于控件的其他窗体类PreTranslateMessag仍然得不到响应
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询