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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2007, 22:51   #1
oto_aki
Пользователь
 
Аватар для oto_aki
 
Регистрация: 07.12.2007
Сообщений: 14
Восклицание VS .NET MFC, непонятки с отрисовкой в CDC

всем привет, вот никак что то не получится у меня отрисовать картинку,
вернее картинка отрисовывается но когда вызывается OnDraw снова начинается что то непонятное.
я думаю ошибка от не понимания работы CDC и HDC в MFC, просто
я пока еще не совсем в теме...(((

(проект SDI)

Вот так я гружу картинку из jpeg'а

Код:
  CFile file;
     file.Open(Fname, CFile::modeRead | CFile::shareDenyWrite);
    
     CArchive ar(&file, CArchive::load | CArchive::bNoFlushOnDelete);
     CArchiveStream ars(&ar);

     HRESULT hr = OleLoadPicture((LPSTREAM) &ars, 0, FALSE, IID_IPicture,  (void **) &lpPicture);

	 ((LPSTREAM) &ars)->Release();
     ar.Close();
здесь все нормально, hr = S_OK

идем дальше

я пробовал разными способами отрисовать картинку, например тупо так
(szDest - размеры картинки)

Код:
 [B]::FillRect((HDC)::GetDC(m_hWnd), CRect(CPoint(0, 0), szDest),
                                              (pBgBrush != NULL) ?
                                                         (HBRUSH) pBgBrush->GetSafeHandle() :
                                                         ::GetSysColorBrush(COLOR_WINDOW));
Код:
HRESULT hRes = lpPicture->Render((HDC)::GetDC(m_hWnd), ax, ay, szDest.cx,szDest.cy, 0, szSrc.cy-1, szSrc.cx,-szSrc.cy, NULL);
но при первой перерисовке окна - все , кердык, начинаются глюки..

тогда попробовал создать еще один CDC


Код:
if(mDC == NULL)
	{
		mDC = new CDC();
		mDC->CreateCompatibleDC(GetDC());

		CBitmap MemBM;
		MemBM.CreateCompatibleBitmap(GetDC(),1104,828);
		mDC->SelectObject(&MemBM);
		
	}
(здесь размеры правда фиксированные, просто тестил все время на одной картинке)

потом один рендер в mDC

Код:
HRESULT hRes = lpPicture->Render(/*hDCMem*/(HDC)mDC, 0, 0, szDest.cx,szDest.cy, 0, szSrc.cy - 1, -szSrc.cy, NULL);
ну и потом когда OnDraw(CDC* pDC)

Код:
if(mDC != NULL)
	{

	pDC->BitBlt(0, 0, 1104, 828,mDC, 0, 0, SRCCOPY);

	}



Может кто объяснит, в каком месте я пошел не в ту спеть, плз...
У меня смысл в чем - мне надо, чтобы при перерисовке или при Scroll'е
изображение не чернело и не глючило (иногда нормально, нормально а потом просто раз - и пропало)
AMD Athlon X2 5600+, Asus M2N-E nForce570 Ultra, 1Gb x 3 Kingston DDR2 667@800, Asus GeForce 7900 GT 256 Mb @(690,1800 VMod 1.55 + Zalman))),serial ATA Seagate 320Gb, WD 250 Gb, Seagate 500Gb, Pioner 210D (Sata).
OS - Win XP SP2, Ubuntu 8.04

HP 6720s (C2D T7250), OS - Ubuntu 8.04

Последний раз редактировалось oto_aki; 08.12.2007 в 21:43.
oto_aki вне форума Ответить с цитированием
Старый 08.12.2007, 14:45   #2
oto_aki
Пользователь
 
Аватар для oto_aki
 
Регистрация: 07.12.2007
Сообщений: 14
По умолчанию

может кто подкинет исходник , или ссылку где почитать по теме...
AMD Athlon X2 5600+, Asus M2N-E nForce570 Ultra, 1Gb x 3 Kingston DDR2 667@800, Asus GeForce 7900 GT 256 Mb @(690,1800 VMod 1.55 + Zalman))),serial ATA Seagate 320Gb, WD 250 Gb, Seagate 500Gb, Pioner 210D (Sata).
OS - Win XP SP2, Ubuntu 8.04

HP 6720s (C2D T7250), OS - Ubuntu 8.04
oto_aki вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
непонятки с данными KiSH333 БД в Delphi 5 01.09.2008 08:36
HELP!!! Проблема с отрисовкой frai Общие вопросы Delphi 1 11.05.2007 21:17