显示的字体的宽度和高度跟一个页面的高度和宽度的值有关。
例如,Richedit的字体的高度为16Pixel,宽度也为16Pixel,而Richedit的高度为160Pixel,宽度为64Pixel,那么,就可以计算出来了!每一行可以显示4个字符,一共可以显示10行,那么一页就要显示40个字符!
上面的仅仅是举例说明,没有实际的含义,实际上要考虑的东西太多了,例如行间距,字符间距,而且有的字符的字体大一些等等。
例如,Richedit的字体的高度为16Pixel,宽度也为16Pixel,而Richedit的高度为160Pixel,宽度为64Pixel,那么,就可以计算出来了!每一行可以显示4个字符,一共可以显示10行,那么一页就要显示40个字符!
上面的仅仅是举例说明,没有实际的含义,实际上要考虑的东西太多了,例如行间距,字符间距,而且有的字符的字体大一些等等。
首先要了解 Windows GDI。了解设备坐标和逻辑坐标。win操作系统的字体高度的度量单位是逻辑坐标系统,设备单位。他只负责知道windows在屏幕上的特定区域内有多少个像素。找些windows原理的书有详细的介绍文字排版问题。为了把设备单位转换为正文行,知道一行正文的高度。
HDC PaintDC := GetDC(hwnd);
GetTextMetrics(PaintDC, &TextMetrics);
ReleaseDC(hwnd, PaintDC);
TextHeigth := TextMetrics.tmHeight + TextMetrics.tmExternalLeading;
这样以后要确定一个设备单位和一行字符高度的比率。字符滚动多少行,设备单位就要滚动多少行。
得到比值滚动、翻页就好处理了。这需要精确的算法。
关键找些windows原理的书看看。也许有用。
我的意思是可视化的分页也就是做出如word那样的每页之间有很明显的分页效果,上下两页可以自如卷动的样子出来。
我可不可以这样,随着用户页数的增加,新增加一个控件(如RICHEDIT之类的),每个这样的控件用CANVAS作图来区别,在用户卷动时计算是否在CANVAS区。