112上位机VC MFC浏览任意比例位图
112上位机VC MFC浏览任意比例位图
功能展示
一般在位图浏览时,都有放大缩小位图,进行任意比例的查看,我们当前例程就实现了这一功能,输入任意缩放比例后,位图将自动自行放大或缩小,效果如图 要点提示 位图的缩放主要是通过函数StretchBlt()来实现 的,函数原形为BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop ); 它的参数很多,能够灵活应用,会有不一样的效果,参数含义为 X,Y:目标矩形的左上角坐标, nWidth, nHeight目标矩形要显示的长与宽, pSrcDC被复制的设备上下文指针, xSrc , ySrc要被复制的矩形左上角坐标, nSrcWidth ,nSrcHeight要被复制在矩形长与宽, dwRop 为光栅操作类型,类型众多,我们当前例程用到复制类型SRCCOPY ; 实现功能 1.新建基于对话框的应用程序 2.拖拽一编辑框控件,关联无符号整形变量UINT m_Rate;,用于设置位图显示的比例。再添加此编辑框的EN_CHANGE消息函数,用于执行比例效果void CGkbc8Dlg::OnChangeEdit1()
{ DrawPicture(); } DrawPicture()为我们自定义函数,用于显示图片用 - void CGkbc8Dlg::DrawPicture()
- {
- UpdateData(TRUE);//编辑框内容刷新
- //获得窗口大小
- CRect r;
- GetDlgItem(IDC_RECT)->GetClientRect(&r);
- CDC* pDC = GetDlgItem(IDC_RECT)->GetDC();
- //填充背景
- pDC->FillRect(&r,NULL);
- //将位图选进设备场景中
- CBitmap cbmp;
- cbmp.LoadBitmap(IDB_BITMAP1);
- CDC memdc;
- memdc.CreateCompatibleDC(pDC);
- memdc.SelectObject(&cbmp);
- //获得位图参数
- long width,height;
- BITMAP bmp;
- cbmp.GetBitmap(&bmp);
- width = bmp.bmWidth;
- height = bmp.bmHeight;
- pDC->StretchBlt(r.left,r.top,(int)(width*m_Rate/100),(int)(height*m_Rate/100),
- &memdc,0,0, bmp.bmWidth,bmp.bmHeight,SRCCOPY);
- GetDlgItem(IDC_RECT)->Invalidate();
- }
复制代码为了实现窗口在自行重绘,我们在主对话框OnPaint()函数中也调用DrawPicture()一下;
我们来演示下功能实现的整个过程
|