最後に、あなたが望むものをprintDCに描画する方が簡単かもしれません。ただし、BLITを使用して、パネルに表示されているものをすべてを再描画することなくPrintDCにコピーすることができます。
wxClientDC frameDC(wxGetApp().GetTopWindow());
GetDC()->StretchBlit(0,0,5000,5000,
&frameDC, 0, 0, 500,500);
これはwondow printerDCにトップレベルのアプリケーションに表示されるすべてのものをコピーします。
ので、wxPrintout ::のオーバーライドであなたはこのような何かを書くことができますOnPrintPage。
印刷プレビューウィンドウは、ポップアップするときにトップレベルのフレームの内容を消してしまう傾向があります。あなたが大規模なモニターと小さなアプリケーションのウィンドウを持っている場合、あなたは彼らが
void MyFrame::OnPrint(wxCommandEvent&)
{
wxPrintPreview *preview = new wxPrintPreview(new MyPrintout(this), new MyPrintout(this));
wxPreviewFrame *frame = new wxPreviewFrame(preview, this,
"Demo Print Preview",
wxPoint(600, 100), // move preview window out of the way
wxSize(500, 500));
//frame->Centre(wxBOTH);
frame->Initialize();
frame->Show(true);
を重ならないように、より良いアプローチからBLIT、その後、印刷プレビューをポップアップする前にmemoryDCにフレーム表示をブリットすることであろう事を手配することができますMemoryDCをprinterDCに転送します。これらの線に沿って
何か:
void MyFrame::OnPrint(wxCommandEvent&)
{
// save the display before it is clobbered by the print preview
static wxMemoryDC memDC;
static wxBitmap bitmap(500,500);
memDC.SelectObject(bitmap);
wxClientDC frameDC(wxGetApp().GetTopWindow());
memDC.Blit(0,0,5000,5000,
&frameDC, 0, 0);
wxPrintPreview *preview = new wxPrintPreview(new MyPrintout(memDC), new MyPrintout(memDC));
wxPreviewFrame *frame = new wxPreviewFrame(preview, this,
"Demo Print Preview",
wxPoint(600, 100), // move preview window out of the way
wxSize(500, 500));
frame->Centre(wxBOTH);
frame->Initialize();
frame->Show(true);
}
、その後
class MyPrintout : public wxPrintout
{
wxMemoryDC & myMemDC;
public:
MyPrintout(wxMemoryDC & memDC)
: myMemDC(memDC)
{
}
bool OnPrintPage(int PageNum)
{
// copy saved dispay to printer DC
GetDC()->StretchBlit(0,0,5000,5000,
&myMemDC, 0, 0, 500,500);
return true;
}
};
私はあなたが言っているのか理解が、私はしても表示されていないものを印刷できるようにしたいと思います。ドロールーチンにDCを送り、DCを満たすことができるのは素晴らしいことです。コントロールを書き直すことになるので(私は幸いなことに、これは主にwxGridsです)、私が利用できない描画コードを持つことは残念です。 – ChrisMcB