それはちょっと奇妙な問題です、説明させてください。ドラッグアンドドロップをサポートする(ダイアログベースの)アプリをc ++/MFCで作成しました。
デフォルトのテーマを使用して、Windows7で次のテストを実行します。私のアプリは画面上で実行されています。これは(zオーダーの)トップウィンドウではありません。つまり、その上にある他のウィンドウによって隠されています。
リンクまたはChromeまたはFirefoxWebブラウザーからのテキスト選択だけをドラッグし始めると、最初にタスクバーのアプリのアイコンにアイコンが点滅し、アプリが画面にポップアップします(一番上のzオーダーを受け取ることによって)。その後、アプリにドラッグアンドドロップできます。すべてが正常に動作します。
選択したテキストまたはリンクを最初にアプリのタスクバーアイコンにドラッグしてアプリをトップウィンドウ(Zオーダー)にしたときに、IE 9(バージョン9.0.8112、バージョン9.0.12を更新)から同じことを行うと、アプリのアイコンは点滅し続けますが、ChromeやFFのように画面に表示されることはないため、ドラッグアンドドロップを中止する必要があります。
なぜそれがIEでそのように起こっているのか、そしてそれを修正する方法があるのかどうか、何か考えはありますか?
編集:以下の私のコメントに関するコードサンプルは次のとおりです。
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;
}