Модераторы: Hawk , Romeo , Absurd , DeeJayC , WinMain
Лена89
Сообщения: 52 Зарегистрирован: 20 июн 2007, 10:36
25 июл 2009, 23:26
Доброе время суток!
В однодокументное приложение 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);
}
}
Подскажите пожалуйста, что здесь не так?
WinMain
Сообщения: 929 Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:
26 июл 2009, 01:32
А тебе что нужно добиться от программы? Просто загрузить картинку из ресурсов и нарисовать её? Тогда это всё делается гораздо проще.
Твой код слишком усложнён.
Лена89
Сообщения: 52 Зарегистрирован: 20 июн 2007, 10:36
26 июл 2009, 13:55
WinMain писал(а): Просто загрузить картинку из ресурсов и нарисовать её?
Да именно так ... не намекнете как это сделать?
WinMain
Сообщения: 929 Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:
26 июл 2009, 15:15
Объект 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]
Romeo
Сообщения: 3126 Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:
26 июл 2009, 18:30
WinMain , там вообще-то StretchBlt делался. Картинка не просто выводилась, а ещё и растягивалась по размерам формы.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
WinMain
Сообщения: 929 Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:
26 июл 2009, 19:18
Заменить BitBlt на StretchBlt не проблема.
Мне главное было показать, как именно нужно отрисовывать картинку на поверхности окна, чтобы не писать лишний код.