Re: Как в MMC Snap-in убрать (+)?
От: Андрей Россия  
Дата: 12.11.01 04:26
Оценка: 11 (2)
Здравствуйте Spark2K, Вы писали:

SK>Как в MMC Snap-in убрать знак плюс(+) в тех нодах у которых нет потомков?

SK>Пробую в конструкторе написать:
SK> m_scopeDataItem.cChildren = 0;
SK> m_scopeDataItem.mask |= SDI_CHILDREN;
SK>но это не дает нужного эффекта.

SK>Подскажите, кто знает.


Ответ: никак. Это особенность MMC и она подробно документирована в MSDN. Дело в том, что к твоим узлам могут подключаться другие Snap-ins и MMC ничего о них не знает, пока ты не раскроешь узел. В этот момент MMC и пытается загружать связанные Snap-ins, если они есть — узел раскрывается, если нет — удаляется знак плюс.
Как в MMC Snap-in убрать (+)?
От: Spark2K Россия  
Дата: 10.11.01 13:57
Оценка:
Как в MMC Snap-in убрать знак плюс(+) в тех нодах у которых нет потомков?
Пробую в конструкторе написать:
m_scopeDataItem.cChildren = 0;
m_scopeDataItem.mask |= SDI_CHILDREN;
но это не дает нужного эффекта.

Подскажите, кто знает.
Re: Как в MMC Snap-in убрать (+)?
От: Igor Soukhov  
Дата: 10.11.01 19:24
Оценка:
Здравствуйте Spark2K, Вы писали:

SK>Как в MMC Snap-in убрать знак плюс(+) в тех нодах у которых нет потомков?

SK>Пробую в конструкторе написать:
SK> m_scopeDataItem.cChildren = 0;
SK> m_scopeDataItem.mask |= SDI_CHILDREN;
SK>но это не дает нужного эффекта.
попробуй после создания ноды отрефрешить эту ноду. Сейчас в далеке от сорцов —
в понедельник-вторник могу их глянуть.

SK>Подскажите, кто знает.

зы: этот пост следовало посылать или в COM/AX или в Win32 API форум ... я обычно
зверстую когда вижу засорение С++ — ного форума
* thriving in a production environment *
Re[2]: Как в MMC Snap-in убрать (+)?
От: Аноним  
Дата: 12.11.01 07:02
Оценка:
Здравствуйте Андрей, Вы писали:

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


SK>>Как в MMC Snap-in убрать знак плюс(+) в тех нодах у которых нет потомков?

SK>>Пробую в конструкторе написать:
SK>> m_scopeDataItem.cChildren = 0;
SK>> m_scopeDataItem.mask |= SDI_CHILDREN;
SK>>но это не дает нужного эффекта.

SK>>Подскажите, кто знает.


А>Ответ: никак. Это особенность MMC и она подробно документирована в MSDN. Дело в том, что к твоим узлам могут подключаться другие Snap-ins и MMC ничего о них не знает, пока ты не раскроешь узел. В этот момент MMC и пытается загружать связанные Snap-ins, если они есть — узел раскрывается, если нет — удаляется знак плюс.


см. Platform SDK Documentation\Setup and System Administration\Microsoft Management Console\MMC Snap-in Designer for Visual Basic\Changes from MMC Snap-in Designer Beta 1.
Правда я не смог в C++ сделать нечто подобное.
Re[2]: Как в MMC Snap-in убрать (+)?
От: Аноним  
Дата: 12.11.01 07:06
Оценка:
Здравствуйте Igor Soukhov, Вы писали:

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


SK>>Как в MMC Snap-in убрать знак плюс(+) в тех нодах у которых нет потомков?

SK>>Пробую в конструкторе написать:
SK>> m_scopeDataItem.cChildren = 0;
SK>> m_scopeDataItem.mask |= SDI_CHILDREN;
SK>>но это не дает нужного эффекта.
IS>попробуй после создания ноды отрефрешить эту ноду. Сейчас в далеке от сорцов -
IS>в понедельник-вторник могу их глянуть.

SK>>Подскажите, кто знает.

IS>зы: этот пост следовало посылать или в COM/AX или в Win32 API форум ... я обычно
IS>зверстую когда вижу засорение С++ — ного форума

Прошу прощения за неточный пост.
Будет очень здорово, если бросишь кусочек сорца. Большое спасибо за ответ.
Re[3]: Как в MMC Snap-in убрать (+)?
От: Андрей Россия  
Дата: 12.11.01 07:36
Оценка:
SK>>>Подскажите, кто знает.

А>>Ответ: никак.


Извиняюсь за неточный ответ. Просто у Microsoft в одном месте написано одно, в другом — другое. Кстати, следующий код прекрасно работает в методе Notify:

case MMCN_EXPAND:
{
  CComQIPtr<IConsoleNameSpace, &IID_IConsoleNameSpace> spConsoleNameSpace(spConsole);
  if (arg) {
    for (int ctr = 0; ctr < m_vDatabases.size(); ctr++) {
      SCOPEDATAITEM sdi;
      ::ZeroMemory(&sdi, sizeof(SCOPEDATAITEM));
      sdi.mask = SDI_STR | SDI_PARAM | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARENT | SDI_CHILDREN;
      m_vDatabases[ctr]->GetScopePaneInfo(&sdi);
      sdi.displayname = MMC_CALLBACK;
      sdi.relativeID = param;
      hr = spConsoleNameSpace->InsertItem(&sdi);
      assert(SUCCEEDED(hr));

      m_vDatabases[ctr]->SetHandle(sdi.ID);
    }
  }
  hr = S_OK;
  break;
}


То есть надо это делать не для m_scopeDataItem, а для узла, который нужно показать.
Re[4]: Как в MMC Snap-in убрать (+)?
От: Аноним  
Дата: 12.11.01 08:41
Оценка:
Здравствуйте Андрей, Вы писали:

SK>>>>Подскажите, кто знает.


А>>>Ответ: никак.


А>Извиняюсь за неточный ответ. Просто у Microsoft в одном месте написано одно, в другом — другое. Кстати, следующий код прекрасно работает в методе Notify:


А>
А>case MMCN_EXPAND:
А>{
А>  CComQIPtr<IConsoleNameSpace, &IID_IConsoleNameSpace> spConsoleNameSpace(spConsole);
А>  if (arg) {
А>    for (int ctr = 0; ctr < m_vDatabases.size(); ctr++) {
А>      SCOPEDATAITEM sdi;
А>      ::ZeroMemory(&sdi, sizeof(SCOPEDATAITEM));
А>      sdi.mask = SDI_STR | SDI_PARAM | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARENT | SDI_CHILDREN;
А>      m_vDatabases[ctr]->GetScopePaneInfo(&sdi);
А>      sdi.displayname = MMC_CALLBACK;
А>      sdi.relativeID = param;
А>      hr = spConsoleNameSpace->InsertItem(&sdi);
А>      assert(SUCCEEDED(hr));

А>      m_vDatabases[ctr]->SetHandle(sdi.ID);
А>    }
А>  }
А>  hr = S_OK;
А>  break;
А>}
А>


А>То есть надо это делать не для m_scopeDataItem, а для узла, который нужно показать.

Да, код работает (кроме SetHandle, но, кажется, это неважно).
У меня ситуация такая: в Scope Panel есть нода, у нее нет потомков (в Scope Panel), хотя есть элементы в Result Panel. При MMCN_SHOW в Result Panel я добавляю записи и хотел бы указать что в Scope Panel потомков не будет (убрать (+)).
Re[5]: Как в MMC Snap-in убрать (+)?
От: Андрей Россия  
Дата: 12.11.01 09:30
Оценка:
Здравствуйте Аноним, Вы писали:

А>У меня ситуация такая: в Scope Panel есть нода, у нее нет потомков (в Scope Panel), хотя есть элементы в Result Panel. При MMCN_SHOW в Result Panel я добавляю записи и хотел бы указать что в Scope Panel потомков не будет (убрать (+)).


Ты элементы не в MMCN_SHOW добавляй, а в MMCN_EXPAND — я как раз так и делаю (и в примерах у Microsoft тоже).
Re[6]: Как в MMC Snap-in убрать (+)?
От: Igor Soukhov  
Дата: 12.11.01 09:37
Оценка:
Здравствуйте Андрей, Вы писали:

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


А>>У меня ситуация такая: в Scope Panel есть нода, у нее нет потомков (в Scope Panel), хотя есть элементы в Result Panel. При MMCN_SHOW в Result Panel я добавляю записи и хотел бы указать что в Scope Panel потомков не будет (убрать (+)).


А>Ты элементы не в MMCN_SHOW добавляй, а в MMCN_EXPAND — я как раз так и делаю (и в примерах у Microsoft тоже).

элементы для Result Pane View надо добавлять в MMCN_SHOW
* thriving in a production environment *
Re[7]: Как в MMC Snap-in убрать (+)?
От: Андрей Россия  
Дата: 12.11.01 09:53
Оценка:
Здравствуйте Igor Soukhov, Вы писали:

IS>элементы для Result Pane View надо добавлять в MMCN_SHOW


Согласен, но в данном случае речь идет о Scope Pane View, а не о Result. Проблема ведь не в Result Pane View.
А флаг SDI_CHILDREN надо устанавливать при добавлении элементов в Scope, я об этом хотел сказать. Наверное, неясно выразился.
Re: Как в MMC Snap-in убрать (+)?
От: Spark2K Россия  
Дата: 19.11.01 12:36
Оценка:
Здравствуйте Spark2K, Вы писали:

SK>Как в MMC Snap-in убрать знак плюс(+) в тех нодах у которых нет потомков?

SK>Пробую в конструкторе написать:
SK> m_scopeDataItem.cChildren = 0;
SK> m_scopeDataItem.mask |= SDI_CHILDREN;
SK>но это не дает нужного эффекта.

SK>Подскажите, кто знает.


В итоге я нашел. Для тех кто заинтересуется, вот ответ:
Перед добавлением в Scope Panel с помощью метода InsertItem(&SCOPEDATAITEM), нужно дописать пару строк. Вот они:
sdi.mask |= SDI_CHILDREN;
sdi.cChildren = 0;
В общем-то, это и написано в MSDN.

Re[2]: Как в MMC Snap-in убрать (+)?
От: Андрей Россия  
Дата: 20.11.01 06:33
Оценка:
Здравствуйте Spark2K, Вы писали:

SK>В итоге я нашел. :-

Так я ж неделю назад тебе то-же самое написал ?!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.