MFC ActiveX Control in IE Doesn't Detect Keystrokes的问题(Q168777)

do_and_enjoy 2010-08-27 03:27:02
就是Activex中控件无法响应方向键等键的问题,微软给出的解决方法:Q168777(链接http://support.microsoft.com/kb/168777/en-us?fr=1)。

在我的工程中,回退键(BackSpace)键无法在控件中响应。

具体地说,我新建一个MFC的ActiveX工程,名为Test,在该工程中插入一个Child类型的对话框,取名为MainDlg,对话框中插入一个Edit Control。为CTestCtrl类添加一个CMainDlg类的成员变量m_MainDlg。在CTestCtrl的OnCreate里面,调用m_MainDlg.Create(IDD_DIALOG_MAIN,this),使控件启动的时候显示MainDlg。

现在在IE中测试该控件,当在编辑框中输入文字的时候,无法通过BackSpace键清除打错的字,该键被识别为IE的退后功能键。(当MainDlg是popup或overlapped类型时,没有这个问题,但我这个工程必须是Child类型)。

按照微软的解决办法:

1、重写了CTestCtrl类的PreTranslateMessage方法

BOOL CBacksapceTestCtrl::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class

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:
case VK_BACK://微软的方法本来没有这个,本人加了这一句,用来捕捉BackSpace键
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);

}


2、为CTestCtrl添加了OnMouseActivate响应

int CBacksapceTestCtrl::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if (!m_bUIActive)
OnActivateInPlace (TRUE, NULL); // == UI-Activate the control

return COleControl::OnMouseActivate(pDesktopWnd, nHitTest, message);
}


3、在CTestCtrl的Oncreate里面添加OnActivateInPlace方法

int CBacksapceTestCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
OnActivateInPlace (TRUE, NULL); // == UI-Activate the control//添加该句
m_MainDlg.Create(IDD_MAINDLG,this);
m_MainDlg.ShowWindow(SW_SHOW);
return 0;
}


到现在为止,BackSpace键无法被IE检测到了,但在MainDlg的编辑框中,还是无法响应。

以前论坛上有人提到过同样的问题,说是要激活控件。微软给出的方法,也包含这个意思。我这里不知道哪里出问题了,请各位解答。
...全文
182 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mpbchina 2010-08-27
  • 打赏
  • 举报
回复
不用重写PreTranslateMessage(MSG* pMsg)方法,直接用步骤2、3,就可以了。
源码链接: https://pan.quark.cn/s/9f500ac403c2 摄像头配置是嵌入式系统构建中的一个关键步骤,它涉及到硬件与软件的紧密协作。图像信号处理器(ISP)作为图像信号处理的核心单元,在摄像头配置过程中扮演着至关重要的角色。在硬件层面,它涵盖了摄像头与ISP之间的连接以及信号传输的细节;在软件层面,主要依托V4L2框架进行视频流的采集和处理。接下来将具体说明文档中涉及的硬件机制、软件机制、信号配置及V4L2等领域的摄像头配置实践经验。 ### 硬件机制与连接 文档首先阐述了硬件线路中中央处理器与摄像头之间的连接方式。在此,相机串行接口(CSI)模块是摄像头数据传输的核心部分,它负责与外部CMOS图像感应元件进行交互。CSI接口包含以下几个关键信号线: 1. **CSI_VSYNC (垂直同步信号)**:用于标示一帧图像的起始点。该信号传输方向为从图像感应元件(sensor)至应用处理器(AP)。 2. **CSI_HSYNC (水平同步信号)**:用于提供行同步信号,并用于识别消隐信号。同样,信号流向为sensor至AP。 3. **CSI_D[7:0]**:8位摄像头数据总线,用于传输各种图像数据,包括YUV、YCC、RGB或Bayer格式。数据流向为sensor至AP。 4. **CSI_MCLK (传感器主时钟信号)**:由传感器输出主时钟信号,为外部摄像头提供时钟基准。信号流向为AP至sensor。 5. **CSI_PIXCLK (像素时钟信号)**:由摄像头输出,通常与MCLK主时钟信号频率相同。信号流向为sensor至AP。 正确设置这些连接,确保信号同步传输,是硬件配置的基础。 ### 软件机制与驱动程序 摄像头驱动...

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧