Консультация № 91637
16.06.2007, 15:40
0.00 руб.
0 1 1
помогите пожалуйста дорогие эксперты.
у меня никак не работает галочка в сплывающем меню.. все пересмотрел, MSDN почитал.. но вроде делаю все правильно а оно не работает.
глупость , аж спрашивать стыдно.

смысл такой : ввыпадающем меню изначально стоит галочка. при нажатии на пункт меню галочка убирается. еще раз нажать появляется опять..

вот часть кода меню: (а именно, тот пункт в котором галочка..)
Код:
InsertMenu(hPopupMenu, 1, MF_BYPOSITION | MF_STRING | MF_CHECKED, ID_CONTEXT_MENU1, "&Check");

вот код WM_COMMAND на Id пункта:
Код:
CheckMenu = GetMenuState(hPopupMenu, 1, MF_BYPOSITION);
if (CheckMenu == MF_CHECKED)
{
CheckMenuItem(hPopupMenu, 1, MF_UNCHECKED );
}
else
{
CheckMenuItem(hPopupMenu, 1, MF_CHECKED );
}

Обсуждение

Неизвестный
16.06.2007, 16:00
общий
это ответ
Здравствуйте, Plazzmex!
Ошибка как раз в том, что Вы невнимательно прочитали о возвращаемых значениях функции GetMenuState. она не возвращает конкретное значение, она возвращает маску значений, из которой нужно извлечь состояние нужного флага. Т.е. в Вашем коде ошибка в условии, вот тут:

if (CheckMenu == MF_CHECKED)

нужно применить битовую опирацию OR. Код будет выглядеть так:

if (!(CheckMenu & MF_CHECKED))
    CheckMenuItem(hPopupMenu, 1, MF_CHECKED );
else
    CheckMenuItem(hPopupMenu, 1, MF_UNCHECKED );

В MSDN даже экзампл есть, правда применительно к кастом чекмаркам, но суть та же.

Удачи.
Форма ответа