我需要画星座图:
我在对话框里加了一个picture 的控件,然后添加了一个空白的bitmap给它。
但是我想画图,却画不出来?首先请教,如何得到这个bitmap的宽与高?
CBitmap::GetBitmapDimension 这个函数只能之前用CBitmap::SetBitmapDimension
后,才有效。但这个bitmap是在resource里加的,它的大小怎么得到?
我在对话框里加了一个picture 的控件,然后添加了一个空白的bitmap给它。
但是我想画图,却画不出来?首先请教,如何得到这个bitmap的宽与高?
CBitmap::GetBitmapDimension 这个函数只能之前用CBitmap::SetBitmapDimension
后,才有效。但这个bitmap是在resource里加的,它的大小怎么得到?
关于bitmap,如果你对位图的操作比较多,还不太了解它的用法的话。
建议找一个CDib类来完成这个工作。
pDC->CreateCompatibleDC(m_pDC);
//载入位图
m_pBitmap->LoadBitmap(IDB_BITMAPCON1);
//下面三行无效
CSize SizeBitmap = m_pBitmap->GetBitmapDimension();
m_iMaxX = SizeBitmap.cx;
m_iMaxY = SizeBitmap.cy;
//随便给了两个值
m_iMaxX = 300;
m_iMaxY = 250; m_pDC->SelectObject(m_pBitmap);
pDC->SetPixel(50,100,RGB(50,225,100));
m_pDC->BitBlt(0,0,m_iMaxX,m_iMaxY,pDC,0,0,SRCCOPY);
有什么问题吗?
CDC dc;
dc.CreateDC("DISPLAY",NULL,NULL,NULL);
CBitmap bm;
if(!bm.LoadBitmap(IDB_BITMAP1))
{
return false;
}
BITMAP pbitmap;
bm.GetBitmap(&pbitmap);
CDC tdc;
int Width = pbitmap.bmWidth;
int Height = pbitmap.bmHeight;
tdc.CreateCompatibleDC(&dc);
CBitmap *pOld = tdc.SelectObject(&bm);
tdc.TextOut(90,154,"hello");
原来是少了下面一句
dc.BitBlt(nX, nY, pbitmap.bmWidth, pbitmap.bmHeight, &tdc,
0, 0, SRCCOPY);可是,还是有问题,显示的东西是在我的对话框外面,根本没和我添加的picture control
发生联系,怎么回事?
这个CDC类,搞的我很糊涂,什么叫做设备上下文(没有更好的翻译?)?
看了半天MSDN,还是没理解透。按理说,我的控件加进去了,并给了一个CBitmap的对象,他俩就应该是一体的啊,
我对这个对象画图,也就应该是对这个控件画图啊,可是没有,为什么?
CDC最后的显示,应该是在我的对话框里进行的啊,也就是说,他的显示应该有个范围,不能让他想在哪显示就在哪显示啊。
显示与画图应该是同步的,为什么要把画图与显示分开呢?
CMyStatic::OnPaint()
{
CPaintDC dc(this);
CRect rt;
GetClientRect(&rt);
dc.FillRect(&rt,&CBrush(255,0,0));//把你的绘图区域变成红色
}
当然为了去闪烁,也可以加上CMemDC。
看来这位老兄可能对Delphi或者vb比较熟,画布用惯了,vc是挺烦!
CMyStatic::OnPaint()
{
CPaintDC dc(this);
CMemDC pDC(dc);
CRect rt;
GetClientRect(&rt);
pDC->FillRect(&rt,&CBrush(255,0,0));//把你的绘图区域变成红色
.....
}
看来俺还是要看看。你的方案我会试试的,
可现在我想解决掉我目前所面对的问题。
难道就不能在我的picture控件(bitmap)里直接画图吗?
你给你的控件加个control变量试试
关联一个变量,比如m_picture,记得要把他的id改一下不能是IDC_STATIC
然后可以用GetDc()获得控件的dc
pdc = m_picture.GetDC()吗?不行啊:(
pdc = m_picture.GetDC();
我试了一下,可以的啊
什么问题?