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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2011, 12:42   #1
3_14yavka
Новичок
Джуниор
 
Регистрация: 03.04.2011
Сообщений: 1
Печаль вывод изображения, выбранного через диалог

добрый день. у меня такая проблема: есть процедурка рисования bitmap'a на экране, в нее передаю путь к изображению и hdc. Сначала путь стандартный (типа "1.bmp"), с ним работает. Также есть стандартный диалог открытия файла. И вот когда уже вызываю эту процедурку с новым именем - не работает.
Код процедуры:
Код:
void Paint(char buffer[256],HDC hdc)
{
	PAINTSTRUCT ps;
	HDC hCompatibleDC;
	HANDLE hOldBitmap,hBitmap;
	BITMAP bitmap;
	RECT rect;

	hBitmap=LoadImage(NULL,buffer,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//загружаем bitmap
	GetObject(hBitmap,sizeof(BITMAP),&bitmap);//получаем размерность загруженного bitmap'а
	hCompatibleDC=CreateCompatibleDC(hdc);//создаем совместимый с контекстом окна контекст в памяти		
	hOldBitmap=SelectObject(hCompatibleDC,hBitmap);//делаем загруженный bitmap текущим в совместимом контексте
	GetClientRect(hWnd,&rect);// опредеяем размер рабочей области окна	
	StretchBlt(hdc,0,0,rect.right,rect.bottom,hCompatibleDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);//копируем bitmap с совместимого на основной контекст с масштабированием
	SelectObject(hCompatibleDC,hOldBitmap);//вновь делаем старый bitmap текущим		
	DeleteObject(hBitmap);//удаляем загруженный с диска bitmap
	DeleteDC(hCompatibleDC);//удаляем совместимый контекст
	EndPaint(hWnd, &ps);//освобождаем основной контекст, завершая перерисовку рабочей области окна
}
вызов после диалога:
Код:
case ID_OPEN:
			hdc=GetDC(hWnd); //получаем контекст клиентской области
			ZeroMemory(&of, sizeof(of));
			ZeroMemory(&buffer,sizeof(buffer));
			//Заполняем поля OPENFILENAME
			of.lStructSize=sizeof(OPENFILENAME); //размер структуры
			of.hwndOwner=hWnd; //родительское окно
			of.lpstrFilter="bmp\000 *.bmp\000\000"; //фильтр
			of.lpstrFile=(LPSTR)buffer; //текстовая строка, в которую будет записано имя открываемого файла
			of.nMaxFile=MAX_PATH; //максимальный путь - константа
			of.lpstrFileTitle=NULL; //буфер для хранения выбранного файла
			of.lpstrTitle="Открытие файла"; //заголовок окна - его вы придумываете сами
			of.Flags=OFN_HIDEREADONLY; //флаги для открытия файла
			//Если открытие файла невозможно-выдём сообщение об ошибке
			if (GetOpenFileName(&of)==TRUE)
			hf = CreateFile(of.lpstrFile, GENERIC_READ,
				0, (LPSECURITY_ATTRIBUTES) NULL,
				OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
				(HANDLE) NULL);	
			Paint(buffer,hdc);
			InvalidateRect(hWnd,NULL,true);
				break;
после этого белый экран ни старой картинки ни новой) в чем проблема? заранее спасибо..
3_14yavka вне форума Ответить с цитированием
Старый 07.05.2011, 00:56   #2
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Как я понимаю, не хватает
of.lpstrFile[0] = '\0';
Без этого нюанса GetOpenFileName не может нормально инициализировать lpstrFile
Spawn™Production® вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод второго selecta в зависимости от выбранного пункта в первом pavelslap PHP 5 20.01.2011 16:28
Некорректный вывод изображения Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 24.07.2010 00:12
вывод изображения асемблер eXen_fm Фриланс 3 07.06.2010 09:55
загрузка текста в мемо НЕ через диалог Brabus Помощь студентам 9 30.05.2010 11:32
Имя выбранного изображения SergGhost JavaScript, Ajax 0 25.04.2010 17:39