Суббота 9.00 такое классное утро. Так хорошо спится. Только вот телефон рядом с диваном :-( так поспать и не дали :-(((( Суббота 19:50 вот и новые шаги готовы :-)))Ну что, попробуем наш еле живой класс на предмет чтения и помещения изображения на экран. Давайт создадим пункт меню типа Read BMP. Вот где.
Объявляем указатель на описание нашего класса.
// TestDibView.h : interface of the CTestDibView class // ///////////////////////////////////////////////////////////////////////////// #if !defined(AFX_TESTDIBVIEW_H__DE26E62D_F772_11D3_B050_000001260696__INCLUDED_) #define AFX_TESTDIBVIEW_H__DE26E62D_F772_11D3_B050_000001260696__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "dib.h" ......Ссылку на класс в классе вида.
class CTestDibView : public CView { ........... // Operations public: CDib *cbmfile; .......... }Теперь конструктор и присвоение этой перменной значения NULL.
CTestDibView::CTestDibView() { // TODO: add construction code here cbmfile=NULL; }По нажатию на пункт меню
void CTestDibView::OnStepsReadbmp() { if (cbmfile!=NULL) delete cbmfile; cbmfile = new CDib("c:\\windows\\my.bmp"); RedrawWindow(); }И функция рисования.
//////////////////////////////////////////////////// // CTestDibView drawing void CTestDibView::OnDraw(CDC* pDC) { CTestDibDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (cbmfile!=NULL) { StretchDIBits(pDC->m_hDC,10,10,100,100,0,0,100,100,cbmfile->lpBMP ,cbmfile->lpInfo,DIB_RGB_COLORS,SRCCOPY); } // TODO: add draw code for native data here }
Из-за того, что когда я писал шаг меня отвлекли я проспал распределение памяти в CDib.cpp, вот необходимые изменения.
#include "windowsx.h" ....... void CDib::LoadFile(CString filename) { ..... BYTE* ptrBmp = (BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,sizebmp); ..... }
Проверим ??? Только не забудьте указать имя своего BMP файла.
С нашим классом просто. Создаем его и выводим на экран в функции OnDraw с помощью StretchDIBits.
Ну наконец получилось. Если Вы заметили я очень быстро пробежался по многим вопросам, которым нужно уделить больше внимания. Я попробую немного попозже. Несмотря на то, что сегодня суббота меня честно говоря достали. Всё-таки работать тоже надо иногда. То одному чего-то надо, то другому чего-то надо. Вообщем караул. Так что за ошибки извеняйте. Я в свою очередь обещаю описать все мутные вопросы, которые встречались здесь в подробностях.