我自己用vc编了一个activex控件,该控件动态创建一个文本框还有一个按钮。目的是可以在文本框中输入信息。但是奇怪的是,把该控件嵌入到web中,通过ie浏览时,可以在文本框中输入信息,但是这时候退格健不起作用了,同时方向健也不能起作用。也就是说不能删除文本框中的信息。但是如果单击一下文本框外面一个地方,退格健就可以起作用了。
怎么样实现不通过"单击"就可以让退格健起作用呢?谢谢

解决方案 »

  1.   

    主要代码如下:
    在OnDraw中:CBrush brush(RGB(0,128,255));pdc->FillRect(.....);
    在OnCreate中:edit.Create(........);//edit的类型是CEdit
                  button.Create(.....);//button的类型时CButton;
    当然为了响应按钮事件,还得自己添加消息代码,这里就不列出。
    就是不明白嵌入web时........
      

  2.   

    把ondraw()里的代码都注掉,
    edit.Create(........);//edit的类型是CEdit
                  button.Create(.....);//button的类型时CButton;
    把这放到onsize()中
      

  3.   

    重载PreTranslateMsg函数,截获其中的控制键代码。
    例如
    BOOL CXXXCtrl::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message == WM_KEYDOWN)
    {
    switch(pMsg->wParam)
    {
    case VK_LEFT:
    case VK_RIGHT:
    case VK_DOWN:
    case VK_UP:
    case VK_PRIOR:
    case VK_NEXT:
    SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
    return TRUE;
    }
    }
    return COleControl::PreTranslateMessage(pMsg);
    }
      

  4.   

    请问一下,SendMessage把消息,发给谁呢?我试了一下。
    按左右健,还是不能移动光标
      

  5.   

    原因好简单:Backspace、方向键都被IE给霸占了。两年前遇到了此问题,具体怎么解决的记不清了,好象是等控件获的焦点时模拟一个鼠标点击消息给控件就行了。
      

  6.   

    我以为你是直接从CEdit中SubClass,如果是自己创建的CEdit控件,那么就发给Edit窗口。BOOL CXXXCtrl::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message == WM_KEYDOWN)
    {
    switch(pMsg->wParam)
    {
    case VK_LEFT:
    case VK_RIGHT:
    case VK_DOWN:
    case VK_UP:
    case VK_PRIOR:
    case VK_NEXT:
    ::SendMessage(m_wndEdit.m_hWnd, pMsg->message,pMsg->wParam,pMsg->lParam);
    return TRUE;
    }
    }
    return COleControl::PreTranslateMessage(pMsg);
    }假设m_wndEdit是你的CXXXCtrl中的CEdit类型的成员变量。