http://apps.hi.baidu.com/share/detail/19429581
有时不管是要界面的摆设还是画图获得图像上像素点坐标,都需要控件的大小,代码如下
CRect rc;
CWnd *pWnd = GetDlgItem(IDC_STATIC_DIB);//参数为控件ID
pWnd->GetClientRect(&rc);//rc为控件的大小。
进一步,需要在pictrecontrol控件上画图
CDC *pDC = GetDlgItem(IDC_STATIC_DIB);
img.Show(pDc,&rc);
以上代码规整点整理如下:
CDC *pDC = GetDlgItem(IDC_STATIC_DIB)->GetDC();
CRect rc;
GetDlgItem(IDC_STATIC_DIB)->GetClient(rc);
img.Show(pDC,&rc);
//show()函数是提前写好的缩放图像的函数,没事贴出来,仿pj写的。。。
///
int ImgSuccinctDib::Show(CDC *pDC, CRect *pRect)
{
if (m_pPtr == NULL)
{
return 0;
}
BITMAPINFO* bi =(BITMAPINFO *) new BYTE[sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)];
memcpy(&bi->bmiHeader,m_pBmih,sizeof(BITMAPINFOHEADER));
if (GetBitCount() == 8)
{
RGBQUAD pal[256];
for (int i = 0;i<256;i++)
{
pal[i].rgbBlue = i;
pal[i].rgbGreen = i;
pal[i].rgbRed = i;
pal[i].rgbReserved = 0;
}
memcpy(&bi->bmiColors,pal,256*sizeof(RGBQUAD));
}
::StretchDIBits(pDC->GetSafeHdc(),0,0,pRect->right,pRect->bottom,\
0,0,m_pBmih->biWidth,m_pBmih->biHeight,m_pPtr,(BITMAPINFO*)bi,
DIB_RGB_COLORS,SRCCOPY);
delete []bi;
bi=NULL;
return 1;
}
关键是取picture控件的指针,GetDlgItem(IDC_PICTURE1),而后是取cdc,GetDC().
这个cdc类的指针就可以textout,moveto,lineto画线了,但是如何才能实现屏幕横滚呢,清屏功能是现成的吗?还要再看一下