Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция, возвращающая любой тип данных? а как? 
V
    Опции темы
bel_nikita
Дата 22.2.2006, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 2
Всего: 47



Цитата(maq @ 21.2.2006, 23:28)
Вместо твоего варианта я бы лучше разделил функцию LoadFromExtRes на LoadBitmapFromExtRes и LoadIconFromExtRes, которые возвращали бы HBITMAP и HICON.
Мне нужно просто объединить эти функции.

Ничего не нужно объединять. Каждая функция должна выполнять минимум. И оператор if...else... еще никто не не отменял


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
maq
Дата 22.2.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



bel_nikita,
нужна ОДНА-ЕДИНСТВЕННАЯ функция.

Создать функции
HBITMAP LloadBitmapFromExtRes
HICON LoadIconFromExtRes
- нет проблем!

Мне же нужна одна функция LoadFromExtRes, которая бы возвращала либо HBITMAP, либо HICON (в зависимости от
Цитата
if...else...
в теле функции LoadFromExtRes!
PM MAIL   Вверх
maq
Дата 22.2.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



Цитата
Каждая функция должна выполнять минимум

Почему?
PM MAIL   Вверх
Earnest
Дата 22.2.2006, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(maq @ 22.2.2006, 10:11 Найти цитируемый пост)
нужна ОДНА-ЕДИНСТВЕННАЯ функция.

Почему?
Но если действительно нужна именно функция, и именно одна - тогда возвращай HANDLE и используй преобразование типа при использовании. Другого выхода нет. Если ничего не перепутаешь (т.е. не попытаешься использовать HICON вместо HBITMAP), все должно работать.


--------------------
...
PM   Вверх
chipset
Дата 22.2.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 1
Всего: 165



ИМХО, стоит сделать оболочку ImageProcessor с виртуальной функцией ProcessImage и в LoadBitmapFromExt присваивать классу в ран-тайме либо обьект HIconImageProcessor либо HBitmapImageProcessor. Другого красивого метода я не вижу.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
maq
Дата 23.2.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



Цитата
тогда возвращай HANDLE и используй преобразование типа при использовании

Earnest, ты это имеешь ввиду - заменить
Код
m_static_logo.SetBitmap(LoadFromExtRes(str_temp, 1, DST_BITMAP));

на
Код
m_static_logo.SetBitmap((HBITMAP)LoadFromExtRes(str_temp, 1, DST_BITMAP));

Я правильно понял?

P.S.
Цитата
Можно применить насилие (HBITMAP)LoadFromRes(...)
Однако с точки зрения объектного программирования, это не очень хорошо

Просто для интереса - а почему "не очень хорошо"?
PM MAIL   Вверх
Earnest
Дата 23.2.2006, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Да, ты понял правильно. Только не худо бы проверить, что возвращенный хандл != 0.

Нехорошо, потому что небезопасно: после выхода из LoadFromExtRes, по хандлу уже никак нельзя установить, что это - иконка или битмап. Т.е. от того, с какой константой вызвали LoadFrom... зависит, что будет делаться дальше. Лучше бы такие действия объединить намертво...
Не могу понять, чем тебе так мила единая функция?


--------------------
...
PM   Вверх
Coocky
Дата 23.2.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Долго наблюдал. smile
Снимаю рубаху, кидаюсь в рукопашную smile
Цитата(chipset @ 22.2.2006, 21:24 Найти цитируемый пост)
ИМХО, стоит сделать оболочку ImageProcessor с виртуальной функцией ProcessImage и в LoadBitmapFromExt присваивать классу в ран-тайме либо обьект HIconImageProcessor либо HBitmapImageProcessor. Другого красивого метода я не вижу.

Сильно заООПепил smile Наследие Qt.
На самом деле-решений-множество smile Тут уже по вкусу..Как по мне. так кроме "красоты", важна скорость написания и надежность кода.
Вот у меня вопрос к автору-толкнуть все в одну функцию-это чисто из любопытства или жизненое кредо? smile



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
maq
Дата 23.2.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



Цитата
Только не худо бы проверить, что возвращенный хандл != 0

Все отлично работает.

Цитата
Нехорошо, потому что небезопасно: после выхода из LoadFromExtRes, по хандлу уже никак нельзя установить, что это - иконка или битмап.

Предусмотрено уже (например):
Код
m_static_logo1.SetBitmap((HBITMAP)LoadFromExtRes(str_temp, 1, DST_BITMAP));
m_static_logo2.SetIcon((HICON)LoadFromExtRes(str_temp, 1, DST_ICON));


Цитата
Вот у меня вопрос к автору-толкнуть все в одну функцию-это чисто из любопытства или жизненое кредо?

Цитата
Не могу понять, чем тебе так мила единая функция?

Люблю простоту написания кода. А всю рутинную работу бросить в отдельную функцию. (наверное привычка от VB)
smile

Спасибо за помощь!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0740 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.