用mfc文件打开一张图片 显示不全 怎样加滚动条

studaymatlab 2010-07-28 09:08:45
从网上查了一个 不知到加到什么地方 刚学vc 很多东西不懂

1、 建立工程时,将 View 类继承自 CScrollView

2、 在 OnInitialUpdate 中添加初始化时 Scroll 的相关属性值

CSize sizeTotal(0,0);

SetScrollSizes(MM_TEXT,sizeTotal);

3、 打开文件 ( 图像后 ) 根据图像的大小,设置滚动属性值

ChangeScrollRange(); // 自定义函数

4、 在 View 类中添加成员变量。

作用是存储图像显示位置与原点的 offset

int m_ImgVScrollPos ; // VScroll distance

int m_ImgHScrollPos ; // HScroll distance

5、 滚动处理

添加自定义响应 WM_VSCROLL 、 WM_HSCROLL 消息的事件函数: OnVScroll 、 OnHScroll

void CSockIIView :: OnVScroll ( UINT nSBCode , UINT nPos , CScrollBar * pScrollBar )

{

// TODO: Add your message handler code here and/or call default

SCROLLINFO si ;

GetScrollInfo ( SB_VERT ,& si , SIF_ALL );

m_ImgVScrollPos = si . nPos ;

Invalidate ( TRUE );



CScrollView :: OnVScroll ( nSBCode , nPos , pScrollBar );

}

6、 图像显示

更改 OnPaint 函数中图像显示的代码:

dc . BitBlt ( rc . left , rc . top , rc . Width (), rc . Height (), m_pMemDC , rc . left , rc . top , SRCCOPY );

为:

dc.BitBlt(rc.left,rc.top,rc.Width(),rc.Height(),m_pMemDC,(rc.left+m_ImgHScrollPos),(rc.top+m_ImgVScrollPos),SRCCOPY);

...全文
189 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hastings 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 studaymatlab 的回复:]

引用 5 楼 hastings 的回复:
给你发了~~~


好了 我再网上找了中方法 我把#define new DEBUG_NEW//把这句删掉 这句注释掉了
[/Quote]
我把gdi+的那个GdiPlusBase.h文件给改了~~
因为MFC在DEBUG时new被换成了DEBUG_NEW~~
GdiPlusBase.h改成如下形式,这样就可以用new了~~
#ifndef _GDIPLUSBASE_H
#define _GDIPLUSBASE_H

class GdiplusBase
{
public:
void (operator delete)(void* in_pVoid)
{
DllExports::GdipFree(in_pVoid);
}
void* (operator new)(size_t in_size)
{
return DllExports::GdipAlloc(in_size);
}
void (operator delete[])(void* in_pVoid)
{
DllExports::GdipFree(in_pVoid);
}
void* (operator new[])(size_t in_size)
{
return DllExports::GdipAlloc(in_size);
}
////////////////////////////////
void* (operator new)(size_t in_size, LPCSTR lpszFileName, int nLine)
{
return DllExports::GdipAlloc(in_size);
}
void (operator delete)(void* in_pVoid, LPCSTR lpszFileName, int nLine)
{
DllExports::GdipFree(in_pVoid);
}
};

#endif
studaymatlab 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hastings 的回复:]
给你发了~~~
[/Quote]

好了 我再网上找了中方法 我把#define new DEBUG_NEW//把这句删掉 这句注释掉了
Eleven 2010-07-29
  • 打赏
  • 举报
回复
studaymatlab 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hastings 的回复:]
给你发了~~~
[/Quote]

收到 但是显示 m_pbmp=new Bitmap(wname.c_str());
error C2660: 'new' : function does not take 3 parameters
hastings 2010-07-29
  • 打赏
  • 举报
回复
给你发了~~~
studaymatlab 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 studaymatlab 的回复:]
引用 2 楼 hastings 的回复:
LZ看那个贴~~
我回复你了~~

我把那个Bitmap* m_pbmp;这个成员变量放到视图类里面了~~
原来我是放在文档类里的~~
文档类是没有SetScrollSizes和Invalidate成员函数的~~


放在视图类 你写的代码不是要改很多吗 pDoc->m_pbmp m_pbmp这个不是pDoc的了 谢谢你回复 希望你能帮我……
[/Quote]

大哥 你再把昨天发给我的那个改改 你试试能不能运行 发给我把 非常感谢 我实在是不会
studaymatlab 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hastings 的回复:]
LZ看那个贴~~
我回复你了~~

我把那个Bitmap* m_pbmp;这个成员变量放到视图类里面了~~
原来我是放在文档类里的~~
文档类是没有SetScrollSizes和Invalidate成员函数的~~
[/Quote]

放在视图类 你写的代码不是要改很多吗 pDoc->m_pbmp m_pbmp这个不是pDoc的了 谢谢你回复 希望你能帮我解答
hastings 2010-07-28
  • 打赏
  • 举报
回复
LZ看那个贴~~
我回复你了~~

我把那个Bitmap* m_pbmp;这个成员变量放到视图类里面了~~
原来我是放在文档类里的~~
文档类是没有SetScrollSizes和Invalidate成员函数的~~
studaymatlab 2010-07-28
  • 打赏
  • 举报
回复
124 都做了 第三步在哪里写啊
第5步 不是加OnVScroll 、 OnHScroll 怎么只加了 OnVScroll ,那个是不是一样复制过去啊
第六步 怎么是OnPaint 不是是ondraw吗 我的ondraw代码是

CDIBDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

// TODO: add draw code for native data here
if(pDoc->m_pbmp)
{
Graphics graphics(pDC->GetSafeHdc());
graphics.DrawImage(pDoc->m_pbmp, Rect(0, 0, pDoc->m_pbmp->GetWidth(),pDoc->m_pbmp->GetHeight()));
请高手帮忙改改吧 万分感谢

19,468

社区成员

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

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