Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ WinAPI Как Скрыть ComboBox? Приветствую всех... только начал осваивать Win API(C++) Такая задача: Есть 2 ComboBox'a , нужно чтоб ComboBox2 становился видим пользователю, только при выборе какого-либо элемента ComboBox1...И как... ShowWindow с хэндлом комбо и с параметром SW_HIDE https://www.cyberforum.ru/ win-api/ thread109569.html C++ WinAPI Дополнительное окно с черт знает с чем
Ну вообще-то не совсе черт знает с чем. там будет конкретно что-то что нужно мне или не мне. Дело вот в чем. Нужно реализовать код программы, которая используя сторонний файл будет создавать окно,... вот по DLL - полно материалов. в том числе и на это форуме. кнопка поиска зачем по-вашему сделана? Немного повторюсь я искал не просто DLL а как в DLL запихнуть класс и как его потом вынуть....
C++ WinAPI Вывод строки в окно в АPI вот у меня такая проблема мне надо было вывести строки,но я для начала хотел попробывать вывести одну строку,но не получаеться помогите вот код,использую виртуальное создание окна для того что бы... case WM_CREATE: Вызывается только единожды, при создании окна. case WM_PAINT: Вызывается каждый раз когда требуется перерисовать окно или его часть. case IDM_2: Вызывается черт знает когда,... https://www.cyberforum.ru/ win-api/ thread108387.html C++ WinAPI Распознание цвета пиксела https://www.cyberforum.ru/ win-api/ thread109821.html
Какая api функция распознает цвет px на экране? xaknik, GetPixel, если мне память не изменяет.
Закрашивается, но текст не отображается C++ WinAPI
Вот в чем загвоздка есть такой вот код: case WM_PAINT:...
C++ WinAPI Выяснить, является ли текущее окно (приложение) активным Хочу привинтить к программе tray-иконку. Часть логики должна выглядеть следующим образом. Если окно программы активно, то при клике на tray-иконку окно будет минимизировано. Если окно программы... Evg, я бы воспользовался все же идеей с отслеживанием SETFOCUS и KILLFOCUS. Заводим флаг. При получении WM_SETFOCUS, ставим в него 1 при получении WM_KILLFOCUS, проверяем параметр wParam, который... https://www.cyberforum.ru/ win-api/ thread107702.html
Цвет рамки для Up-Down control`a C++ WinAPI
Добрый день, нужно очень срочно - сменить цвет рамки у элемента Up-Down control. Не могу найти как это сделать. При этом этот элемент дочерний.
C++ WinAPI Перерисовать окно, где указывать InvalidateRect? Помогите, не могу понять где нужно указать InvalidateRect(wnd,0,NULL); чтобы перерисовать окно? Дело в том, что нарисовав элемент - если окно отодвинуть за границу экрана а потом обратно - то то что... Всё правильно он у тебя показывает. При перемещении стандартная функция сама вызывает перерисовку окна, а конкретнее WM_PAINT. А у тебя прямоугольник рисуется только при щелчке мышью поставь... https://www.cyberforum.ru/ win-api/ thread108551.html
C++ WinAPI Работа с INI файлами Кто может показать рабочий пример работы с ini файлом(тоесть открыть, считать, изменить и закрыть) вот что в инике: znachenie=1 znachenie2=1 Добавлено через 12 часов 56 минут Блин 7 форум и... А чем собственно ini выделяется среди всех остальных файлов? fopen в руки и вперед.все что я нахожу части кода.Этого более чем достаточно. Сначала ручками создайте ini файл, затем попытайтесь... https://www.cyberforum.ru/ win-api/ thread109973.html C++ WinAPI Синхронизация потоков https://www.cyberforum.ru/ win-api/ thread109263.html
Здравствуйте, уважаемые форумчане! Нужно мне написать прогу на синхронизацию. Задача такая: есть поток, пишущий в канал по-байтно (вернее по целому числу), и три потока, читающие из канала. Читатели... Я бы сделал еще одно событие, которое означало бы что все читатели сработали и можно переходить к новой итерации, типа: DWORD WINAPI HostFunc(void* i) { while(temp != N) {...
C++ WinAPI Портится кодировка при выводе массива в файл Подскажите, нужно массив вывести в файл, но только так чтобы можно было его потом прочитать человеку. Строка сохраняется в файле без проблем, всё читабельно: char a1="1234567"; ... delias, я бы начал с замены функций itoa и strcat на симпатичный вариант sprintf. Если размер массива известен заранее - забиваем сразу нужное число %d. Если нет - примерно так: char *... https://www.cyberforum.ru/ win-api/ thread110204.html C++ WinAPI Подскажите пожалуйста книгу по WinApi https://www.cyberforum.ru/ win-api/ thread109565.html
Люди может кто знает хорошый самоучитель по WinApi для начинающих! хотяб название и автора!:) +1, лучше Рихтера вряд ли что можно найти. Гениальная книга. Добавлю ещё (как вариант) книги Юрия Щупака - "Win32API. Эффективная разработка приложений" и Румянцева - "Программирование WinAPI 32"....
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
03.04.2010, 23:01 0

Визуальный вид меню, и что такое меню? - C++ WinAPI - Ответ 639527

03.04.2010, 23:01. Показов 6400. Ответов 12
Метки (Все метки)

Ответ

Вот статейка по этому поводу
До сих пор наши меню состояли только из текстовых строк и разделительных линий, однако вы можете сделать меню из произвольных графических изображений. Если вам не нравится стандартная отметка строк меню при помощи галочки, ее можно заменить на любое графическое изображение (небольшого размера).
Для того чтобы вместо строк в меню расположить графические изображения bitmap, эти изображения надо загрузить из ресурсов или создать другим способом, а затем идентификатор изображения указать в качестве последнего параметра функций AppendMenu или InsertMenu. Необходимо также использовать флаг MF_BITMAP :

AppendMenu(hmenuLineStyle, MF_ENABLED | MF_BITMAP,
CM_LINE1, (LPCSTR)(DWORD)hbmpLine1);

Если вы загрузили bitmap при помощи функции LoadBitmap, не забудьте перед завершением приложения (или после удаления соответствующего меню) удалить bitmap функцией DeleteObject.
Для замены стандартного символа отметки строки меню (галочки) на другой предназначена функция SetMenuItemBitmaps:

BOOL WINAPI SetMenuItemBitmaps(HMENU hmenu, UINT idItem,
UINT fuFlags, HBITMAP hbmUnckecked, HBITMAP hbmChecked);

Эта функция выполняет замену символа отметки для строки idItem меню hmenu.
Для параметра fuFlags можно использовать два значения - MF_BYCOMMAND и MF_BYPOSITION . Если указан флаг MF_BYCOMMAND, параметр idItem определяет идентификатор элемента меню, для которого выполняется замена символа отметки. Если указан флаг MF_BYPOSITION, параметр idItem определяет порядковый номер элемента меню.
Параметр hbmUnckecked представляет собой идентификатор изображения, которое будет расположено слева от неотмеченной строки меню, параметр hbmChecked - идентификатор изображения символа отметки.

Любой из последних параметров или оба можно указывать как NULL. В этом случае будет использовано изображение по умолчанию (т. е. слева от неотмеченной строки не будет никакого изображения, слева от отмеченной - галочка).
Однако есть небольшая тонкость. Вы не можете использовать для отметки строк меню изображения bitmap любого размера. Нужные размеры изображения необходимо определить при помощи функции GetMenuCheckMarkDimensions :

DWORD WINAPI GetMenuCheckMarkDimensions(void);

Младшее слово возвращаемого значения содержит ширину изображения, старшее - высоту:

DWORD dwMark;
WORD wWidth, wHeight;
dwMark = GetMenuCheckMarkDimensions();
wWidth = LOWORD(dwMark);
wHeight = HIWORD(dwMark);

Тонкость заключается в том, что на момент трансляции исходного текста приложения вы не можете знать требуемые размеры изображения. Так как на этапе сборки загрузочного модуля приложения размеры изображения неизвестны, вы (строго говоря) не можете просто загрузить соответствующие изображения bitmap из ресурсов приложения.
Выход заключается в том, чтобы в процессе инициализации приложения определить требуемые размеры изображения, вызвав функцию GetMenuCheckMarkDimensions, а затем подготовить нужные изображения bitmap в памяти. Однако, так как мы еще не рассказывали вам подробно об изображениях bitmap, в примере GMENU, приведенном в следующем разделе, мы для простоты (данная глава посвящена меню, а не изображениям bitmap) все-таки загрузили изображения размером 10 х 10 пикселов из ресурсов.

При создании строки меню вы можете указать константу MF_OWNERDRAW. В этом случае функция окна, работающая с данным меню, должна будет сама нарисовать строку меню. Можно нарисовать любое изображение.
Перед тем как отобразить меню, содержащее строки со стилем MF_OWNERDRAW , операционная система Windows посылает в функцию окна сообщение WM_MEASUREITEM . В ответ на это сообщение функция должна сообщить Windows размеры окна, необходимые для изображения строки меню.
Когда надо отобразить строку меню, Windows посылает в родительское окно сообщение WM_DRAWITEM . Вместе с этим сообщением передается вся информация, необходимая родительскому окну для того чтобы нарисовать строку меню.

Параметр lParam сообщения WM_MEASUREITEM содержит указатель на структуру MEASUREITEMSTRUCT , описанную в файле windows.h:

typedef struct tagMEASUREITEMSTRUCT
{
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemWidth;
UINT itemHeight;
DWORD itemData;
} MEASUREITEMSTRUCT;

В этом же файле описаны ближний и дальний указатели на эту структуру:

typedef MEASUREITEMSTRUCT NEAR* PMEASUREITEMSTRUCT;
typedef MEASUREITEMSTRUCT FAR* LPMEASUREITEMSTRUCT;

Когда функция окна получает сообщение WM_MEASUREITEM, поле CtlType содержит значение ODT_MENU, в поле itemID находится идентификатор строки меню, а в поле itemData - 32-разрядное значение, переданное через параметр lpNewItem функций AppendMenu, InsetMenu, ModifyMenu. Поле CtlID не используется.
Получив сообщение WM_MEASUREITEM, функция окна должна, пользуясь значением указателя из lParam, записать в поле itemWidth ширину строки меню, а в поле itemHeight - высоту строки меню.

Параметр lParam сообщения WM_DRAWITEM содержит указатель на структуру DRAWITEMSTRUCT . Эта структура и соответствующие указатели описаны в файле windows.h следующим образом:

typedef struct tagDRAWITEMSTRUCT
{
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
DWORD itemData;
} DRAWITEMSTRUCT;
typedef DRAWITEMSTRUCT NEAR* PDRAWITEMSTRUCT;
typedef DRAWITEMSTRUCT FAR* LPDRAWITEMSTRUCT;

Приведем назначение отдельных полей структуры DRAWITEMSTRUCT при ее использовании для меню.

Имя поля Описание
CtlType Тип органа управления. Для меню принимает значение ODT_MENU
CtlID Идентификатор органа управления. Для меню не используется
itemID Идентификатор строки меню
itemAction Действия, которые необходимо выполнить при изображении строки меню. Определен в виде отдельных битовых флагов:
ODA_DRAWENTIRE - требуется перерисовать всю строку;
ODA_FOCUS этот бит устанавливается в 1, если строка меню получила или потеряла фокус ввода, новое состояние строки можно узнать, проанализировав содержимое поля itemState;
ODA_SELECT изменилось состояние строки меню, для уточнения состояния необходимо использовать поле itemState
itemState Вид, в котором необходимо изобразить строку меню. Определен в виде отдельных битовых флагов:
ODS_CHECKED выбрана строка меню;
ODS_DISABLED - строка неактивна;
ODS_FOCUS строка получила фокус ввода;
ODS_GRAYED строка меню должна быть изображена серым цветом;
ODS_SELECTED - строка выбрана
hwndItem Идентификатор меню
hDC Контекст устройства, который необходимо использовать для рисования строки меню
rcItem Прямоугольные границы, внутри которых необходимо нарисовать строку
itemData Содержит 32-битовое значение, полученное через параметр lpNewItem функций AppendMenu, InsetMenu, ModifyMenu


Смысл в том, что программа сама должна прорисовывать меню.
Тогда получится то, что я выложил в качестве примера.
А ещё есть DLLка coolmenu.dll, облегчающая создание своего стиля меню

Вернуться к обсуждению:
Визуальный вид меню, и что такое меню? C++ WinAPI
Вложения
Тип файла: zip coolmenu.zip (84.5 Кб, 79 просмотров)
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2010, 23:01
Готовые ответы и решения:

Нужный исходник меню..или силка на сайт где есть такое меню!!?
Кто подбросит силку на сайт где есть меню которое выезжает сверху в низ, или еще лучше сам исходник такого меню!!??

Как сверстать меню такое меню?
Здравствуйте. Подскажите пожалуйста, как сверстать меню, как на этом сайте: http://demo.athemes.com/sydney/ Заранее спасибо.

Вехнее меню сайта-не пойму что такое:)
Всем привет и спасибо за помощь! Решил заморочиться и попробовать создать верхнее меню для сайта. Вроде все легко, но один момент не...

12
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2010, 23:01
Помогаю со студенческими работами здесь

MenuStrip. Как сделать что бы после клика по пункту меню, меню не закрывалось
Здравствуйте. В MenuStrip необходимо несколько items отметить checked, то есть поставить галочки на нескольких пунктах меню. Но после...

Работа с меню. При клике на кнопке меню или вне его, меню должно закрываться
Добрый вечер! Изучаю JQuery. Вот ради развития решил написать меню, практически такое же как на Хабре. Два дня ломаю голову над тем, как...

Как добавить выплывающее меню к уже готовому горизонтальному меню (не меняя дизайн горизонтального меню)?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html...

Раскрывающееся меню - при открытии/закрытии вложенного меню закрывается все меню
Проблема во вложенном меню. При открытии/закрытии вложенного меню закрывается все меню. Надо, чтобы главное меню не реагировало на клики во...

Добавить меню к итему меню, который уже находится в главном меню
Как можно программно добавить подменю к итему меню, который находится в главном меню? Чтобы выглядело это как-то наподобие того, что на...

0
Новые блоги и статьи
Разработка кроссплатформен­­­­ного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
Выполнение кода в игровом цикле Unity с использованием не-MonoBehaviour классов C#
bytestream 02.03.2025
Обычный подход к разработке игр на Unity тесно связан с использованием MonoBehaviour - базового класса для скриптов, обеспечивающего доступ к игровому циклу через события Update, FixedUpdate и. . .
Управление инстанцирование­м вложенных классов в C#
bytestream 02.03.2025
Вложенные классы в C# - мощное средство для создания тесно связанных типов данных и логики. Такие классы определяются внутри других классов и обеспечивают высокий уровень инкапсуляции, позволяя. . .
Как использовать Batch Transform и Batch Gizmo Drawing API в Unity
bytestream 02.03.2025
В мире разработки игр производительность часто становится краеугольным камнем, особенно когда речь заходит о проектах с большим количеством объектов и сложной визуализацией. Unity предоставляет. . .
Эффективный реверс строк в C#
Wired 01.03.2025
Реверс строки, казалось бы простая операция, на практике может стать испытанием для производительности приложения, особенно когда речь идет о больших объемах данных или критически важных участках. . .
Перегрузка булевых операторов в C#
Wired 01.03.2025
В программировании редко встречаются задачи, требующие перегрузки булевых операторов. Обычно достаточно стандартной реализации для типа bool или использования nullable-типов. Однако существуют. . .
Способы определения момента возникновения события в коде C# Unity
Wired 01.03.2025
Отслеживание событий - важный элемент разработки игр на Unity, позволяющий создавать отзывчивые и интерактивные приложения. Однако стандартные средства Unity не всегда предоставляют оптимальные. . .
Unit-тестирование в Unity
Wired 01.03.2025
Многие разработчики игр считают, что написание тестов отнимает слишком много времени и ресурсов, особенно учитывая частые изменения геймплейной логики и механик. Однако это заблуждение приводит к. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru