Страница 1 из 1

Вставить картинку в однодокументное приложение

Добавлено: 25 июл 2009, 23:26
Лена89
Доброе время суток!

В однодокументное приложение VC++6.0 пытаюсь вставить картинку *.bmp:

Код: Выделить всё

CMy1View::CMy1View()
{
	// TODO: add construction code here
	m_pdcMemory = new CDC;
	m_pBitmap = new CBitmap;
}

CMy1View::~CMy1View()
{
	delete m_pdcMemory;
	delete m_pBitmap;
}
........................................
void CMy1View::OnDraw(CDC* pDC)
{
	CMy1Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	pDC->SetStretchBltMode(COLORONCOLOR);
                pDC->StretchBlt(20, -20, m_sizeDest.cx, -m_sizeDest.cy,
                m_pdcMemory, 0, 0,
                m_sizeSource.cx, m_sizeSource.cy, SRCCOPY);
}


void CMy1View::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	BITMAP bm;

	if(m_pdcMemory->GetSafeHdc() == NULL)
	{
	         CClientDC dc(this);
                         OnPrepareDC(&dc);
	         m_pBitmap->LoadBitmap(IDB_GOLD);
	         m_pdcMemory->CreateCompatibleDC(&dc);
                         m_pdcMemory->SelectObject(m_pBitmap);
                         m_pBitmap->GetObject(sizeof(bm), &bm);
                         m_sizeSource.cx = bm.bmWidth;
                         m_sizeSource.cy = bm.bmHeight;
                         m_sizeDest = m_sizeSource;
                         dc.DPtoLP(&m_sizeDest);
	}
}
Подскажите пожалуйста, что здесь не так?

Re: Вставить картинку в однодокументное приложение

Добавлено: 26 июл 2009, 01:32
WinMain
А тебе что нужно добиться от программы? Просто загрузить картинку из ресурсов и нарисовать её? Тогда это всё делается гораздо проще.
Твой код слишком усложнён.

Re: Вставить картинку в однодокументное приложение

Добавлено: 26 июл 2009, 13:55
Лена89
WinMain писал(а):Просто загрузить картинку из ресурсов и нарисовать её?
Да именно так ... не намекнете как это сделать?

Re: Вставить картинку в однодокументное приложение

Добавлено: 26 июл 2009, 15:15
WinMain
Объект CBitmap внутри класса CMy1View объявляется так:

CBitmap m_bmp;

Далее в файле My1View.cpp идёт реализация методов...

Код: Выделить всё

[color=green]// Конструктор[/color]
[size=84]CMy1View::CMy1View()[/size]
[size=84]{[/size]
[size=84]   [color=green]// Загрузка битмапа...[/color][/size]
[size=84]   m_bmp.LoadBitmap(IDB_BITMAP1);[/size]
[size=84]}[/size]
 
[size=84][color=green]// Процедура отрисовки клиентской области...[/color][/size]
[size=84][size=84][color=#0000ff][size=84][color=#0000ff]void[/color][/size][/color][/size][size=84] CMy1View::OnDraw(CDC* pDC)[/size]
[size=84]{[/size]
[size=84] CDrBitmapDoc* pDoc = GetDocument();[/size]
[size=84] ASSERT_VALID(pDoc);[/size]
[size=84][color=#0000ff][size=84][color=#0000ff] if[/color][/size][/color][/size][size=84] (!pDoc)[/size]
[size=84][color=#0000ff][size=84][color=#0000ff] return[/color][/size][/color][/size][size=84];[/size]
[size=84][color=#008000][size=84][color=#008000] // Отрисовка битмапа...[/color][/size]
[/color][/size][size=84][color=#0000ff][size=84][color=#0000ff] if[/color][/size][/color][/size][size=84] (m_bmp.m_hObject != NULL)[/size]
[size=84] {[/size]
[size=84]   BITMAP bm;[/size]
[size=84]   m_bmp.GetBitmap(&bm);[/size][size=84][color=#008000]
[/color][/size][size=84]   CDC CompDC;[/size]
[size=84]   CompDC.CreateCompatibleDC(pDC);[/size]
[size=84]   CompDC.SelectObject(&m_bmp);[/size]
[size=84]   pDC->BitBlt(20, 20, bm.bmWidth, bm.bmHeight, &CompDC, 0, 0, SRCCOPY);[/size]
[size=84]   CompDC.DeleteDC();[/size]
[size=84] }[/size]
[size=84]}[/size]
[/size]

Re: Вставить картинку в однодокументное приложение

Добавлено: 26 июл 2009, 18:30
Romeo
WinMain, там вообще-то StretchBlt делался. Картинка не просто выводилась, а ещё и растягивалась по размерам формы.

Re: Вставить картинку в однодокументное приложение

Добавлено: 26 июл 2009, 19:18
WinMain
Заменить BitBlt на StretchBlt не проблема.
Мне главное было показать, как именно нужно отрисовывать картинку на поверхности окна, чтобы не писать лишний код.