关于视图中滚动条的一个小问题。

PM0115 2006-09-09 10:19:12
我建立了一个单文档工程,在客户区中显示我打开的bmp图片,由于bmp图片的象素是不同的,所以有些图片必须用滚动条拖动来查看,现在我的问题就是如何设置函数:SetScrollSizes()中的参数,使得水平和垂直滚动条的范围恰好等于图片的宽和长,我现在只能象下面一样这样硬性设置:SetScrollSizes(MM_TEXT,1000)。
如果大家方便的话不妨把SetScrollSizes()中的各个参数的意义给我说一下,谢谢大家了!!
...全文
320 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
PM0115 2007-03-05
  • 打赏
  • 举报
回复
哎,还是自己再顶一下,分不够再加呀!
PM0115 2007-03-04
  • 打赏
  • 举报
回复
我现在是像下面这样设置的,滚动条出现了,但是当我拖动滚动条时,图象并没有滚动,也就是说我该如何触发滚动事件,请大家帮我补充一下,谢谢!!

//程序开始时初始化滚动条
void CDIPView::OnInitialUpdate()
{

CScrollView::OnInitialUpdate();
CSize sizeTotal;

// TODO: calculate the total size of this view
sizeTotal.cx = 100;
sizeTotal.cy = 100;
SetScrollSizes( MM_TEXT, sizeTotal);

}

//当我调入一个图象进入内存并显示出来后就将垂直和水平滚动条设置为图象的高和宽
void CDIPView::OnOpenDib()
{
.........
.........
CSize sizeTotal;
CSize sizePage;
CSize sizeLine;

sizeTotal.cx = CMyDIB::pBitmapInfoHeader->biWidth;
sizeTotal.cy = CMyDIB::pBitmapInfoHeader->biHeight;

CScrollView::SetScrollSizes( MM_TEXT, sizeTotal , sizePage , sizeLine);
........
........
}

//然后我添加了垂直和水平滚动条的消息处理函数如下:
void CDIPView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default

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

}

void CDIPView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default

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

现在问题就是我该如何在上面两个消息处理函数中添加代码,使得我拖动滚动条时图象也随之跟着被拖动.
谢谢各位了!!
PM0115 2007-03-04
  • 打赏
  • 举报
回复
我本来是想这样添代码的:比如当我往右拉动滚动条时,这个时候就重新显示图片,而且根据我拉动的多少按比例显示图象的指定部分,这样看起来也达到了拖动图象以达到能完整地观看到全图的目的。但是细细想来这样不可取,每次拉动都另外显示的话,当图象很大时就会很慢,而且我不知道该如何判断是往左拖动还是往右拖动。
所以不知道MFC是否在上面两个消息处理函数中封装了相应的代码?还请大家帮帮我呀!谢谢了!
jerry 2006-09-29
  • 打赏
  • 举报
回复
bmp.GetBitmap(&info); 也必需在图像有效时才能用.
jerry 2006-09-29
  • 打赏
  • 举报
回复
info.bmWidth, info.bmHeight 确定要大于0 , 否则会出错.

可以这样: 如果info.bmWidth, info.bmHeight 是<=0 则给一个默认值如(1)
PM0115 2006-09-29
  • 打赏
  • 举报
回复
TO 思危:我像你这样设置:SetScrollSizes(MM_TEXT, CSize(info.bmWidth, info.bmHeight));后,一运行程序就出错,不知道怎么回事,谢谢!
believefym 2006-09-09
  • 打赏
  • 举报
回复
恭喜楼上的升三星啊:)
思危 2006-09-09
  • 打赏
  • 举报
回复
CBitmap bmp;
bmp.LoadBitmap(IDB_BMP1);
BITMAP info;
bmp.GetBitmap(&info);
SetScrollSizes(MM_TEXT, CSize(info.bmWidth, info.bmHeight));
jerry 2006-09-09
  • 打赏
  • 举报
回复
void SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault );

Parameters

nMapMode

The mapping mode to set for this view. Possible values include:

Mapping Mode Logical Unit Positive y-axis Extends...
MM_TEXT 1 pixel Downward
MM_HIMETRIC 0.01 mm Upward
MM_TWIPS 1/1440 in Upward
MM_HIENGLISH 0.001 in Upward
MM_LOMETRIC 0.1 mm Upward
MM_LOENGLISH 0.01 in Upward


All of these modes are defined by Windows. Two standard mapping modes, MM_ISOTROPIC and MM_ANISOTROPIC, are not used for CScrollView. The class library provides the SetScaleToFitSize member function for scaling the view to window size. Column three in the table above describes the coordinate orientation.

sizeTotal

The total size of the scroll view. The cx member contains the horizontal extent. The cy member contains the vertical extent. Sizes are in logical units. Both cx and cy must be greater than or equal to 0.

sizePage

The horizontal and vertical amounts to scroll in each direction in response to a mouse click in a scroll-bar shaft. The cx member contains the horizontal amount. The cy member contains the vertical amount.

sizeLine

The horizontal and vertical amounts to scroll in each direction in response to a mouse click in a scroll arrow. The cx member contains the horizontal amount. The cy member contains the vertical amount.



for example, the size of bitmap is 800(w) X 600(h), you can use this function as following:

SetScrollSizes(MM_TEXT, CSize(800, 600));

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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