Synapsehome Опубликовано 17 апреля, 2012 Поделиться Опубликовано 17 апреля, 2012 Для Windows XP для включения визуальных стилей достаточно было положить манифест в папку с приложением, на Win7 как я понял это не катит. Через ресурсы у меня не работает, хотя дело скорее в кривости рук. Пока набросал только рисование через GDI, докатываю memory manager, хочется использовать контролы текущей операционки, а не Winapi-шные.ps. это фича такая на форуме делать в теме первую букву каждого слова заглавной? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 17 апреля, 2012 Поделиться Опубликовано 17 апреля, 2012 На чем пишешь? Вообще, в ресурсы запихивается манифест под типом 24 (RC_DATA), название ресурса должно быть "1" (без кавычек). И при запуске приложения (в самом начале функции WinMain, если манифест в ресурсах, обязательно нужно вызывать функцию InitCommonControls. Впрочем, для использования контролов текущей операционки, по сути, сам манифест не нужен. Он нужен только для поддержки визуальных тем операционки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Synapsehome Опубликовано 17 апреля, 2012 Автор Поделиться Опубликовано 17 апреля, 2012 На чем пишешь? Вообще, в ресурсы запихивается манифест под типом 24 (RC_DATA), название ресурса должно быть "1" (без кавычек). И при запуске приложения (в самом начале функции WinMain, если манифест в ресурсах, обязательно нужно вызывать функцию InitCommonControls. Впрочем, для использования контролов текущей операционки, по сути, сам манифест не нужен. Он нужен только для поддержки визуальных тем операционки.Спасибо за ответ, пишу на unmanaged c++. Да, я имел ввиду визуальное оформление операционки.<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0"><assemblyIdentity name="XPManifest" processorArchitecture="x86" version="1.0.0.0" type="win32"/><description>Windows Shell</description><dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly></dependency></assembly>1 24 "resources\\manfiest\\manifest.xml"int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE h2, LPSTR cmd, int cmShow){INITCOMMONCONTROLSEX icex;icex.dwSize = sizeof(INITCOMMONCONTROLSEX);icex.dwICC = ICC_WIN95_CLASSES|ICC_COOL_CLASSES|ICC_BAR_CLASSES|ICC_USEREX_CLASSES|ICC_STANDARD_CLASSES;InitCommonControlsEx(&icex);Не спасает UPDчуть поколдовал уиии :3pss. И ещё одна проблемка:LRESULT lResult = SendMessageA(hwnd, WM_SETICON, ICON_SMALL, IDI_ICON1);Значок CoD4. Студия мне ставит какой-то замок: Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 17 апреля, 2012 Поделиться Опубликовано 17 апреля, 2012 Сначала нужно загрузить значок из ресурсов. Если у тебя IDI_ICON1 - это имя иконки, тогда воспользуйся макросом MAKINTRESOURCE(IDI_ICON1). А вообще, Насколько я помню, для WM_SETICON передается хэндл иконки. То есть, сначала надо сделатьhIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1))и только потом этот полученный хендл передавать в посыле сообщения WM_SETICON. Точно не помню, так ли это, проверять сейчас времени нет.ЗЫ. Для "визуалок" необязательно использовать расширенную функцию. Достаточно простой InitCommonControls. Система сама заполнит структуру и перенаправит вызов на расширенную процедуру.ЗЗЫ. Еще один маленький фокус - если в ресурсы иконку запихиваешь какMAINICON ICON "c:\path\to\icon.ico"то система автоматом присвоит ее маленьку копию окну, ибо посчитает ее основной иконкой приложения. И да, такое срабатывает, вроде как, не всегда, а только для диалоговых окон. Впрочем, я не уверен, для диалогового или для обычного окна такое срабатывает ))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Synapsehome Опубликовано 17 апреля, 2012 Автор Поделиться Опубликовано 17 апреля, 2012 Xipho спасбио за советы! Но дело в том что я пробовал так, всёравно что-то не то HICON hi=NULL;//глобальная переменная После регистрации класса окна:hi=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));case WM_INITDIALOG: SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hi); break; Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 17 апреля, 2012 Поделиться Опубликовано 17 апреля, 2012 После регистрации класса окна:Так ты используешь не диалог, а обычное окно, я так понимаю? Если да, тогда при регистрации класса указывай в его структуре иконку. Это раз. И, если используется окно, а не диалог - обрабатывать нужно не WM_INITDIALOG, а WM_CREATE. Впрочем, при использовании обычного окна это не понадобится, ибо иконка, как я уже писал, указывается в определенных полях структуры создаваемого класса.typedef struct tagWNDCLASSEX { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm;} WNDCLASSEX, *PWNDCLASSEX;Как видно, иконку нужно прописать в двух полях - hIcon, и hIconSm. Загрузить ее можно, как я уже показывал выше. Или же есть еще способ (несколько изуверский, но, тем не менее)hIcon1 = (HICON) LoadImage( hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE);Это для маленькой иконки, а для большой - соответственно, размеры будут больше.ЗЫ. Естественно, hInstance - это должна быть глобальная переменная, в которую, по идее, система сама хэндл процесса записывает, но я предпочитаю перестраховаться, вызвав в самом начале функциюhInstance = GetModuleHandle(0); Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 18 апреля, 2012 Поделиться Опубликовано 18 апреля, 2012 >> Значок CoD4. Студия мне ставит какой-то замок:Synapsehome, если бы ты привёл свой исходный код,то тебе сразу ответили, что именно ты делаешь неправильно Ссылка на комментарий Поделиться на другие сайты Поделиться
Synapsehome Опубликовано 18 апреля, 2012 Автор Поделиться Опубликовано 18 апреля, 2012 Блин, я забыл про hIconSm ; D#define IDI_ICON1 103wc.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));всёравно не хочет стаить мне значок, через LoadImage тоже Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 18 апреля, 2012 Поделиться Опубликовано 18 апреля, 2012 Значит, ты что-то не так делаешь. Других вариантов у меня не осталось. Ссылка на комментарий Поделиться на другие сайты Поделиться
Synapsehome Опубликовано 18 апреля, 2012 Автор Поделиться Опубликовано 18 апреля, 2012 ps.Похоже был косяк студии. Скопировал код в новый созданный проект, всё заработало. Всём спасибо Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 18 апреля, 2012 Поделиться Опубликовано 18 апреля, 2012 Вопрос решен. ТЗ. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения