在 MFC(Microsoft Foundation Classes)中,COleDataSource 类确实有一个名为 CacheGlobalData 的公共方法。这个方法的作用是将全局内存中的数据缓存到数据源对象中,以便在进行拖放操作时可以传递这些数据。

COleDataSource::CacheGlobalData 的声明可能如下:
BOOL CacheGlobalData(CLIPFORMAT cfFormat, HGLOBAL hGlobal);

  •  cfFormat 参数表示要缓存的数据的格式,它是一个 CLIPFORMAT 类型的标识符。

  •  hGlobal 参数是一个全局内存句柄,包含了要缓存的数据。


这个方法用于在数据源中缓存拖放操作所需的数据。例如:
COleDataSource* pDataSource = new COleDataSource;

CString strData = _T("Hello, World!");
HGLOBAL hGlobal = ::GlobalAlloc(GHND | GMEM_SHARE, (strData.GetLength() + 1) * sizeof(TCHAR));
LPTSTR pGlobalData = static_cast<LPTSTR>(::GlobalLock(hGlobal));
_tcscpy_s(pGlobalData, strData.GetLength() + 1, strData);
::GlobalUnlock(hGlobal);

pDataSource->CacheGlobalData(CF_TEXT, hGlobal);

// 在这里可以继续添加其他格式的数据

// 开始拖放操作
DROPEFFECT dropEffect = pDataSource->DoDragDrop(DROPEFFECT_COPY | DROPEFFECT_MOVE);

// 处理拖放操作的结果

// 释放数据源对象
delete pDataSource;

在这个例子中,COleDataSource 对象通过 new 运算符创建,然后通过 CacheGlobalData 方法将文本数据的全局内存句柄缓存到数据源中。在实际应用中,你可能需要根据需要多次调用 CacheGlobalData 方法,缓存不同格式的数据。在拖放操作完成后,通过 delete 运算符释放数据源对象。


转载请注明出处:http://www.zyzy.cn/article/detail/21313/MFC/COleDataSource