1. 程式人生 > >MFC獲得控制元件大小及在picturecontrol控制元件上畫圖

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畫線了,但是如何才能實現螢幕橫滾呢,清屏功能是現成的嗎?還要再看一下