200分求救,怎样用鼠标拖动大于客户区的位图,怎样实现放大图片的中心点

jackwuwei 2004-08-05 02:00:34
我用StretchDIBits,在没有滚动条的情况下实现,我直接在CWnd里显示,没有在View里显示,用StretchDIBits能不能放大客户区中心区域的图片,就像ACDSee那样,谢谢!
...全文
147 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackwuwei 2004-08-19
  • 打赏
  • 举报
回复
这么长时间都没人来了,结贴!
lanstar200 2004-08-06
  • 打赏
  • 举报
回复
mark
jackwuwei 2004-08-06
  • 打赏
  • 举报
回复
各位,有什么好的办法啊
快乐鹦鹉 2004-08-06
  • 打赏
  • 举报
回复
肯定没有问题
wrcluomo 2004-08-06
  • 打赏
  • 举报
回复
用这个方法你看可不可以,放大后的图像显示在窗口中,窗口跟着树标移动.在MOUSEMOVE中
//以下放大镜开始
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if(m_nDrawType==DRAW_MAGNIFIER)
{
//INT
if(MovePoint.x>XWIDTH/2&&MovePoint.x<m_lWidth-XWIDTH/2&&MovePoint.y>YHEIGHT/2&&MovePoint.y<m_lHeight-YHEIGHT/2)
{
char * pcImage,*pcImageData;
pcImage=(char *)::GlobalLock(m_hbmpMagnifier);
::GlobalUnlock(m_hbmpMagnifier);
pcImageData=::FindDIBBits(pcImage);
int i,j;
unsigned char *pucSource,*pucDest;
long lLineBytes=WIDTHBYTES(XWIDTH*24);
int m,n;
for(j=MovePoint.y-YHEIGHT/2,n=0;n<YHEIGHT;j++,n++)

{
for(i=3*(MovePoint.x-XWIDTH/2),m=0;m<3*XWIDTH;i++,m++)
{
pucSource=(unsigned char *)m_pcImageData+m_lLineBytes*(m_lHeight-1-j)+i;
pucDest=(unsigned char *)pcImageData+lLineBytes*(YHEIGHT-1-n)+m;
*pucDest=*pucSource;
}
}
memcpy( m_pMannifier, pcImageData, XWIDTH*YHEIGHT*3 );
m_pdiaMagnifier->ShowWindow(SW_SHOW);

CRect rectView;
GetClientRect(&rectView);
ClientToScreen(&rectView);
CDC * pdc=m_pdiaMagnifier->GetDC();
m_pdiaMagnifier->MoveWindow(point.x+XWIDTH/3*2+rectView.left-5,point.y+YHEIGHT/3-111+ rectView.top,3*XWIDTH,3*YHEIGHT,true);
pdc->StretchBlt(0,0,3*XWIDTH,3*YHEIGHT,m_pMemMagnifierDC,0,0,XWIDTH,YHEIGHT,SRCCOPY);
ReleaseDC(pdc);
}
else
{
m_pdiaMagnifier->ShowWindow(SW_HIDE);
}

}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//以上放大镜结束
virtualfunction 2004-08-06
  • 打赏
  • 举报
回复
CDC中有四个函数专门干这事:

virtual CSize SetWindowExt( SIZE size );
CPoint SetWindowOrg( POINT point );

virtual CSize SetViewportExt( SIZE size );
virtual CPoint SetViewportOrg( POINT point );

当Viewport的size大于Window的size时为缩小,反之放大;这和有没有在View里无关;只要是Window就行。

酒红绿叶 2004-08-06
  • 打赏
  • 举报
回复
应该可以,,
是不是指放大的时候,图片的中心在屏幕的中心,

在cwnd里面也可以,

把要求在说清楚一些!
microyzy 2004-08-05
  • 打赏
  • 举报
回复
需要局部画图了吧,使用gdi+也许好实现一点
gz

19,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧