|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.11.2011, 16:19 | #1 |
Пользователь
Регистрация: 23.10.2011
Сообщений: 18
|
Очередные сюрпризы Visual C++
Осваиваю программирование Win32 API и постоянно сталкиваюсь с разными проблемами и непонятными вещами. Работаю в MS VS 2005.
Писал программку использующую Common Controls. То что сначала были конфликты типов данных связанные с уникодом и не линковался comctl32 это еще полбеды. Когда написал программку использующую статусную строку Statusbar к удивлению обнаружил, что она работает и без инициализации InitCommonControls(); хотя в литературе постоянно напоминается о необходимости инициализации. Но это продолжалось до тех пор, пока я не разместил статическое окно в виде серого прямоугольника. Вот тут компилятор начал ругаться на параметр SS_GRAYRECT, но до тех пор пока я не подключил инициализацию Common Controls. Так что же получается, в одних случаях можно инициализацию не делать, а в других нужно? Как-то непоследовательно. Еще возникли сложности с размещением на панели меню кнопки в виде картинки. Код из книги: HBITMAP hBitmap; int nDimension; ........ case WM_CREATE: nDimension=GetSystemMetrics(SM_CYME NU); hBitmap=LoadImage(hInst, pImage, IMAGE_BITMAP, nDimension*2,nDimension, LR_LOADFROMFILE); AppendMenu(GetMenu(hWnd),MF_BITMAP, ID_PICT,hBitmap); hwndStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE, L"Menu Sample", hWnd, ID_STATUSBAR); Но реально пришлось сделать: HBITMAP hBitmap; int nDimension; ......... case WM_CREATE: nDimension=GetSystemMetrics(SM_CYME NU); hBitmap=(HBITMAP)LoadImage(hInst, pImage, IMAGE_BITMAP, nDimension*2,nDimension, LR_LOADFROMFILE); AppendMenu(GetMenu(hWnd),MF_BITMAP, ID_PICT,(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_PICT,hBitmap); компилятор ругался на 4-й параметр, пришлось добавить приведение типа к LPCWSTR. После всех этих "нововведений" программка таки заработала как нужно. А как же это раньше работало???? Или это особенности раннего стиля? Надо сказать что примеры в книгах зачастую написаны для 6-й студии, ну в лучшем случае для 2003-й, а то и вообще для Билдера. Они настолько все отличаются? |
01.11.2011, 17:12 | #2 |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
Да это нормально
Не забываем, что WinApi был написал на Си, а Си не позволяет перегрузку функций. И чтобы сделать универсальные функции, а не плодить 100500 разных функций, то и приходится приводить один тип к другому типу. А ругаться компилятору положено, вдруг мы ошиблись ? Но мы всегда можем указать компилятору, что операция верная |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Visual C++, Visual C#, Visual basic .Net, или Microsoft.Net Что лучше? | _PROGRAMM_ | Общие вопросы .NET | 14 | 10.10.2012 19:24 |
Среда разработки Visual C (альтернатива Visual Studio) | plyeh | Visual C++ | 5 | 25.06.2010 16:27 |
Проблема с windows visual styles в Visual studio 2008 express. | [awa | Visual C++ | 2 | 09.01.2010 06:05 |
Как перевести проект из Visual C++ 2003 в Visual C++ 2008? | iukash | Visual C++ | 8 | 17.04.2009 22:36 |
Visual c++ 2005 и Visual c++ 6 это разные версии или нет? | Руслантус | Свободное общение | 3 | 30.11.2007 19:42 |