创建视图使用什么语句,根据视图创建视图的语句
在对话框上画图可以通过添加控件来完成,但是这种画图有一个严重的缺点就是画图范围受控件范围控制。最近做一个程序,需要一个数据报表窗口,因为输出内容比较多,格式不一致(涉及多个表,但是每个表的数据要严格对齐),所以ListControl之类的控件不适合。所以我想显示在对话框上创建的视图类的数据。
首先,如何动态创建视图窗口。首先是视图窗口的定位。通常,动态创建窗口并定位它们并不容易。我从网上找到了一个好方法,在对话框中添加一个静态文本控件,然后在控件上面创建一个视图。想想这个问题,创作基本完成了。
创建的具体步骤如下:
1.定义一个从CScrollView类派生的视图类CDrawView(至于为什么不是CView而是CScrollView,我接下来再跟你说)。
2.在dialog类上定义CDrawView类指针*m_pDrawView。
具体代码是什么:
2.我已经讲过对话框上画图的一个弊端,就是画图范围受控制范围控制,一不小心就会出界,如下图所示:
使用view类的好处是可以使用滚动条扩大绘图范围,这也是我从CScrollView类继承自定义view类的原因。
其实滚动条的处理并不容易,主要是添加滚动条后重新绘制新的显示范围比较麻烦。为此,我重读了佩佐德的名著《Windows程序设计》:建立更好的滚动》的内部章节。把里面的Win API代码改成MFC实现。因为我的程序输出文本,所以我将解释如何在文本输出视图窗口中创建滚动条。
要首先创建窗口的滚动条,必须在动态创建中指定两种窗口样式:WS_VSCROLLWS_HSCROLL。
其次,你需要指定窗口的滚动范围,具体来说就是滚动的最大高度和宽度。我的方法是在视图类中定义两个变量:
int m _ iMaxWidth//滚动的最大宽度
int m _ MaxNumLines//滚动的最大高度
您可以自定义滚动范围。
其次,您必须定义一些与文本大小相关的变量:
int m _ cxChar
int m _ cxCaps
int m _ cyChar
使用以下代码在OnCreate函数()中获取字体大小:
在OnSize函数(WM_SIZE消息映射函数)中设置滚动范围:
分别响应WM_VSCROLL消息和WM_HSCROLL消息,主要目的是设置滚动信息,决定是否更新窗口:
然后在OnPaint函数(WM_PAINT消息响应函数)中,可以得到当前的绘制范围:
效果图如下: