有谁知道如何在MS Word中插入分页符?当您编写一些文本并且程序决定需要新页面时,它会插入更大的中断和新页面。
我在MS开发人员论坛上问了这个问题,我得到了关于RichEditTextBlocks
的答案 - 我应该将其与RichEditTextBlockOverflow
一起使用。但是,这对于阅读多页文本是一个很好的建议。 RichTextBox
有什么类似的内容吗?
我正在用C#编写我的Windows Store App程序。但我认为这个问题的技术在WPF或WinForms中是相同的。我搜索过,但找不到解决方案。
非常感谢您提前
答案 0 :(得分:0)
我相信你寻求flow document。我记得,在WPF和Winforms基本控件库中以某种形式支持流文档。
答案 1 :(得分:0)
查看类似问题here的答案:
MVP建议:
RTB没有“分页”这样的东西。只有在打印到纸张时,分页符才有意义。你需要像Word这样的文字处理器。 Google EM_FORMATRANGE,了解如何打印RTB的内容。
这个提案得到了一些投票:
richTextBox1.SelectedRtf = @"{\rtf1 \par \page}";
Windows Desktop Dev guide中包含此代码的更多详细信息:
以下示例代码打印富编辑控件的内容 到指定的打印机。
// hwnd is the HWND of the rich edit control.
// hdc is the HDC of the printer. This value can be obtained for the
// default printer as follows:
//
// PRINTDLG pd = { sizeof(pd) };
// pd.Flags = PD_RETURNDC | PD_RETURNDEFAULT;
//
// if (PrintDlg(&pd))
// {
// HDC hdc = pd.hDC;
// ...
// }
BOOL PrintRTF(HWND hwnd, HDC hdc)
{
DOCINFO di = { sizeof(di) };
if (!StartDoc(hdc, &di))
{
return FALSE;
}
int cxPhysOffset = GetDeviceCaps(hdc, PHYSICALOFFSETX);
int cyPhysOffset = GetDeviceCaps(hdc, PHYSICALOFFSETY);
int cxPhys = GetDeviceCaps(hdc, PHYSICALWIDTH);
int cyPhys = GetDeviceCaps(hdc, PHYSICALHEIGHT);
// Create "print preview".
SendMessage(hwnd, EM_SETTARGETDEVICE, (WPARAM)hdc, cxPhys/2);
FORMATRANGE fr;
fr.hdc = hdc;
fr.hdcTarget = hdc;
// Set page rect to physical page size in twips.
fr.rcPage.top = 0;
fr.rcPage.left = 0;
fr.rcPage.right = MulDiv(cxPhys, 1440, GetDeviceCaps(hDC, LOGPIXELSX));
fr.rcPage.bottom = MulDiv(cyPhys, 1440, GetDeviceCaps(hDC, LOGPIXELSY));
// Set the rendering rectangle to the pintable area of the page.
fr.rc.left = cxPhysOffset;
fr.rc.right = cxPhysOffset + cxPhys;
fr.rc.top = cyPhysOffset;
fr.rc.bottom = cyPhysOffset + cyPhys;
SendMessage(hwnd, EM_SETSEL, 0, (LPARAM)-1); // Select the entire contents.
SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&fr.chrg); // Get the selection into a CHARRANGE.
BOOL fSuccess = TRUE;
// Use GDI to print successive pages.
while (fr.chrg.cpMin < fr.chrg.cpMax && fSuccess)
{
fSuccess = StartPage(hdc) > 0;
if (!fSuccess) break;
int cpMin = SendMessage(hwnd, EM_FORMATRANGE, TRUE, (LPARAM)&fr);
if (cpMin <= fr.chrg.cpMin)
{
fSuccess = FALSE;
break;
}
fr.chrg.cpMin = cpMin;
fSuccess = EndPage(hdc) > 0;
}
SendMessage(hwnd, EM_FORMATRANGE, FALSE, 0);
if (fSuccess)
{
EndDoc(hdc);
}
else
{
AbortDoc(hdc);
}
return fSuccess;
}