CHtmlView 如何实现图片的 复制粘贴。 类似QQ聊天记录,右键点击图像,可以把图片或表情复制,粘贴到word文档,或其他地方。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 IDM_COPY就可以1) 找到图片对应的IHTMLElement, QueryInterface得到IHTMLElement22)IHTMLElement2::createControlRange 得到 IDispatch,再QueryInterface得到IHTMLControlRange3) IHTMLControlRange::execCommand(Copy)4) 在需要拷贝的地方,剪贴板粘贴 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(); } 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对象) 如何用vc显示各种图象 想做一个P2P的通讯软件,大家给点建议 关于udp的问题 有关VC++对话框资源中的picture控件的使用问题 为什么我的出现重复包含呢? 关于控制刻录机(CD_WR)? 请推荐几个vc源代码下载的地方,一定有分! 帮忙看看我的程序哪错了 为什么用**ppv(com)too 一个有意思的问题:如何用VC实现像在vb设计环境中动态拖放修改控件,高分相送 初学MFC打算做一个通用的记牌器外挂 如何使CMainFrame上的滚动条滚动
1) 找到图片对应的IHTMLElement, QueryInterface得到IHTMLElement2
2)IHTMLElement2::createControlRange 得到 IDispatch,再QueryInterface得到IHTMLControlRange
3) IHTMLControlRange::execCommand(Copy)
4) 在需要拷贝的地方,剪贴板粘贴
找到图片对应的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();
}
如果你对 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对象)