很多情况下,我们在作Document/view编程的时候,容易忘记把CMyView的父类改为CSrollView,后来想加上对滚动条的支持又十分麻烦。直接把CMyView : public CView改成CMyView : public CView肯定是不行的了,那么到底还要有那些改动呢?
1。view是用来显示Document的,要让view滚动,必须通过计算Document的尺寸来决定显示,所以必须先设定Document的大小(size),也就是必须给CMyDoc类增加一个成员变量来表示:
//******************************************************************//
CMyDoc : public CDocument
{
...
protected:
CSize m_sizeDoc; //定义Document的尺寸
public:
CSize GetDocSize() { return m_sizeDoc; } //取得Document的尺寸
...
//******************************************************************//
//还要初始化m_sizeDoc的值,可以在CMyDoc的构造函数中初始化
CMyDoc::CMyDoc()
{
m_sizeDoc = CSize(800, 900); //设定Document的尺寸为800*900像素
...
}
2。改变CMyView的父类为CScrollView,包括其cpp文件中的
IMPLEMENT_DYNCREATE(CMyView, CScrollView)
BEGIN_MESSAGE_MAP(CMCMyView, CScrollView)
现在我们就可以来设置滚动条了:
由于对滚动条的一些操作是在CSrollView::OnInitialUpdate()中完成的,所以我们在CMyView中重载该函数:
void CMyView::OnInitialUpdate()
{
SetScrollSizes(MM_TEXT, //屏幕映射模式
GetDocument()->m_sizeDoc) //Document的尺寸(现在知道尺寸的作用了吧)
}
3。如果你在view中有一些对坐标的操作,就应该进行相应的设备坐标和逻辑坐标之间的变换,如果仅仅是显示某些固定内容,这样就可以了!