IResultData :: DeleteItem и IResultData :: DeleteAllRsltItems возвращают E_UNEXPECTED - PullRequest
0 голосов
/ 29 ноября 2010

У нас проблема с оснасткой Visual C ++ MMC на основе ATL.У нас есть элемент области действия, который отображается только на панели области действия.Когда этот элемент выбран, он заполняет область результатов набором элементов результатов.

Когда пользователь выбирает команду всплывающего меню «удалить все элементы», вызывается наш код привязки - сначала он выполняет некоторую работу, затем переходит кочистка просмотра результатов.Нам нужно следующее поведение: пользователь щелкает этот элемент меню, наш пользовательский код вызывается для выполнения полезной работы, затем все элементы исчезают из области результатов, элемент области остается выбранным.

Я пробовал два варианта того, чтосделать, чтобы удалить все элементы результата.

Вариант 1 - он вызывает IResultData::DeleteAllRsltItems(), который возвращает E_UNEXPECTED, а элементы не удаляются - они просто остаются там.

Вариация 2 - он вызывает IResultData::DeleteItem() для каждого элемента, ранее вставленного в область результатов.Снова каждый вызов возвращает E_UNEXPECTED, и элементы не удаляются.

Как правильно удалить все элементы результата из представления MMC?

1 Ответ

0 голосов
/ 28 июля 2011

Мы делаем это в обработчике 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.

...