原创 MFC滚动条的实现

2009-2-28 04:26 9382 8 9 分类: 软件与OS



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




);



PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户243749 2009-11-15 19:27

想实现文本滚动可以参考:http://armlinux.uueasy.com/read.php?tid=32&newpost=1
相关推荐阅读
zhangshaobing517_935512703 2011-03-21 01:28
KC24RT-300调试笔记
项目中需要使用LED驱动器,主要是为了让一串LED发出的光照一致,所以在试验中采用LED串联的方式比较好点,LED并联容易导致LED发光的 不均匀以及寿命减少。我在项目中采用金升阳公司的KC24RT-...
zhangshaobing517_935512703 2010-11-19 14:53
线程中CreateEvent和SetEvent及WaitForSingleObj
首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面.CreateEvent 函功能描述:创建或打开一个命名的或无名的事件对象.EVENT有两种状态:发信...
zhangshaobing517_935512703 2010-11-15 13:29
VS2008 BEGIN
Visual Studio 2008环境与VC6.0的环境存在着比较大的区别,下面就一些小小的区别在这里做一些探讨,欢迎指教!1、如果是调试控制台程序,很多时候点击“启动调试”后是一闪而过,此时可有两...
zhangshaobing517_935512703 2010-11-01 20:38
使用MFC的数组类
 MFC的数组类支持的数组类似于C++中的常规数组,可以存放任何数据类型。C++的常规数组在使用前必须将其定义成能够容纳所有可能需要的元素,而MFC数组类创建的对象可以根据需要动态地增大或减小,数组的...
zhangshaobing517_935512703 2010-09-07 13:14
循环
 循环设计的注意的事情:(1)双重循环的跳出问题,break只挑出所在的循环,如果使用双层FOR循环,单个BREAK就不可能跳出所有的双层(2)在迭代的时候,注意起始和终止的条件,尤其是终止问题(3)...
zhangshaobing517_935512703 2010-09-02 01:09
图像处理改进
1.特征点提取的算法  标志点的提取算法对结果的影响虽然没有经过试验或者计算的推算,每1个pix的偏差对结果的影响有多大,但是不可避免的,要想获得高精度的  测量结果,高精度的提取对结果的影响还是很大...
EE直播间
更多
我要评论
1
8
关闭 站长推荐上一条 /3 下一条