Re[5]: Вопрос - как динамически обновлять ММС?
От: Admiral Украина  
Дата: 06.03.02 12:32
Оценка: 3 (1)
Здравствуйте Тимур, Вы писали:

Т>Здравствуйте Admiral, Вы писали:

Т>Извините, забыл зайти как положено и появился в форуме как аноним.
Т>Итак, еще раз.
Т>Я делаю следующее:

Т>
Т>HRESULT CMyClassData::AddNew(bool& bHandled, CSnapInObjectRootBase* pObj) 
Т>{ 
Т>  CAddDLG dlgAdd; 
Т>  int ret=dlgAdd.DoModal(); 
Т>  if(ret==IDOK) 
Т>  { 
Т>    std::auto_ptr <CChildData> spData(new CChildData(dlgAdd.m_Name));
Т>    m_myCollection.push_back(spData); 
Т>    CComPtr<IConsole> mCons; 
Т>    mCons=((CMyClass*)pObj)->>m_spConsole ; 
Т>    CComQIPtr<IConsoleNameSpace, &IID_IConsoleNameSpace> spConsoleNameSpace(mCons); 
Т>    SCOPEDATAITEM sdi; 
Т>    ::ZeroMemory(&sdi,sizeof(SCOPEDATAITEM)); 
Т>    sdi.mask =SDI_STR | SDI_PARAM | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARENT; 
Т>    spData->>GetScopePaneInfo(&sdi); 
Т>    sdi.displayname =MMC_CALLBACK; 
Т>    sdi.relativeID = spData->get_Cookie(); 
Т>    HRESULT hr=spConsoleNameSpace->InsertItem (&sdi); } 
Т>  } 
Т>  bHandled=false;//true; 
Т>  return S_OK; 
Т>}; 
Т>

Т>InsertItem возвращает ошибку и ничего не вставляет.
Т>Очевидно, что я делаю что-то не так. Но что — если есть какие-нибудь идеи, буду очень благодарен.
Т>Тимур

Что возвращает spData->get_Cookie()? Если HSCOPEITEM родителя, тогда я пока затрудняюсь ответить, что не так.

ЗЫ:
Кстати, об auto_ptr:
http://rsdn.ru/forum/message.asp?mid=32311
Автор: Рек
Дата: 28.02.02
Re: Вопрос - как динамически обновлять ММС?
От: Андрей Россия  
Дата: 05.03.02 06:17
Оценка: 1 (1)
Здравствуйте Тимур, Вы писали:

Т>

Т>Требуется сделать очень простую вещь — изобразить в ММС список строк. В меню существует пункт " Add New", который позволяет ввести новую строку. Она добавляется в список, но как обновить его в ММС?
Т>Буду очень признателен, если кто-нибудь откликнется

IConsoleNameSpace2::InsertItem или IResultData::InsertItem
Re[5]: Вопрос - как динамически обновлять ММС?
От: Андрей Россия  
Дата: 06.03.02 05:18
Оценка: 1 (1)
Здравствуйте Тимур, Вы писали:

skip

Вроде все правильно делаешь, на первый взгляд. А что за ошибка возвращается?
Вопрос - как динамически обновлять ММС?
От: Тимур  
Дата: 01.03.02 22:53
Оценка:
Требуется сделать очень простую вещь — изобразить в ММС список строк. В меню существует пункт " Add New", который позволяет ввести новую строку. Она добавляется в список, но как обновить его в ММС?
Буду очень признателен, если кто-нибудь откликнется
Re[2]: Вопрос - как динамически обновлять ММС?
От: Тимур  
Дата: 05.03.02 18:49
Оценка:
Здравствуйте Андрей, Вы писали:

А>Здравствуйте Тимур, Вы писали:


Т>>

Т>>Требуется сделать очень простую вещь — изобразить в ММС список строк. В меню существует пункт " Add New", который позволяет ввести новую строку. Она добавляется в список, но как обновить его в ММС?
Т>>Буду очень признателен, если кто-нибудь откликнется

А>IConsoleNameSpace2::InsertItem или IResultData::InsertItem


Но непонятно, где взять пойнтер то IConsoleNameSpace?
Re[3]: Вопрос - как динамически обновлять ММС?
От: Admiral Украина  
Дата: 05.03.02 19:23
Оценка:
Здравствуйте Тимур, Вы писали:

Т>Здравствуйте Андрей, Вы писали:


А>>Здравствуйте Тимур, Вы писали:


Т>>>

Т>>>Требуется сделать очень простую вещь — изобразить в ММС список строк. В меню существует пункт " Add New", который позволяет ввести новую строку. Она добавляется в список, но как обновить его в ММС?
Т>>>Буду очень признателен, если кто-нибудь откликнется

А>>IConsoleNameSpace2::InsertItem или IResultData::InsertItem


Т>Но непонятно, где взять пойнтер то IConsoleNameSpace?


В твой IComponent->Initialize() передается указатель на IConsole. По умолчанию, ATL-реализация сохраняет его. У этого указателя в любое время можно спросить нужный тебе интерфейс.
Re[4]: Вопрос - как динамически обновлять ММС?
От: Аноним  
Дата: 05.03.02 20:59
Оценка:
Здравствуйте Admiral, Вы писали:

A>Здравствуйте Тимур, Вы писали:


Т>>Здравствуйте Андрей, Вы писали:


А>>>Здравствуйте Тимур, Вы писали:


Т>>>>

Т>>>>Требуется сделать очень простую вещь — изобразить в ММС список строк. В меню существует пункт " Add New", который позволяет ввести новую строку. Она добавляется в список, но как обновить его в ММС?
Т>>>>Буду очень признателен, если кто-нибудь откликнется

А>>>IConsoleNameSpace2::InsertItem или IResultData::InsertItem


Т>>Но непонятно, где взять пойнтер то IConsoleNameSpace?


A>В твой IComponent->Initialize() передается указатель на IConsole. По умолчанию, ATL-реализация сохраняет его. У этого указателя в любое время можно спросить нужный тебе интерфейс.

Спасибо за ответ, но у меня по-прежнему не получается.
Я делаю следующее:

HRESULT CMyClassData::AddNew(bool& bHandled, CSnapInObjectRootBase* pObj)
{
CAddDLG dlgAdd;
int ret=dlgAdd.DoModal();
if(ret==IDOK)
{
std::auto_ptr <CChildData> spData(new CChildData(dlgAdd.m_Name));
m_myCollection.push_back(spData);
CComPtr<IConsole> mCons;
mCons=((CMyClass*)pObj)->m_spConsole ;
CComQIPtr<IConsoleNameSpace, &IID_IConsoleNameSpace> spConsoleNameSpace(mCons);

SCOPEDATAITEM sdi;
::ZeroMemory(&sdi,sizeof(SCOPEDATAITEM));
sdi.mask =SDI_STR | SDI_PARAM | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARENT;
spData->GetScopePaneInfo(&sdi);
sdi.displayname =MMC_CALLBACK;
sdi.relativeID = spData->get_Cookie();
HRESULT hr=spConsoleNameSpace->InsertItem (&sdi); }
}
bHandled=false;//true;
return S_OK;
};
InsertItem возвращает ошибку и ничего не вставляет.
Очевидно, что я делаю что-то не так. Но что — если есть какие-нибудь идеи, буду очень благодарен.
Тимур
Re[4]: Вопрос - как динамически обновлять ММС?
От: Тимур  
Дата: 05.03.02 21:17
Оценка:
Здравствуйте Admiral, Вы писали:
Извините, забыл зайти как положено и появился в форуме как аноним.
Итак, еще раз.
Я делаю следующее:

HRESULT CMyClassData::AddNew(bool& bHandled, CSnapInObjectRootBase* pObj)
{
CAddDLG dlgAdd;
int ret=dlgAdd.DoModal();
if(ret==IDOK)
{
std::auto_ptr <CChildData> spData(new CChildData(dlgAdd.m_Name));
m_myCollection.push_back(spData);
CComPtr<IConsole> mCons;
mCons=((CMyClass*)pObj)->m_spConsole ;
CComQIPtr<IConsoleNameSpace, &IID_IConsoleNameSpace> spConsoleNameSpace(mCons);

SCOPEDATAITEM sdi;
::ZeroMemory(&sdi,sizeof(SCOPEDATAITEM));
sdi.mask =SDI_STR | SDI_PARAM | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARENT;
spData->GetScopePaneInfo(&sdi);
sdi.displayname =MMC_CALLBACK;
sdi.relativeID = spData->get_Cookie();
HRESULT hr=spConsoleNameSpace->InsertItem (&sdi); }
}
bHandled=false;//true;
return S_OK;
};
InsertItem возвращает ошибку и ничего не вставляет.
Очевидно, что я делаю что-то не так. Но что — если есть какие-нибудь идеи, буду очень благодарен.
Тимур


A>Здравствуйте Тимур, Вы писали:


Т>>Здравствуйте Андрей, Вы писали:


А>>>Здравствуйте Тимур, Вы писали:


Т>>>>

Т>>>>Требуется сделать очень простую вещь — изобразить в ММС список строк. В меню существует пункт " Add New", который позволяет ввести новую строку. Она добавляется в список, но как обновить его в ММС?
Т>>>>Буду очень признателен, если кто-нибудь откликнется

А>>>IConsoleNameSpace2::InsertItem или IResultData::InsertItem


Т>>Но непонятно, где взять пойнтер то IConsoleNameSpace?


A>В твой IComponent->Initialize() передается указатель на IConsole. По умолчанию, ATL-реализация сохраняет его. У этого указателя в любое время можно спросить нужный тебе интерфейс.
Re[6]: Вопрос - как динамически обновлять ММС?
От: Тимур  
Дата: 06.03.02 15:15
Оценка:
Здравствуйте Admiral, Вы писали:

A>Здравствуйте Тимур, Вы писали:


Т>>Здравствуйте Admiral, Вы писали:

Т>>Извините, забыл зайти как положено и появился в форуме как аноним.
Т>>Итак, еще раз.
Т>>Я делаю следующее:

Т>>
Т>>HRESULT CMyClassData::AddNew(bool& bHandled, CSnapInObjectRootBase* pObj) 
Т>>{ 
Т>>  CAddDLG dlgAdd; 
Т>>  int ret=dlgAdd.DoModal(); 
Т>>  if(ret==IDOK) 
Т>>  { 
Т>>    std::auto_ptr <CChildData> spData(new CChildData(dlgAdd.m_Name));
Т>>    m_myCollection.push_back(spData); 
Т>>    CComPtr<IConsole> mCons; 
Т>>    mCons=((CMyClass*)pObj)->>m_spConsole ; 
Т>>    CComQIPtr<IConsoleNameSpace, &IID_IConsoleNameSpace> spConsoleNameSpace(mCons); 
Т>>    SCOPEDATAITEM sdi; 
Т>>    ::ZeroMemory(&sdi,sizeof(SCOPEDATAITEM)); 
Т>>    sdi.mask =SDI_STR | SDI_PARAM | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARENT; 
Т>>    spData->>GetScopePaneInfo(&sdi); 
Т>>    sdi.displayname =MMC_CALLBACK; 
Т>>    sdi.relativeID = spData->get_Cookie(); 
Т>>    HRESULT hr=spConsoleNameSpace->InsertItem (&sdi); } 
Т>>  } 
Т>>  bHandled=false;//true; 
Т>>  return S_OK; 
Т>>}; 
Т>>

Т>>InsertItem возвращает ошибку и ничего не вставляет.
Т>>Очевидно, что я делаю что-то не так. Но что — если есть какие-нибудь идеи, буду очень благодарен.
Т>>Тимур

A>Что возвращает spData->get_Cookie()? Если HSCOPEITEM родителя, тогда я пока затрудняюсь ответить, что не так.


A>ЗЫ:

A>Кстати, об auto_ptr:
A>http://rsdn.ru/forum/message.asp?mid=32311
Автор: Рек
Дата: 28.02.02


Похоже, что Вы правы — get_Cookie возвращает что-то не то. А где добыть HSCOPEITEM родителя?
Re[7]: Вопрос - как динамически обновлять ММС?
От: Тимур  
Дата: 06.03.02 17:43
Оценка:
Здравствуйте Тимур, Вы писали:

Т>Здравствуйте Admiral, Вы писали:


A>>Здравствуйте Тимур, Вы писали:


Т>>>Здравствуйте Admiral, Вы писали:

Т>>>Извините, забыл зайти как положено и появился в форуме как аноним.
Т>>>Итак, еще раз.
Т>>>Я делаю следующее:

Т>>>
Т>>>HRESULT CMyClassData::AddNew(bool& bHandled, CSnapInObjectRootBase* pObj) 
Т>>>{ 
Т>>>  CAddDLG dlgAdd; 
Т>>>  int ret=dlgAdd.DoModal(); 
Т>>>  if(ret==IDOK) 
Т>>>  { 
Т>>>    std::auto_ptr <CChildData> spData(new CChildData(dlgAdd.m_Name));
Т>>>    m_myCollection.push_back(spData); 
Т>>>    CComPtr<IConsole> mCons; 
Т>>>    mCons=((CMyClass*)pObj)->>m_spConsole ; 
Т>>>    CComQIPtr<IConsoleNameSpace, &IID_IConsoleNameSpace> spConsoleNameSpace(mCons); 
Т>>>    SCOPEDATAITEM sdi; 
Т>>>    ::ZeroMemory(&sdi,sizeof(SCOPEDATAITEM)); 
Т>>>    sdi.mask =SDI_STR | SDI_PARAM | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARENT; 
Т>>>    spData->>GetScopePaneInfo(&sdi); 
Т>>>    sdi.displayname =MMC_CALLBACK; 
Т>>>    sdi.relativeID = spData->get_Cookie(); 
Т>>>    HRESULT hr=spConsoleNameSpace->InsertItem (&sdi); } 
Т>>>  } 
Т>>>  bHandled=false;//true; 
Т>>>  return S_OK; 
Т>>>}; 
Т>>>

Т>>>InsertItem возвращает ошибку и ничего не вставляет.
Т>>>Очевидно, что я делаю что-то не так. Но что — если есть какие-нибудь идеи, буду очень благодарен.
Т>>>Тимур

A>>Что возвращает spData->get_Cookie()? Если HSCOPEITEM родителя, тогда я пока затрудняюсь ответить, что не так.


A>>ЗЫ:

A>>Кстати, об auto_ptr:
A>>http://rsdn.ru/forum/message.asp?mid=32311
Автор: Рек
Дата: 28.02.02


Т>Похоже, что Вы правы — get_Cookie возвращает что-то не то. А где добыть HSCOPEITEM родителя?


Спасибо всем — вроде бы заработало. HSCOPEITEM родителя запоминается при первом обращении к Notify и потом может быть использовано.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.