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