Тем, кто хорошо знает MFC

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Тем, кто хорошо знает MFC

Сообщение Ariman » 19.04.2005 (Вт) 23:23

Только начал использовать MFC, столкнулся с вопросом.....
Нужно создать отдеьный HDC, в нем сработать изображение, а потом битблитить его на заранее подготовленное место на экране...
ЧЧего-то не работает мой код....

Код: Выделить всё
CDC Buffer;
CWnd *picture=theApp.m_pMainWnd->GetDlgItem(IDCPICTURE);
CDC *DC=picture->GetDC();
Buffer.CreateCompatibleDC(DC);
Buffer.SetPixel(10,10,0);
DC->BitBlt(1,1,50,50,&Perlin,0,0,SRCCOPY);


Чувствую что что-то не так, но как подправить - не знаю.......

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 21.04.2005 (Чт) 10:08

ДЛя АПИ надо было вызывать SelectObject для изменения активного ДС для рисования и
Код: Выделить всё
&Perlin
вот это ДС источник, а ты рисуешь в
Код: Выделить всё
[b]Buffer[/b].SetPixel(10,10,0);


Если ещё надо :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 21.04.2005 (Чт) 13:31

Имена я потом менял, нужно было, чтоб не совпали...
Так что на это внимания не обращай.
А разве SelectObject перегружен для парамета типа HDC???

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 21.04.2005 (Чт) 13:39

MSDN писал(а):CDC::SelectObject
CPen* SelectObject( CPen* pPen );

CBrush* SelectObject( CBrush* pBrush );

virtual CFont* SelectObject( CFont* pFont );

CBitmap* SelectObject( CBitmap* pBitmap );

int SelectObject( CRgn* pRgn );
...
An application can select a bitmap into memory device contexts only and into only one memory device context at a time. The format of the bitmap must either be monochrome or compatible with the device context; if it is not, SelectObject returns an error.
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 21.04.2005 (Чт) 13:54

Igor_123
Хм....... чего-то я не понимаю.....
И где здесь SelectObject(CDC)?

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 21.04.2005 (Чт) 14:07

DC->SelectObject(...)
и здесь
Igor_123 писал(а):SelectObject для изменения активного ДС для рисования
надо было писать

SelectObject для изменения активного инструмента для рисования в ДС

MSDN писал(а):// This OnDraw() handler loads a bitmap from system resources,
// centers it in the view, and uses BitBlt() to paint the bitmap
// bits.

void CBlat2View::OnDraw(CDC* pDC)
{
CBlat2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

// load IDB_BITMAP1 from our resources
CBitmap bmp;
if (bmp.LoadBitmap(IDB_BITMAP1))
{
// Get the size of the bitmap
BITMAP bmpInfo;
bmp.GetBitmap(&bmpInfo);

// Create an in-memory DC compatible with the
// display DC we're using to paint
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);

// Select the bitmap into the in-memory DC
CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);

// Find a centerpoint for the bitmap in the client area
CRect rect;
GetClientRect(&rect);
int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2;
int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2;

// Copy the bits from the in-memory DC into the on-
// screen DC to actually do the painting. Use the centerpoint
// we computed for the target offset.
pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory,
0, 0, SRCCOPY);

dcMemory.SelectObject(pOldBitmap);
}
else
TRACE0("ERROR: Where's IDB_BITMAP1?\n");
}
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 21.04.2005 (Чт) 14:16

Ты уж извини, может я торможу.......
Но у меня НЕТ битмэпов в ресурсах, мне надо создать DC с нуля.

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 21.04.2005 (Чт) 16:23

Код: Выделить всё
void CTestBitmapView::OnDraw(CDC* pDC)
{
   CTestBitmapDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   // TODO: add draw code for native data here
   CBitmap* m_pBitmap = new CBitmap;
   m_pBitmap->CreateBitmap(100, 100, 1, 1, NULL);// Здесь с цветом
                                      // и разрешением разберешься
   CDC dc;
   dc.CreateCompatibleDC(pDC);
   HGDIOBJ gdiob = dc.SelectObject(m_pBitmap);
   CBrush brushNew((COLORREF)0xff0000);// После задашь цвета
   CBrush* pBrushOld = dc.SelectObject(&brushNew);
   dc.MoveTo(5, 5);
   dc.LineTo(95,95);
   dc.Rectangle(10,10,95,95);
   HGDIOBJ oldgdiob = pDC->SelectObject(m_pBitmap);
   pDC->BitBlt(100,100,100,100, &dc,0,0,SRCCOPY);
   pDC->SelectObject(oldgdiob);
   dc.SelectObject(pBrushOld);
   dc.SelectObject(gdiob);
   delete m_pBitmap;
}

Ну типа вот
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 21.04.2005 (Чт) 16:48

Спасибо, попробую!!!


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57

    TopList