【发布时间】:2013-01-23 00:45:20
【问题描述】:
这是一个奇怪的问题,让我试着解释一下。我在支持拖放的 c++/MFC 中编写了一个(基于对话框的)应用程序。
我在 Windows 7 上使用默认主题进行以下测试。我的应用程序正在屏幕上运行。它不是顶部窗口(按其 z 顺序),或者换句话说,它被其顶部的其他窗口遮挡。
如果我开始从 Chrome 或 Firefox 网络浏览器中拖动链接或仅选择文本,首先进入任务栏上我的应用程序图标,该图标会闪烁并且我的应用程序会在屏幕上弹出(通过接收顶部 z-order ) 所以我可以拖放到我的应用程序中。一切正常。
如果我在 IE 9(版本 9.0.8112,更新版本 9.0.12)中执行相同操作,则首先将选定的文本或链接拖到我的应用程序的任务栏图标以使我的应用程序成为顶部窗口(在 z- order),应用程序图标继续闪烁,但它从未像 Chrome 或 FF 那样显示在屏幕上,因此我不得不放弃我的拖放操作。
知道为什么 IE 会出现这种情况吗?是否有办法修复它?
编辑:下面是关于我的 cmets 的代码示例:
HRESULT __stdcall DragEnter(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect)
{
//IDropTarget::DragEnter
m_fAllowDrop = QueryDataObject(pDataObject);
if(m_fAllowDrop)
{
//SUCCESS
// get the dropeffect based on keyboard state
}
else
{
//FAILURE
*pdwEffect = DROPEFFECT_NONE;
}
return S_OK;
}
BOOL QueryDataObject(IDataObject* pDataObject, int* pnOutDataType)
{
static FORMATETC fmtetc_file = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
static FORMATETC fmtetc_txt = {CF_UNICODETEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
BOOL bRes = FALSE;
HRESULT hr;
//See if our data type
hr = pDataObject->QueryGetData(&fmtetc_file);
if(hr == S_OK)
{
bRes = TRUE;
}
//In my case hr is E_FAIL or 0x80004005
hr = pDataObject->QueryGetData(&fmtetc_txt);
if(hr == S_OK)
{
bRes = TRUE;
}
//In my case hr is E_FAIL or 0x80004005
return bRes;
}
【问题讨论】:
标签: c++ internet-explorer winapi user-interface drag-and-drop