正在加载图片...
第16单元多文档界面程序 同一条线可恢复背景色(擦除),一是无论背景色和画线色的设置如何,均可保证所画线段 可见,因此特别适合绘制变化图形 但是,由于用户的鼠标可以在屏幕上任意移动。当鼠标移出窗口外时,窗口无法收到鼠 标消息。此时,如果松开了鼠标左键,应用程序由于无法接受到该条消息而不会终止当前笔 划,这样就造成了错误。如何避免这种情况发生呢?解决的办法是要让窗口在鼠标移出窗口 外时仍然能接受到鼠标消息。幸好, Windows提供了一个API函数 Set Capture()解决了这 一问题。 OnLButton Down()中调用 SetCapture()用于捕获鼠标,无论鼠标光标位置在何处, 都会将鼠标消息送给调用它的那一个窗口。在用完后,需要用 Release Capture()释放窗口 对鼠标的控制,否则其他窗口将无法接收到鼠标消息(在 OnLButtonUp()函数中)。这样, 即使用户在“拖曳”鼠标时越出当前窗口的客户区,也不会发生错误。 OnLButtonUp()函数中的语句 Update All Views( this 用于通知所有的视图数据已更新,这是MD的特别用法 OnUpdate Widthl()等函数用来在相应菜单选项前加上被选择标记 自学内容 162滚动视图 到目前为止,我们接触到的程序的窗口客户区均受限于计算机屏幕的大小,而这对某些 应用来说是不方便的。例如,若要开发“所见即所得”的文本编辑或图形编辑程序,就希望 屏幕上出现的文字或图形与打印机的输出大小接近。在 Windows程序中,这可以通过“滚 动视图”技术实现,即在窗口客户区的右方和下方分别添加一个垂直滚动条和一个水平滚动 条,使客户区变为一个更大的虚拟客户区的观察窗口。 MFC提供了 SCroll view类来实现滚动视图。 CScrollview类自动处理滚动条消息并“滚 动”客户区画面。因此利用 CScrollview类显示文档时,可以不必理会客户区的实际大小 只要将其当作一张很大的输出平面即可。 SCroll view类的 OnPrepareDC()成员函数会根 据水平和垂直滚动条的位置自动设定DC原点。因此也可以说,客户区的左上角坐标其实是 水平、垂直滚动条的位置,而两个滚动条的活动范围( scroll size)就是虚拟客户区的大小 CScrollview类有以下重要成员函数实现上述功能: 1.设置虚拟客户区的大小 void CScrollView: Set ScrollSizes( int n MapMode, SIZE size Total const SIZE& sizePage = size Default, const SIZE& sizeline =size Default 其中参数 n Map Mode为映射模式,可参看10.3:“GDl坐标系”。参数 size Total是整个虚拟 客户区的大小; size Page是每次“翻页”时的滚动量,也就是用户按下滚动条把柄时的滚动第 16 单元 多文档界面程序 334 同一条线可恢复背景色(擦除),一是无论背景色和画线色的设置如何,均可保证所画线段 可见,因此特别适合绘制变化图形。 但是,由于用户的鼠标可以在屏幕上任意移动。当鼠标移出窗口外时,窗口无法收到鼠 标消息。此时,如果松开了鼠标左键,应用程序由于无法接受到该条消息而不会终止当前笔 划,这样就造成了错误。如何避免这种情况发生呢?解决的办法是要让窗口在鼠标移出窗口 外时仍然能接受到鼠标消息。幸好,Windows 提供了一个 API 函数 SetCapture()解决了这 一问题。 OnLButtonDown()中调用 SetCapture()用于捕获鼠标,无论鼠标光标位置在何处, 都会将鼠标消息送给调用它的那一个窗口。在用完后,需要用 ReleaseCapture()释放窗口 对鼠标的控制,否则其他窗口将无法接收到鼠标消息(在 OnLButtonUp()函数中)。这样, 即使用户在“拖曳”鼠标时越出当前窗口的客户区,也不会发生错误。 OnLButtonUp()函数中的语句 UpdateAllViews(this); 用于通知所有的视图数据已更新,这是 MDI 的特别用法。 OnUpdateWidth1()等函数用来在相应菜单选项前加上被选择标记。 自学内容 16.2 滚动视图 到目前为止,我们接触到的程序的窗口客户区均受限于计算机屏幕的大小,而这对某些 应用来说是不方便的。例如,若要开发“所见即所得”的文本编辑或图形编辑程序,就希望 屏幕上出现的文字或图形与打印机的输出大小接近。在 Windows 程序中,这可以通过“滚 动视图”技术实现,即在窗口客户区的右方和下方分别添加一个垂直滚动条和一个水平滚动 条,使客户区变为一个更大的虚拟客户区的观察窗口。 MFC 提供了 CScrollView 类来实现滚动视图。CScrollView 类自动处理滚动条消息并“滚 动”客户区画面。因此利用 CScrollView 类显示文档时,可以不必理会客户区的实际大小, 只要将其当作一张很大的输出平面即可。CScrollView 类的 OnPrepareDC()成员函数会根 据水平和垂直滚动条的位置自动设定 DC 原点。因此也可以说,客户区的左上角坐标其实是 水平、垂直滚动条的位置,而两个滚动条的活动范围(scroll size)就是虚拟客户区的大小。 CScrollView 类有以下重要成员函数实现上述功能: 1.设置虚拟客户区的大小: void CScrollView::SetScrollSizes ( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault ); 其中参数 nMapMode 为映射模式,可参看 10.3:“GDI 坐标系”。参数 sizeTotal 是整个虚拟 客户区的大小;sizePage 是每次“翻页”时的滚动量,也就是用户按下滚动条把柄时的滚动
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有