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

Очередные сюрпризы Visual C++

01.11.2011, 16:16. Показов 887. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Осваиваю программирование Win32 API и постоянно сталкиваюсь с разными проблемами и непонятными вещами. Работаю в MS VS 2005.
Писал программку использующую Common Controls. То что сначала были конфликты типов данных связанные с уникодом и не линковался comctl32 это еще полбеды.
Когда написал программку использующую статусную строку Statusbar к удивлению обнаружил, что она работает и без инициализации InitCommonControls(); хотя в литературе постоянно напоминается о необходимости инициализации. Но это продолжалось до тех пор, пока я не разместил статическое окно в виде серого прямоугольника. Вот тут компилятор начал ругаться на параметр SS_GRAYRECT, но до тех пор пока я не подключил инициализацию Common Controls. Так что же получается, в одних случаях можно инициализацию не делать, а в других нужно? Как-то непоследовательно.
Еще возникли сложности с размещением на панели меню кнопки в виде картинки.
Код из книги:
HBITMAP hBitmap;
int nDimension;
........
case WM_CREATE:
nDimension=GetSystemMetrics(SM_CYMENU);
hBitmap=LoadImage(hInst, pImage, IMAGE_BITMAP, nDimension*2,nDimension, LR_LOADFROMFILE);
AppendMenu(GetMenu(hWnd),MF_BITMAP,ID_PI CT,hBitmap);
hwndStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE, L"Menu Sample", hWnd, ID_STATUSBAR);


Но реально пришлось сделать:
HBITMAP hBitmap;
int nDimension;
.........
case WM_CREATE:
nDimension=GetSystemMetrics(SM_CYMENU);
hBitmap=(HBITMAP)LoadImage(hInst, pImage, IMAGE_BITMAP, nDimension*2,nDimension, LR_LOADFROMFILE);
AppendMenu(GetMenu(hWnd),MF_BITMAP,ID_PI CT,(LPCWSTR)hBitmap);
hwndStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE, L"Menu Sample", hWnd, ID_STATUSBAR);

Сначала компилятор ругался что в строке hBitmap=LoadImage(hInst, pImage, IMAGE_BITMAP, не может преобразовать HANDLE в HBITMAP. Что тут за прикол? Все точно как в книге, но выдает ошибку.
Потом в строке AppendMenu(GetMenu(hWnd),MF_BITMAP,ID_PI CT,hBitmap); компилятор ругался на 4-й параметр, пришлось добавить приведение типа к LPCWSTR.
После всех этих "нововведений" программка таки заработала.
А как же это раньше работало???? Или это особенности раннего стиля? Надо сказать что примеры в книгах зачастую написаны для 6-й студии, ну в лучшем случае для 2003-й, а то и вообще для Билдера. Они настолько все отличаются?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.11.2011, 16:16
Ответы с готовыми решениями:

Очередные пракозни "мвд" или очередные вкладки браузеров
Как обычно лог во вложении.

Какие "сюрпризы" ожидают HTML/CS/JS-разработчика при переходе на ASP.NET MVC
Всем привет! Имеется большой опыт в HTML/CS/JS Хотел бы выяснить какие есть особенности работы...

Очередные массивы
Создать массив целочисленных значений из 15 элементов. Заполнить его по правилу: значение элемента...

3
60 / 60 / 10
Регистрация: 27.10.2011
Сообщений: 185
01.11.2011, 20:58
Посмотрите как HBITMAP определён.

А на AppendMenu ругается потому, что по дефолту она явлется AppendMenuW (для юникод). Если не хотите делать приведение типов, то можно писать AppendMenuA или попробовать написат #undef UNICODE (в этом не уверен, от студии зависит).
1
2 / 2 / 1
Регистрация: 23.10.2011
Сообщений: 21
01.11.2011, 23:41  [ТС]
Цитата Сообщение от TwiX Посмотреть сообщение
Посмотрите как HBITMAP определён.

А на AppendMenu ругается потому, что по дефолту она явлется AppendMenuW (для юникод). Если не хотите делать приведение типов, то можно писать AppendMenuA или попробовать написат #undef UNICODE (в этом не уверен, от студии зависит).
Спасибо #undef UNICODE больше помогает
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
02.11.2011, 17:33
Не нужно писать #undef UNICODE!
Нужно зайти в настройки проекта и там уже его тип поменять.

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.11.2011, 17:33
Помогаю со студенческими работами здесь

Очередные Проблемы
по завпросу автостекла или автостекло в топе был сайт fyg.ru а тут вдруг пропал ни с того ни с...

Очередные проблемы с setInterval
Здравствуйте. Извините за банальный вопрос. Просто все делаю по инструкции и ничего не получается....

Очередные работы с массивом
Помогите с задачей, ниже приведены исходные данные Дана математическое выражение: {B}_{j} =...

Очередные самоткрывашки в chrome
Спасите помогите!!!! Сами собой вкладки открываться в браузерах. Зарание благодарен!!

очередные Фокусы Яши =(
После пересчета ТИЦ сайт полностью вылетел из выдачи остались только бэки на сайт. тица добавил 75...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru