类似QQ聊天记录,右键点击图像,可以把图片或表情复制,粘贴到word文档,或其他地方。

解决方案 »

  1.   

    IDM_COPY就可以
    1) 找到图片对应的IHTMLElement, QueryInterface得到IHTMLElement2
    2)IHTMLElement2::createControlRange 得到 IDispatch,再QueryInterface得到IHTMLControlRange
    3) IHTMLControlRange::execCommand(Copy)
    4) 在需要拷贝的地方,剪贴板粘贴
      

  2.   

    to skyxie:
    找到图片对应的IHTMLElement, QueryInterface得到IHTMLElement2这个要怎么找?
    我不是先选中图片在复制,如果先选中的话 直接调用 
    this->ExecWB(OLECMDID::OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, NULL, NULL);  就可以了。是想像QQ那样右击图片弹出菜单 直接复制,我右击图片的时候可以得到图片的路径,想通过下面方法复制图片,但是一直不成功,不知道错在哪里。
    if ( OpenClipboard(this->m_hWnd) )
    {
    CString strPath = "c:\\logo.bmp";
    CBitmap bmp;
    CClientDC dc(this);  HBITMAP   hBitmap=(HBITMAP)LoadImage(NULL, strPath.c_str(),   IMAGE_BITMAP,   0,   0,   LR_LOADFROMFILE|LR_CREATEDIBSECTION);   
    bmp.Attach(hBitmap); BITMAP bmpInfo;
    bmp.GetBitmap(&bmpInfo);
    CDC dcMemory;
    dcMemory.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);
    dcMemory.BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dc, 0, 0, SRCCOPY); 
    EmptyClipboard();
    SetClipboardData(CF_BITMAP, bmp.GetSafeHandle()); ::CloseClipboard(); dcMemory.SelectObject(pOldBitmap); 
    bmp.Detach();
    }
      

  3.   

    1) 你在图片上右键的时候肯定知道你是在哪个网页元素上右键的吧?
    如果你对 IHTMLElement 没有什么概念,建议你先看 MSHTML 相关的介绍文章
    MSHTML Overviews (http://msdn.microsoft.com/en-us/library/bb498651(VS.85).aspx)2) 我并没有先选中图片再exec copy啊
       IHTMLControlRange::execCommand(Copy)
       实际就是在指定的网页元素上直接exec
       你说的选中后再this->ExecWB(OLECMDID::OLECMDID_COPY,实际就是在doc对象上exec(操作的是doc的current selection对象)