С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 6

winapi Активация окна

22.10.2013, 23:46. Показов 2058. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!Прошу помочь в следующем:
Обеспечить обработку при которой после активации команды “Файл -> Создать” будет становиться доступной команда “Выделить” в меню “Правка”
то что у меня:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
BOOL SetMenuItem(HMENU hMenu,UINT uins,UINT fState,BOOL flag)
{
    MENUITEMINFO mii;
    mii.cbSize=sizeof(MENUITEMINFO);
    mii.fMask=MIIM_STATE|MIIM_ID;
    mii.fState=fState;
    mii.wID=uins;
    return SetMenuItemInfo(hMenu,uins,flag,&mii);
}
 
 
 case WM_COMMAND:
      switch (LOWORD(wParam))
      {
      case ID_40038:
        SetMenuItem(hMenu,ID_SELECT,MFS_GRAYED,FALSE);
        MessageBox(hWnd,TEXT("Создание файла"),TEXT("Create"),MB_OK);
         break;


пробывала и через Enabled - эффекта нет(
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.10.2013, 23:46
Ответы с готовыми решениями:

Создание окна WinAPI
Доброго времени суток, помогите пожалуйста) Пишу на WinAPI не давно, поэтому еще не все понимаю. Нужно создать совсем примитивный...

Диалоговые окна на WinAPI
Не могу создать диалоговое окно. Пример из книги ганеева не компилируется. Если несложно скиньте примерчик.

WinAPI и стили окна
Всем привет! В общем, раньше работал только в консоли. Учился. Теперь вот решил, что пора бы уже заняться написанием программ,...

1
Исследователь
 Аватар для GrayWolf
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
23.10.2013, 04:29
Во-первых, вы можете использовать функцию EnableMenuItem, этого будет достаточно. Но, на мой взгляд, более корректным будет использование сообщения WM_INITMENUPOPUP, которое приходит перед показом всплывающего меню. Здесь вы можете определить на каком элементе интерфейса стоит курсор и, если это текстовое поле, например, то активируется пункт меню "Выделить" (или "Копировать", "Вырезать" и т.д.), в противном случае эти пункты меню остаются неактивными. Пример использования под спойлером. В коде мы получаем класс элемента, на котором установлен фокус и, если совпадает с Edit, то перебираем все пункты меню "Правка", отбираем и активизируем нужные.

Кликните здесь для просмотра всего текста
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
void
CMainForm::OnInitMenuPopup(HWND hWnd, HMENU hMenu, UINT uItemID, BOOL bSystemMenu)
{
    DWORD dwFlags;
    BOOL bIsEditFocused;
    
    TCHAR buff[MAXCHAR];
    HWND hwndFocus = GetFocus();
    GetClassName(hwndFocus, buff, sizeof(buff));
    _tcsicmp(buff, WC_EDIT) == 0 ? bIsEditFocused = TRUE : bIsEditFocused = FALSE;
    
    for(int nPos = 0; nPos < GetMenuItemCount(hMenu); nPos++)
    {
        UINT uID = GetMenuItemID(hMenu, nPos);
        
        switch(uID)
        {
            case IDM_EDITMENU_COPY:
                DWORD dwStart, dwEnd;
                dwStart = dwEnd = 0;
                SendMessage(hwndFocus, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
                bIsEditFocused == TRUE && (dwStart - dwEnd) != 0 ? dwFlags = MF_BYCOMMAND|MF_ENABLED : dwFlags = MF_BYCOMMAND|MF_GRAYED;
                EnableMenuItem(hMainMenu, uID, dwFlags);
                break;
            case IDM_EDITMENU_SELECTALL:
                bIsEditFocused ? dwFlags = MF_BYCOMMAND|MF_ENABLED : dwFlags = MF_BYCOMMAND|MF_GRAYED;
                EnableMenuItem(hMainMenu, uID, dwFlags);
                break;
        } // switch(uID)
    } // for(int nPos = 0; nPos < GetMenuItemCount(hMenu); nPos++)
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2013, 04:29
Помогаю со студенческими работами здесь

Winapi разделение окна
Нужно отловить событие разделение окна, когда перетаскиваешь его мышью за заголовок, в левую или правую сторону монитора. Точно не знаю, но...

WinAPI дочерные окна
Непойму почему дочерные окна не создаются #include &quot;stdafx.h&quot; #include &quot;GreyKOprogramm.h&quot; #define MAX_LOADSTRING 100 ...

Примитив. Создание окна на WinApi
Доброго вечера, форумчане! Специализируюсь на PHP, решил научиться делать программы в окнах :) Поюзал гугл, много информации, но беда в...

Не работает обновление окна в С++ WinAPI
Есть одна программа, которая упорно не желает обновлять окно WM_PAINT. Вот сурс, я уже куда только не тыкал UpdateWindow() и...

Полная перерисовка окна на WinApi
Проблема Создаю окно с кнопками, собственно после нажатия на кнопку необходимо полностью очистить окно от старых кнопок и сделать новые,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru