Вопрос № 45546: Доброе время суток, эксперты. Помогите разобраться. 1) Я пытаюсь заниматься 3-x мерной графикой и пытаюсь разобраться в каждом нюансе в winapi. Расскажите плиз как понимать этот параметр windowclass.hInstance (wndclass) - стоит его трогать, какое ему...Вопрос № 45548: Привет всем. Заметил такую вешь. 1)Если использвать расширенный класс, wndclassex, то в нём есть раширенный параметр hIconSm. Если я заполняю его и ещё заполняю
параметр hIcon, то у последнего нету никакого проявления. По описанию я понял что hIconSm...
Вопрос № 45.546
Доброе время суток, эксперты. Помогите разобраться. 1) Я пытаюсь заниматься 3-x мерной графикой и пытаюсь разобраться в каждом нюансе в winapi. Расскажите плиз как понимать этот параметр windowclass.hInstance (wndclass) - стоит его трогать, какое ему значние стоит присваивать или его надо оставлять пустым, т.е. присваивать ноль? Какой его вообще смысл и может ли он повлиять на работу приложения? Работаю в Delphi.
2)И вот ещё что. hbrBackground:=COLOR_MENU. По названию можно понять что это цвет фона, я пытался поставить стандартный значения, но этот параметр никак себя не проявляет, может его надо по другому использовать. И как тогда присвоить допустим свой цвет допустим - феолетовый. Всё спасибо.
Отвечает: mix_mix
Здравствуйте, Александр Михайлович!
Не сразу понял суть вопросов, но похоже Вы хотите создать окно на чистом API. Правильно, в задницу VCL :) Я вообще пишу на асме, поэтому прошу прощения за возможные неточности, возможно в Дельфи все несколько проще.
Получаете hInstance приложения функцией GetModuleHandle - так скажем дескриптор приложения.
Затем в поле hInstance структуры WNDCLASS его же и помещаете. Это делать обязательно!
Дальше, в поле hbrBackground Вы помещаете тот цвет, которым будет залито окно. Вообще, цвет должен меняться с разными значениями, что-то Вы не так делаете.
Чтобы сделать свой цвет, можете использовать функцию CreateSolidBrush, но проще писать самому - 0099FF99h (красивый пастельный зеленый цвет). Можете поэкспериментировать с этим числом для получения других цветов (первые нули не трогать)
Ответ отправил: mix_mix (статус: 4-ый класс)
Ответ отправлен: 07.06.2006, 20:41
Отвечает: Falcao
Здравствуйте, Александр Михайлович!
hInst ни как вами не заполняется - это хендл, или "указатель", дескриптор. У всякого окна, например, есть свой дескриптор. А окнами в винде является почти всё...
{PrevInstance в Вин32 значения может не иметь. В 16системах нужен был для идентификации запуска окна. Вроде еще в 95 можно было применять.На сколько я понял - Вы говорите про создание окна.}
Цвет вообще можно назначать из констант cl***, например clBlack, или в шестнадцатиричной форме: 0x00BCE0CB (где байты есть RGB). Для получения цвета по коду RGB есть ф-я RGB();
--------- Ни кто не знает столько, сколько не знаю я!=))
Ответ отправил: Falcao (статус: 1-ый класс)
Ответ отправлен: 07.06.2006, 21:57
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Александр Михайлович!
1) hInstance - описатель экземпляра программы. Задавая его, мы связываем класс с загруженной программой.
Возможно, используется тогда, когда в каких-то функциях явно не задано...
А вообще, какие проблемы его задать? Он же приходит параметром WinMain.
2) Константы COLOR_ позволяют задать предоопределенную кисть, заданную со цветами стандартных элементов окон.
При задании надо увеличивать на единицу, т.е надо писать COLOR_MENU+1
Кроме того, можно создать свою кисть и записать handle кисти в поле hbrBackground, и тогда можно будет залить фон окна, чем хочешь.
Создать кисть можно с помощью CreateSolidBrush для любого цвета или даже при
помощи CreatePatternBrush, чтобы залить какойнибудь BMP-шкой
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Студент)
Ответ отправлен: 07.06.2006, 22:22
Вопрос № 45.548
Привет всем. Заметил такую вешь. 1)Если использвать расширенный класс, wndclassex, то в нём есть раширенный параметр hIconSm. Если я заполняю его и ещё заполняю параметр hIcon, то у последнего нету никакого проявления. По описанию я понял что hIconSm -это маленькая иконка на панели задач что-ли, а обычная hIconSm-это в заголовке окна . Как это объяснить?
2) Для загрузки иконок исп. функция LoadIcon(0,IDI_HAND), а есть ли ещё какие-нить другие способы?
3) И как указать свою иконку, а не стандартные(IDI_HAND)?
Всё. Всем спасибо.
Отвечает: mix_mix
Здравствуйте, Александр Михайлович!
1) Поле hIconSm - хэндл маленькой иконки, котоpая сопоставляется классу окна. Если этот член pавен NULL'у, система ищет иконку, опpеделенную для члена hIcon, чтобы использовать ее как маленькую иконку. Честно говоря большой разницы между hIcon и hIconSm не вижу.
2) Хм, возникает встречный вопрос: зачем? Ну ладно, желание клиента для нас - закон. Функция LoadImage c параметром uType равным IMAGE_ICON тоже загружает иконки.
3) Можно загрузить иконку с диска фукцией LoadImage (см. выше). А можно запихнуть иконку в ресурсы программы (см. листинг).
Приложение:
Ответ отправил: mix_mix (статус: 4-ый класс)
Ответ отправлен: 07.06.2006, 21:15
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Александр Михайлович!
1) Действительно, практически всегда используется маленькая иконка.
Большая будет использоваться, когда, например, сказать explorer-у рисовать большие иконки.
Если будет задано что-то одно, то иконка нужного размера будет сформирована из имеющегося, возможно с искажениями...
2) Уже ответили
3) Если задан первый параметр = 0, то будет использоваться стандартная иконка.
Если там будет стоять какой-то hInstance (чаще всего, свой), то иконка будет считываться из ресурсов указанной программы или dll-ки.
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Студент)
Ответ отправлен: 07.06.2006, 22:33