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);
?
備注:
?????????
SetScrollSizes()? MFC
庫函數,設置滾動條屬性。參數含義參見
MSDN
。
void SetScrollSizes(
?? int nMapMode,?????????????????????????????????????????? //
影射模式。
?
? SIZE sizeTotal,?????????????????????????????????????????? //
滾動范圍,即所有
page
加起來的高度或寬度
?? const SIZE& sizePage = sizeDefault,???????? //
每頁的大小。根據模式的不同,度量的尺度不同
?? const SIZE& sizeLine = sizeDefault ???????? //
每行的大小。根據模式的不同,度量的尺度不同
);
?
nMapMode
,一般使用
MM_TEXT
,以像素為單位。參見
MSDN
?
?????????
BitBlt
:
將內存中的圖拷貝到屏幕上進行顯示。參數含義
參見
MSDN
。
BOOL BitBlt(
? HDC hdcDest,?????? // handle to destination DC
? int nXDest,? ???????? // x-coord of destination upper-left corner
? int nYDest, ?????????? // y-coord of destination upper-left corner
? int nWidth,? ???????? // width of destination rectangle
? int nHeight,???????????? // height of destination rectangle
? HDC hdcSrc,? ???? // handle to source DC
? int nXSrc,?? ???????? // x-coordinate of source upper-left corner
? int nYSrc,?? ???????? // y-coordinate of source upper-left corner
? DWORD dwRop? // raster operation code
);
如有疑問,歡迎留言。