如何以编程方式将一个 IMG 元素复制到剪贴板

http://support.microsoft.com/kb/293125

STDMETHODIMP CMyBrowser::CopyImage(LPDISPATCH pDispDoc, VARIANT vImageID)
   {
      HRESULT hr        = E_FAIL;
      IHTMLDocument2* pDoc = NULL;
      IHTMLElement* pelmBody = NULL;
      IHTMLElement2* pelmBodyTwo = NULL;
      IDispatch* pdispImgElement = NULL;
      IDispatch* pdispCtrlRange = NULL;
      IHTMLElementCollection* pColl = NULL;
      IHTMLControlElement* pCtrlElement = NULL;
      IHTMLControlRange* pCtrlRange = NULL;
      BSTR bstrCommand = SysAllocString(L"Copy");
      VARIANT_BOOL vbReturn;
      VARIANT vEmpty;
      VariantInit(&vEmpty);
	
      if (pDispDoc == NULL)
         goto Cleanup;

      if (FAILED(pDispDoc->QueryInterface(IID_IHTMLDocument2, (void**) &pDoc)))
         goto Cleanup;

      if (FAILED(pDoc->get_all(&pColl)))
         goto Cleanup;

      if (FAILED(pColl->item(vImageID, vEmpty, &pdispImgElement)) 
            || pdispImgElement == NULL)	
         goto Cleanup;
	
      if (FAILED(pDoc->get_body(&pelmBody)) || pelmBody == NULL)
         goto Cleanup;
	
      if (FAILED(pelmBody->QueryInterface(IID_IHTMLElement2, (void**) &pelmBodyTwo)) 
            || pelmBodyTwo == NULL)
         goto Cleanup;
	
      if (FAILED(pelmBodyTwo->createControlRange(&pdispCtrlRange)) 
            || pdispCtrlRange == NULL)
         goto Cleanup;
	
      if (FAILED(pdispCtrlRange->QueryInterface(IID_IHTMLControlRange, (void**) &pCtrlRange)) 
            || pCtrlRange == NULL)
         goto Cleanup;

      if (FAILED(pdispImgElement->QueryInterface(IID_IHTMLControlElement, (void**) &pCtrlElement)) 
            || pCtrlElement == NULL)
         goto Cleanup;
	
      hr = pCtrlRange->add(pCtrlElement);

      if (SUCCEEDED(hr))
         hr = pCtrlRange->execCommand(bstrCommand, VARIANT_FALSE, vEmpty, &vbReturn);
	
      pCtrlElement->Release();
      hr = S_OK;

   Cleanup:

      SysFreeString(bstrCommand);

      if (pCtrlRange)
         pCtrlRange->Release();

      if (pdispCtrlRange)
         pdispCtrlRange->Release();
	
      if (pelmBodyTwo)
         pelmBodyTwo->Release();

      if (pelmBody)
         pelmBody->Release();

      if (pdispImgElement)
         pdispImgElement->Release();

      if (pColl)
         pColl->Release();

      if (pDispDoc)
         pDispDoc->Release();

      return hr;
   }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值