RT,谢谢!!
解决方案 »
- 帮帮忙:给菜单加载位图出现地址访问错误
- 为什么使用MultiByteToWideChar将从文件中读取的字符串转化为Unicode格式总是乱码?
- 绘制缩略图形
- 请多关照 http://www.XBitSoft.Net
- 怎么样操作modem?
- 哪里有"VC技术内幕第四版下载"!!!给分!!
- 请问大家,GetMessage()和PeekMessage()的一个不同:是不是前者会将消息队列的消息取走(相当是文件的移动)而PeekMessage()只是取走消息
- WIN2K的软键盘在哪里?怎样调出来?
- 怎么用mcisendcommand播放dat文件?
- 小白求教网页如何自动点击某个按钮
- 类似信号量互斥的问题,有没有现成的只读锁可以用?
- 显示内存中的图
如果要保持纵横比例,比较cxClient/rect.Width()和cyClient/rect.Height(),按较小的那个算放大比例和重新修改Rect区域,再StretchBlt
如果要保持纵横比例,比较cxClient/rect.Width()和cyClient/rect.Height(),按较小的那个算放大比例和重新修改Rect区域,再StretchBlt此方法 如果放大倍数不是很大的话 可行
CDC dcImage;
CBitmap bmp;
CRectTracker temp;
temp.TrackRubberBand(this,point,TRUE);
temp.m_rect.NormalizeRect();
temp.GetTrueRect(temp.m_rect);
pDC->DrawFocusRect(temp.m_rect); HDC hDC = CreateDC(L"DISPLAY", NULL, NULL, NULL);
CRect rect;
GetClientRect(&rect); HDC hBufDC;
HBITMAP hBitmap, hBitTemp;
//创建设备上下文(HDC)
hBufDC = CreateCompatibleDC(hDC);
//创建HBITMAP
hBitmap = CreateCompatibleBitmap(hDC, temp.m_rect.Width(),temp.m_rect.Height());
hBitTemp = (HBITMAP) SelectObject(hBufDC, hBitmap);
//得到位图缓冲区
StretchBlt(hBufDC, 0, 0, temp.m_rect.Width(),temp.m_rect.Height(),hDC, 0, 0, rect.Width(), rect.Height(), SRCCOPY);
//得到最终的位图信息
hBitmap = (HBITMAP) SelectObject(hBufDC, hBitTemp);
if(!hBitmap)
{
return;
}
//释放内存
DeleteObject(hBitTemp);
BITMAP bm; if(bmp.Attach(hBitmap)==0)
{
return;
}
bmp.GetBitmap(&bm);
GetClientRect(&rect);
CPaintDC dc(this);
CBitmap* pBitmap = new CBitmap;
pBitmap=&bmp;
if(!dcImage.CreateCompatibleDC(&dc))
{
return;
}
CBitmap* pOldBitmap = dcImage.SelectObject(pBitmap);
dc.BitBlt(0, 0,rect.Width(), rect.Height(),&dcImage, 0, 0, SRCCOPY);
dcImage.SelectObject(pOldBitmap);
CView::OnLButtonDown(nFlags, point);这是在OnLButtonDown里面的代码,各位帮我看看,划出虚线框后没反映。。谢谢
---------------------
在OnLButtonUp里做放大处理。
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetClientRect(&rect); POINT p;
GetCursorPos(&p); CDC *pDC=GetDC();
CRectTracker temp;
temp.TrackRubberBand(this,point,TRUE);
temp.m_rect.NormalizeRect();
temp.GetTrueRect(temp.m_rect); HDC hDC = CreateDC(L"DISPLAY", NULL, NULL, NULL);
//HBITMAP bmp;
//bmp=GetSrcBit(hDC,temp.m_rect.Width(),temp.m_rect.Height());
HDC hBufDC;
HBITMAP hBitmap, hBitTemp;
//创建设备上下文(HDC)
hBufDC = CreateCompatibleDC(hDC);
//创建HBITMAP
hBitmap = CreateCompatibleBitmap(hDC, rect.Width(),rect.Height());
hBitTemp = (HBITMAP) SelectObject(hBufDC, hBitmap);
//得到位图缓冲区
StretchBlt(hBufDC,0,0,rect.Width(), rect.Height(),hDC,p.x,p.y, temp.m_rect.Width(),temp.m_rect.Height(), SRCCOPY);
//得到最终的位图信息
hBitmap = (HBITMAP) SelectObject(hBufDC, hBitTemp);
//释放内存
DeleteObject(hBitTemp); CDC dcMem;
CBitmap Bmp;
Bmp.Attach(hBitmap);
dcMem.CreateCompatibleDC(NULL);
dcMem.SelectObject(&Bmp);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//该函数给对话框贴上位图
//Bmp.Detach();
dcMem.DeleteDC();
CBCGPDockingControlBar::OnLButtonDown(nFlags, point);
}
这样,就可以用虚线框放大了