2013-04-25 18 views
0

我有以下代碼來刪除該文件。這段代碼在winXP上工作正常。但是當我在Windows 7上運行它不會刪除該文件。 InvokeCommand語句執行時,我得到錯誤代碼0x80270000。IContextMenu :: InvokeCommand錯誤代碼0x80270000在Windows 7上

HRESULT hr = m_psfCurFolder->GetUIObjectOf(AfxGetMainWnd()->m_hWnd, 
    uiCount, 
    (LPCITEMIDLIST*)aPidls, 
    IID_IContextMenu, 
    NULL, 
    (LPVOID*)&pcm); 

    if (SUCCEEDED (hr)) 
    { 
     HMENU hPopup = CreatePopupMenu(); 
     hr = pcm->QueryContextMenu(hPopup, 0, 1, 0x7fff, CMF_NORMAL); 

     if (SUCCEEDED (hr)) 
     { 
       CMINVOKECOMMANDINFO cmi; 
       cmi.cbSize = sizeof(CMINVOKECOMMANDINFO); 
       cmi.fMask = CMIC_MASK_ASYNCOK; 
       cmi.hwnd = (HWND) GetParent(); 
       cmi.lpVerb = (LPCSTR)(INT_PTR)(ID_MENU_DELETE - 1); 
       cmi.lpParameters = NULL; 
       cmi.lpDirectory = NULL; 
       cmi.nShow = SW_SHOWNORMAL; 
       cmi.dwHotKey = 0; 
       cmi.hIcon = NULL; 

       BOOL bUndoDel = FALSE; 
       if (!(GetKeyState(VK_SHIFT) & SHIFTED)) 
       { 
        bUndoDel = TRUE; 
       } 
       hr = pcm->InvokeCommand (&cmi); 


       if (FAILED(hr)) 
       { 
        _com_error error(hr); 
        LPCTSTR errorText = error.ErrorMessage(); 

        AfxMessageBox(_T("Unable to perform action")); 
       } 
} 
+0

您的問題中有幾條重要的信息缺失。什麼是您要刪除的文件,以及ID_MENU_DELETE命令處理程序的代碼在哪裏。如果命令處理程序被調用但失敗,看看發生了什麼會很有幫助。 – 2013-04-25 07:36:13

回答

1

我發現了同樣的問題,並張貼的細節和解決方案在Microsoft Visual Studio Language forumMicrosoft Connect

概括地說,這條線...

cmi.hwnd = (HWND) GetParent(); 

...應替換:

cmi.hwnd = GetParent()->GetSafeHwnd(); 

即使一個CWnd *的一個HWND鑄造產生一個相同的數字值,但是,由於某種未知的原因,它在Windows XP(它的工作原理)和Windows 7(它沒有)之間產生不同的結果。使用GetSafeHwnd()修復問題,以便現在顯示「刪除文件」確認對話框。它也適用於Windows XP。