MFC获得控件大小及在picturecontrol控件上画图

http://apps.hi.baidu.com/share/detail/19429581


MFC获得控件大小及在picturecontrol控件上画图

有时不管是要界面的摆设还是画图获得图像上像素点坐标,都需要控件的大小,代码如下

   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画线了,但是如何才能实现屏幕横滚呢,清屏功能是现成的吗?还要再看一下

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页