Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2009, 18:17   #1
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию Фон диалога - картинка. MFC + dll

У меня есть dll'ка, в которой описываются функции прорисовок кнопок, диалогов и т.д.
Мне нужно, чтоб диалог не просто заливался каким-нибудь цветом, а поставить на фон картинку. Где-то вычитала, что нужно создать кисть на основе картинки, что-то вроде того:
Код:
extern "C" HBRUSH EXPORT DrawDialog()
{
	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP1);

	return CreatePatternBrush((HBITMAP)&bitmap);
}
При компиляции dll все нормально. Как только пытаюсь запустить прогу, ошибка выскакивает на строке bitmap.LoadBitmap(IDB_BITMAP1); (точнее на hInst = AfxGetResourceHandle(); в файле dllinit.cpp).
Картинка загружена в ресурсы проекта dll.

Вот рабочая функция( ):
Код:
extern "C" HBRUSH EXPORT DrawDialog()
{
     return CreateSolidBrush(RGB(120, 120, 120));
}
по этой причине не привожу кода вызова функций dll. То есть все нормально вызывается и работает, пока нет этой картинки.
С картинками и тем более dll'ками, честно говоря, вообще не работала, так что не пинайте, пожалуйста, сильно...
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 22.06.2009, 14:25   #2
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Насколько я помню, когда используются dll-ки, есть какие-то хитрости с получением хэндла для загрузки ресурсов. То есть скорее всего AfxGetResourceHandle() возвращает хэндл текущего приложения (*.exe), а не dll, и пытается там искать эту картинку, которой там, конечно, нет. Я с такой штукой сталкивался, поищи другие функции, которые возвращают хэндлы модулей. Какая-то из них должна прокатить. Я просто их по названиям уже не помню.

Да, вспомнил еще. Посмотри такую штуку: AFX_MANAGE_STATE(AfxGetAppModuleSta te());
Вызывается в самом начале функции отрисовки, а потом вроде должно работать CBitmap::LoadBitmap(...)

Последний раз редактировалось Pashan; 22.06.2009 в 14:30.
Pashan вне форума Ответить с цитированием
Старый 23.06.2009, 23:22   #3
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Спасибо, попробую
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль диалога выбора папки на WinAPI Veress Помощь студентам 0 13.06.2009 23:31
Запуск диалога ввести пароль перед главной формой MDIForm Comatoz Общие вопросы Delphi 0 07.06.2009 18:20
отсутствие MFC 71U.DLL veresk Софт 1 05.02.2009 01:05
Проблема немодального диалога в многопоточном приложении (Visual С++ 6 MFC Win32) Kernel_BuG Помощь студентам 1 26.09.2008 09:59
Фон Стаханов_Андрей Помощь студентам 5 04.03.2008 08:20