Win32rich edit control有一个名为EM_FORMATRANGE的消息,可以将控件的内容呈现到任意设备上下文。这通常用于打印或打印预览,但可以用于任何设备上下文。此消息接受名为FORMATRANGE的结构,其定义如下:

typedef struct _formatrange {
  HDC       hdc;
  HDC       hdcTarget;
  RECT      rc;
  RECT      rcPage;
  CHARRANGE chrg;
} FORMATRANGE;

rcrcPage的唯一文档如下:
rc:要渲染到的区域。单位以细枝为单位。
rcPage:呈现设备上页面的整个区域。单位以细枝为单位。
rcrcPage的值可以通过使用GetDeviceCaps获得。
我并不完全清楚rcPage和rc之间的区别。我在网上看到的代码示例似乎将这两个设置为同一个矩形。微软自己的示例How to Print the Contents of Rich Edit Controls完全无法初始化rcPage,实际上将未定义的数据传递给富编辑控件。
富编辑控件是否也使用了rcPage?我看不出为什么第二个矩形可能对影响此命令的行为有用,那么它的作用是什么?有人能举例说明rcrcPage之间的区别吗?

最佳答案

链接到的示例实际上将RCPage部分设置为打印机的最大尺寸,例如文档的确切内容,而RC被设置为页面的实际可打印部分,这是不相同的,通常打印机在页面周围有一个不能物理打印的边框。之所以有两个原因,可能是因为某些东西绝对位于页面上,但您只是部分呈现其中的一部分,因此需要这些信息来正确偏移元素。

09-07 10:46