0

ATL ベースの Visual C++ MMC スナップインに問題があります。スコープ ペインにのみ表示されるスコープ アイテムがあります。この項目を選択すると、結果ペインに一連の結果項目が表示されます。

ユーザーが「delete all items」ポップアップ メニュー コマンドを選択すると、スナップイン コードが呼び出されます。最初にいくつかの作業が行われ、次に結果ビューのクリアに進みます。次の動作が必要です: ユーザーがそのメニュー項目をクリックすると、カスタム コードが呼び出されて有用な作業が行われ、すべての項目が結果ペインから消え、スコープ項目が選択されたままになります。

すべての結果アイテムを削除する方法について、2 つのバリエーションを試しました。

バリエーション 1 - IResultData::DeleteAllRsltItems()which が呼び出されE_UNEXPECTED、アイテムは削除されず、そこにとどまります。

バリエーション 2 - 以前IResultData::DeleteItem()に結果ペインに挿入された各アイテムを呼び出します。ここでも各呼び出しが返さE_UNEXPECTEDれ、アイテムは削除されません。

MMC ビューからすべての結果項目を適切に削除するにはどうすればよいですか?

4

1 に答える 1

0

これはOnShowハ​​ンドラーで行います。すべての子アイテムは次のように削除されます。

CComPtr<IResultData> pResultData;
result = pConsole->QueryInterface(IID_IResultData, (void **)&pResultData);
assert( SUCCEEDED(result) );   
pResultData->DeleteAllRsltItems();

その後、再度追加しました:

RESULTDATAITEM rdi;
ZeroMemory(&rdi, sizeof(RESULTDATAITEM) );
rdi.mask        = RDI_STR | RDI_IMAGE | RDI_PARAM;        
rdi.nImage      = m_resultChildren[i]->GetBitmapIndex();
rdi.str         = reinterpret_cast< wchar_t* >(MMC_CALLBACK);
rdi.nCol        = 0;
rdi.lParam      = (LPARAM)m_resultChildren[i].get();    
HRESULT result = pResultData->InsertItem( &rdi );

これは、結果アイテムを削除するために機能します。E_UNEXPECTEDを引き起こしているコードに別の問題があると思います。

于 2011-07-27T20:58:30.780 に答える