Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 2
Регистрация: 05.11.2014
Сообщений: 62
1

Работа с меню и с сохранением последней выбранной конфигурации

13.02.2015, 11:58. Показов 1454. Ответов 29
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Народ всем привет,

Хочу сделать как в Виндовс калькуляторе, чтобы можно было бы выбрать режим работы в меню, например, LITE и PRO, затем он бы выделялся галочкой. Затем после отключения программы и при ее повторном включении активировался бы последней выбранный режим и также подсвечивался галочкой.

Пользуюсь VS 2008

Подскажите, пожалуйста, как реализовать задуманное?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2015, 11:58
Ответы с готовыми решениями:

Совет по выбранной конфигурации
Друзья, подскажите, какие за и против следующей конфы: Блок питания ATX 480 Вт Gigabyte...

Обновление конфигурации с сохранением доработок
Приветствую. Подскажите мне решение. Есть типовая конфа УПП. Там мы делаем доработки, допиливаем и...

Прошу Вашего совета по выбранной конфигурации в hard.rozetka.com.ua
Всем привет.! Вот решил себе поменять системник и нужна ваша помощь и критика в моем выборе: ...

УПП 1.3. Включение поддержки на измененной конфигурации с сохранением изменений
Здравствуйте! Имеется 1с8.3 конфигурация УПП 1.3. Включаю возможность редактирования в...

29
2 / 2 / 2
Регистрация: 05.11.2014
Сообщений: 62
15.02.2015, 18:10  [ТС] 21
Author24 — интернет-сервис помощи студентам
Уважаемый,Enno, я всего лишь просил пример для ускорения процесса разработки. Если нету, то так и скажите. Я же не отправляю Вас читать визуал с++ — создание приложений win 32 — добавление объектов в диалоговое окно.
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
15.02.2015, 19:35 22
в HKCU ветку не должен UAC ничего требовать
0
2 / 2 / 2
Регистрация: 05.11.2014
Сообщений: 62
15.02.2015, 19:54  [ТС] 23
demmax2004, спасибо большое. Это хорошая идея использовать HKEY_CURRENT_USER c настройками уже открытого профиля. Завтра попробую отпишусь!
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
16.02.2015, 02:58 24
Цитата Сообщение от tolstiybh Посмотреть сообщение
Уважаемый,Enno, я всего лишь просил пример для ускорения процесса разработки.
Там не какой-то програмистский трюк, банальный вызов функции.
Цитата Сообщение от tolstiybh Посмотреть сообщение
Я же не отправляю Вас читать визуал с++ — создание приложений win 32 — добавление объектов в диалоговое окно.
Потому что я не задавал подобных вопросов.
0
2 / 2 / 2
Регистрация: 05.11.2014
Сообщений: 62
16.02.2015, 08:40  [ТС] 25
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Цитата Сообщение от Enno Посмотреть сообщение
Тогда я не понимаю о каких обработчиках ты говоришь, потому что в исходном коде нет никаких обработчиков кроме тех что описал ты. Если ты говоришь о каком-то виде "обработчика который не использовал", значит ты какой-то шаблон переделываешь.
Enno, Задавали

Добавлено через 15 минут
В общем UPDATE_COMMAND_UI не работал, потому что данная функция не работает для приложений на базе диалоговых окон, поскольку CDialog не имеет OnInitMenuPopup обработчика и использует обработчик по умолчанию CWnd, который не вызывает обработчики пользовательского интерфейса команды обновления для пунктов меню.

После добавления функции OnInitMenuPopup из CFrameWnd::OnInitMenuPopup в WinFrm.cpp - ВСЕ ЗАРАБОТАЛО:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
    //}}AFX_MSG_MAP
 
    ON_WM_INITMENUPOPUP()
END_MESSAGE_MAP()
 
void testDlg::OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex,BOOL bSysMenu)
{
    ASSERT(pPopupMenu != NULL);
    // Check the enabled state of various menu items.
 
    CCmdUI state;
    state.m_pMenu = pPopupMenu;
    ASSERT(state.m_pOther == NULL);
    ASSERT(state.m_pParentMenu == NULL);
 
    // Determine if menu is popup in top-level menu and set m_pOther to
    // it if so (m_pParentMenu == NULL indicates that it is secondary popup).
    HMENU hParentMenu;
    if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu)
        state.m_pParentMenu = pPopupMenu;    // Parent == child for tracking popup.
    else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL)
    {
        CWnd* pParent = this;
           // Child windows don't have menus--need to go to the top!
        if (pParent != NULL &&
           (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL)
        {
           int nIndexMax = ::GetMenuItemCount(hParentMenu);
           for (int nIndex = 0; nIndex < nIndexMax; nIndex++)
           {
            if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu)
            {
                // When popup is found, m_pParentMenu is containing menu.
                state.m_pParentMenu = CMenu::FromHandle(hParentMenu);
                break;
            }
           }
        }
    }
 
    state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
    for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
      state.m_nIndex++)
    {
        state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
        if (state.m_nID == 0)
           continue; // Menu separator or invalid cmd - ignore it.
 
        ASSERT(state.m_pOther == NULL);
        ASSERT(state.m_pMenu != NULL);
        if (state.m_nID == (UINT)-1)
        {
           // Possibly a popup menu, route to first item of that popup.
           state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
           if (state.m_pSubMenu == NULL ||
            (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
            state.m_nID == (UINT)-1)
           {
            continue;       // First item of popup can't be routed to.
           }
           state.DoUpdate(this, TRUE);   // Popups are never auto disabled.
        }
        else
        {
           // Normal menu item.
           // Auto enable/disable if frame window has m_bAutoMenuEnable
           // set and command is _not_ a system command.
           state.m_pSubMenu = NULL;
           state.DoUpdate(this, FALSE);
        }
 
        // Adjust for menu deletions and additions.
        UINT nCount = pPopupMenu->GetMenuItemCount();
        if (nCount < state.m_nIndexMax)
        {
           state.m_nIndex -= (state.m_nIndexMax - nCount);
           while (state.m_nIndex < nCount &&
            pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID)
           {
            state.m_nIndex++;
           }
        }
        state.m_nIndexMax = nCount;
    }
}
Всем спасибо за участие!

По результатам работы с реестром, как закончу отпишусь!
1
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
16.02.2015, 15:08 26
Цитата Сообщение от tolstiybh Посмотреть сообщение
Enno, Задавали
Это был не вопрос, а констатация факта.
OnInitMenuPopup
Вот тебе метод MFC-класса. Походу ты промахнулся и всё-таки выбрал приложение MFC.
0
2 / 2 / 2
Регистрация: 05.11.2014
Сообщений: 62
16.02.2015, 15:43  [ТС] 27
Нет, Enno, Вы ошибаетесь.
1) Это было изложение факта с Вашей стороны требующее уточнее и и пояснение, о котором Вы не знали.
2) Прочитайте, пожалуйста, внимательно мой ответ!!! Приложение на базе диалоговых окон имеется ввиду приложение win 32. Если это было бы MFC - приложение, то мне не пришлось вручную прописывать OnInitMenuPopup, а вообще по этому поводу я рекомендую почитать Visual C++ 2010. Полный курс - Айвор Хортон. Полезно!
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
17.02.2015, 05:11 28
Ты используешь классы MFC, такие как CMenu и CCmdUI. Если твоё написание приложения не начинается с определения WinMain и функций окон, то это вряд ли чистый, как ты утверждаешь, WinAPI.
0
2 / 2 / 2
Регистрация: 05.11.2014
Сообщений: 62
17.02.2015, 08:45  [ТС] 29
Enno, Давайте не будем спорить. Проблема решена и это главное! Останемся друзьями-форумчанинами

С реестром пока еще не начал работать, нагрузили слегка. Но обязательно, как будет результат, отпишусь
0
2 / 2 / 2
Регистрация: 05.11.2014
Сообщений: 62
18.02.2015, 14:39  [ТС] 30
Вопрос по поводу работы с реестром:
Пробую установить значение, но почему-то в regedit этого значения нету, хотя каталог создает правильно
C++
1
2
3
CRegKey key;
key.SetValue("HKEY_CURRENT_USER\\TEST\\Settings", "mode", 2); 
key.Close();
В чем может быть проблема?

Добавлено через 27 минут
все разобрался. Надо было:
C++
1
key.SetValue(HKEY_CURRENT_USER,"TESTE\\Settings", "1", "mode");
0
18.02.2015, 14:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2015, 14:39
Помогаю со студенческими работами здесь

Ручное создание образа последней удачно конфигурации
Реально ли?

Не загружается компьютер. Никакая из двух Виндоуз не грузятся, ни в каких режимах (безопасный, загрузка последней удачной конфигурации, и проч.)
Перестал загружаться компьютер. Включается, доходит до выбора операционной системы (у меня...

Меню с сохранением состояния отображения
Как сделать так что бы была например кнопка: &quot;Показать меню&quot;, при нажатии на которую меню после...

Запуск кода на любой выбранной базе из меню клиента...
Всем привет! :( Возник вопрос, возможно кто-нить сталкивался с вариантами реализации, и сможет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru