MFC RIbbon — несколько CMFCRibbonComboBox на одной панели, ответ на действие selectitem, выполняемое на любом onComboBox

У меня есть 2 CMFCRibbonComboBox на одной панели в ленте, например:

CMFCRibbonComboBox *individualComputers = 
   new CMFCRibbonComboBox(-1,FALSE, 100, "Individual Computers", -1);

individualComputers->AddItem("Computer 1");
individualComputers->AddItem("Computer 2");
individualComputers->AddItem("Computer 3");
individualComputers->SelectItem(0); 

CMFCRibbonComboBox * groupNames = 
   new CMFCRibbonComboBox (-1, FALSE, 100, "Computer Group Names", -1);

groupNames->AddItem("GROUP 1");
groupNames->AddItem("GROUP 2");
groupNames->AddItem("GROUP 3");
groupNames->SelectItem(0);

CMFCRibbonPanel* pComputerGroups =  cComputerGroups->AddPanel("All Groups"); 
//cComputerGroups is a Category

pComputerGroups->Add(individualComputers);
pComputerGroups->Add(groupNames);

Проблема в том, что когда я выбираю «Группу 1» в выпадающем списке groupNames из пользовательского интерфейса (интерфейс пользователя), то выбирается даже «Компьютер 1» из группы IndividualComputers. Как сделать каждую группу со списком независимой от другой? Спасибо.


person Eternal Learner    schedule 18.04.2012    source источник


Ответы (1)


Я подозреваю, что вы не хотели добавлять свое поле со списком к себе individualComputers->Add(individualComputers);, возможно, должно быть pComputerGroups->Add(individualComputers);

В противном случае ваша ошибка, вероятно, находится где-то еще в вашей команде, или код обработки updateUI не показан. Скорее всего, вы используете один и тот же идентификатор -1 для идентификации обоих полей со списком.

Кроме того, для CMFCRibbonComboBox нет перегруженного конструктора, который принимает два дополнительных параметра, как вы показали для groupNames.

В будущем, пожалуйста, покажите фактический код, который следует за SSCCE.

Редактировать. Выделил ранее неотвеченный комментарий полужирным шрифтом, так как он, скорее всего, останется вашей проблемой. Рассмотрите возможность использования const UINT CB_COMP_ID = 1; и const UINT CB_GROUP_ID = 2;, тогда вы можете ссылаться на каждое поле со списком отдельно, используя CB_COMP_ID или CB_GROUP_ID в карте сообщений и т. д.

person AJG85    schedule 18.04.2012
comment
Внес предложенные изменения. В дальнейшем постараемся придерживаться SSCCE. - person Eternal Learner; 19.04.2012