我做了一个可以托拽HTML数据的com,只要把某个网页的某一部分拖到指定的网页的div即可触发ondrop事件。
但是我拖过来的东西已经是乱码了,怎么办啊,比如从百度拖动某些东西,过来以后都是乱码,英文msdn网站问题不大。
是不是我取数据由问题呢?下面是我取数据的代码片断。
FORMATETC fmtetc = { RegisterClipboardFormat( _T("HTML Format") ), NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
if( SUCCEEDED(pData->QueryGetData( &fmtetc )) ) {
STGMEDIUM stgmedium;
if( SUCCEEDED(pData->GetData( &fmtetc, &stgmedium )) ) {
//Secceed in getting the data from the IDataObject
LPBYTE pHTML = (LPBYTE)GlobalLock( stgmedium.hGlobal );
DWORD nSize = GlobalSize( stgmedium.hGlobal );
//Put the Html into DIV
CreateLegacyWebPiece( pHTML, nSize ); GlobalUnlock( stgmedium.hGlobal );
GlobalFree( stgmedium.hGlobal );
return;
}
}

解决方案 »

  1.   

    CF_HTML is entirely text format and uses the transformation format UTF-8
    msdn2.microsoft.com/en-us/library/ms649015.aspx
      

  2.   

    看了上面的文章,还是不很明白。
    LPBYTE pHTML = (LPBYTE)GlobalLock( stgmedium.hGlobal );这个时候,pHTML好像就是乱码了。怎么办呢?
      

  3.   

    乱码?用IMultiLanguage2::DetectCodepageInIStream看看到底是什么编码
      

  4.   

    http://community.csdn.net/Expert/topic/5100/5100666.xml?temp=.4011652
      

  5.   

    DetectEncodingInfo info[255];
    INT nScores = 255; IMultiLanguage2* pIMultiLanguage2   =   NULL;   
        
    HRESULT hr   =   CoCreateInstance(CLSID_CMultiLanguage,   NULL,   CLSCTX_INPROC_SERVER,   IID_IMultiLanguage2,   (void**)&pIMultiLanguage2);   
    hr = pIMultiLanguage2->DetectCodepageInIStream(
    MLDETECTCP_8BIT,
    0,
    m_spStream,
    info,
    &nScores); if (hr){
    ::MessageBox(NULL, _T("OK"),_T("Warning"),MB_ICONSTOP);
    }
    pIMultiLanguage2->Release();
    运行到DetectCodepageInIStream时,程序就停了,为什么阿。