- 浏览: 116329 次
文章分类
最新评论
-
myisland:
可以运行!一开始还以为要用本身就是透明背景的png呢,原来不是 ...
在CodeBlocks中用wxWidgets创建不规则窗口 -
lonerzf:
可以的。感谢。但是还有个问题,工程建立的时候有Configur ...
在CodeBlocks中用wxWidgets创建不规则窗口 -
鸵鸟大仙:
麻烦请问一下怎么在wxwidgets中加载msword.olb ...
利用wxwidgets操纵word -
dqifa:
Rat_boy 写道我现在也在做wxWidgets操作Word ...
利用wxwidgets操纵word -
Rat_boy:
我现在也在做wxWidgets操作Word的功能 但是搞了好久 ...
利用wxwidgets操纵word
1、从wxPrintout派生一个类Printout,类源码如下:
=====文件名:printout.h===== #ifndef PRINTOUT_H #define PRINTOUT_H #include <wx/wx.h> #include <wx/print.h> #include <wx/printdlg.h> #include "wxPrintMain.h" class wxPrintFrame; class Printout : public wxPrintout { public: // Printout(); Printout(wxPrintFrame* frame, const wxString &title = wxT("My printout")): wxPrintout(title) { m_frame=frame; } // virtual ~Printout(); virtual void GetPageInfo(int *minPage, int *maxPage,int *pageFrom, int *pageTo); virtual bool HasPage(int pageNum); virtual void DrawPageOne(wxDC*dc); virtual void DrawPageTwo(wxDC *dc); virtual bool OnBeginDocument(int startPage, int endPage); bool OnPrintPage(int page); protected: private: wxPrintFrame *m_frame; }; #endif // PRINTOUT_H
=====文件名:printout.cpp===== #include "printout.h" //Printout::Printout() //{ // //ctor //} //Printout::~Printout() //{ // //dtor //} bool Printout::OnBeginDocument(int startPage, int endPage) { if (!wxPrintout::OnBeginDocument(startPage, endPage)) return false; return true; } void Printout::GetPageInfo(int *minPage, int *maxPage,int *pageFrom, int *pageTo) { *minPage = 1; *maxPage = 2; *pageFrom = 1; *pageTo = 2; } bool Printout::HasPage(int pageNum) { return (pageNum >= 1 && pageNum <= 2); } void Printout::DrawPageOne(wxDC*dc) { // 下面的代码可以这样写只是因为我们知道图片的大小是200 x200 // 如果我们不知道的话,需要先计算图片的大小 float maxX = 200; float maxY = 200; // 让我们先设置至少个设备单位的边框50 float marginX = 50; float marginY = 50; // 将边框的大小增加到图片的周围 maxX += (2*marginX ); maxY += (2*marginY ); // 获取象素单位的当前设备上下文的大小 int w, h; dc->GetSize (&w, &h); //计算一个合适的缩放值 float scaleX =( float )(w/ maxX ); float scaleY =( float )(h/ maxY ); // 选择或者方向上较小的那个XY float actualScale = wxMin ( scaleX , scaleY ); // 计算图片在设备上的合适位置以便居中 float posX = ( float )(( w*(200*actualScale ))/2.0); float posY = ( float )(( h*(200*actualScale ))/2.0); // 设置设备平移和缩放 dc->SetUserScale ( actualScale , actualScale ); dc->SetDeviceOrigin ( ( long )posX , ( long ) posY ); // ok现在开始画画 dc->SetBackground(*wxWHITE_BRUSH ); dc->Clear(); // dc->SetFont ( wxGetApp ().m_testFont ); dc->SetBackgroundMode ( wxTRANSPARENT ); dc->SetBrush (*wxCYAN_BRUSH ); dc->SetPen (*wxRED_PEN ); dc->DrawRectangle (0, 30, 200 , 100); dc->DrawText ( wxT (" Rectangle 200 by 100 "), 40, 40); dc->SetPen ( wxPen (*wxBLACK ,0, wxDOT_DASH ) ); dc->DrawEllipse (50 , 140 , 100 , 50); dc->SetPen (*wxRED_PEN ); dc->DrawText ( wxT (" Test message : this is in 10 point text "),10, 180); } void Printout::DrawPageTwo(wxDC *dc) { int ppiScreenX, ppiScreenY; GetPPIScreen(&ppiScreenX, &ppiScreenY); int ppiPrinterX, ppiPrinterY; GetPPIPrinter(&ppiPrinterX, &ppiPrinterY); float scale = (float )((float )ppiPrinterX/(float)ppiScreenX); int pageWidth, pageHeight; int w, h; dc->GetSize(&w, &h); GetPageSizePixels(&pageWidth, &pageHeight); float overallScale = scale*( float )(w/(float)pageWidth); dc->SetUserScale(overallScale, overallScale) ; float logUnitsFactor = (float )(ppiPrinterX/(scale*25.4)); float logUnits = (float)(50*logUnitsFactor); dc->SetPen(*wxBLACK_PEN); dc->DrawLine(50, 250, (long)(50.0 + logUnits), 250); dc->DrawLine(50, 250, 50, (long)(250.0 + logUnits)); dc->SetBackgroundMode(wxTRANSPARENT); dc->SetBrush(*wxTRANSPARENT_BRUSH); // dc->SetFont(wxGetApp().m_testFont); dc->DrawText(wxT("Some test text"), 200, 300 ); } bool Printout::OnPrintPage(int page) { wxDC *dc = GetDC(); if (dc) { if (page == 1) { DrawPageOne(dc); } else if (page == 2) { DrawPageTwo(dc); } MapScreenSizeToPage(); dc->DrawText(wxString::Format(wxT("PAGE %d"), page), 0, 0); return true; } else return false; }
2、定义一个全局变量并初始化,使用后清理内存
wxPrintData *g_printData = NULL;
wxPageSetupDialogData* g_pageSetupData = NULL;
g_printData = new wxPrintData;
g_pageSetupData = new wxPageSetupDialogData;
delete g_printData;
delete g_pageSetupData;
3、实现打印预览
void wxPrintFrame::OnPrintPreviewClicked(wxCommandEvent& event)
{
wxPrintPreview *preview =new wxPrintPreview(new Printout(this), new Printout(this), g_printData);
if (!preview->IsOk())
{
delete preview;
wxMessageBox(_T("There was a problem previewing"),_T("打印预览"),wxOK);
return;
}
wxPreviewFrame *frame =new wxPreviewFrame(preview, this, wxT("打印预览实例"), wxPoint(100, 100), wxSize(600, 650));
frame->Centre(wxBOTH);
frame->Initialize();
frame->Show();
}
4、实现打印功能
void wxPrintFrame::OnPrintClicked(wxCommandEvent& event)
{
wxPrintDialogData printDialogData(* g_printData);
wxPrinter printer(&printDialogData);
Printout po(this, wxT("My printout"));
if (!printer.Print(this, &po, true /*prompt*/))
{
if (wxPrinter::GetLastError() == wxPRINTER_ERROR)
{
wxMessageBox(wxT("There was a problem printing. Perhaps your current printer is not set correctly?"));
}
else
{
wxMessageBox(wxT("You canceled printing"));
}
}
else
{
(*g_printData) = printer.GetPrintDialogData().GetPrintData();
}
}
5、实现打印设置
void wxPrintFrame::OnPrintSetupClicked(wxCommandEvent& event)
{
(*g_pageSetupData) = *g_printData;
wxPageSetupDialog pageSetupDialog(this, g_pageSetupData);
pageSetupDialog.ShowModal();
(*g_printData) = pageSetupDialog.GetPageSetupDialogData().GetPrintData();
(*g_pageSetupData) = pageSetupDialog.GetPageSetupDialogData();
}
- wxPrint.rar (1.6 MB)
- 下载次数: 24
发表评论
-
WX_DEFINE_ARRAY的使用
2018-03-20 12:07 666/**************************** ... -
wxBase64Encode和wxBase64Decode
2016-04-09 15:23 887#include <wx/base64.h> ... -
wxWidgets中 wxButton实现自动点击
2015-06-30 12:59 1106之前在用wxSocket通讯的时候,EVT_SOCKET事件 ... -
按键转换
2015-03-15 12:27 9911 void PopTextCtrl::OnChar(wxK ... -
获取当前路径
2014-03-09 16:51 694#include <wx/stdpaths.h> ... -
程序只运行一个实例,并将前一个实例提到前台
2014-02-28 18:28 925wxWidgets提供了一个用来检测是否只有一个实例(ins ... -
通过重载实现修改wxWidgets文本处理框wxTextCtrl和wxRichTextCtrl的右键弹出菜单
2014-02-27 13:44 2433wxWidget中这块是写死的,这让我感到非常 ... -
过滤wxTextCtrl控件输入的两种方法
2014-02-27 13:40 2016以下两种方法实现wxTextCtrl只接收0-9的数字. ... -
wxBoxSizer,wxFlexGridSizer,wxGridBagSizer,wxGridSizer使用示例
2014-02-26 10:44 1878wxBoxSizer,wxFlexGridSizer,wx ... -
wxWidgets类库结构图
2014-02-26 09:08 1227自从2.5.0开始,wxWidgets既可以编译成单一的代 ... -
wxWidgets框架下基于wxDialog程序的标准退出方法
2014-02-25 16:56 1550退出程序的标准方法 ... -
在exe程序中嵌入图片
2012-10-20 23:44 16091、利用Bin2C将图片转换成“*.c”文件; 2、包含“* ... -
怎样解决静态编译对mingwm10.dll的依赖?
2012-10-15 14:14 1182使用CodeBlocks+wxWidgets2.9.4编写的静 ... -
wxRegEx的使用
2012-10-09 20:35 1638#include <wx/regex.h>#inc ... -
wxWidgets中的wxTimer使用
2012-09-26 15:51 22691、包含头文件: #include <wx/ti ... -
使用wxStringTokenizer分割字符串
2012-08-30 21:51 2398//wxStringTokenizer::wxStringTo ... -
给图片添加图片水印
2012-08-20 10:21 841写在开始 不能用代码同时实现半透明和不规则形状的水印,只能选 ... -
绘制图形并填充
2012-08-17 13:32 985=====文件名:DrawShape.h=== ... -
wxMathPlot
2012-08-17 09:39 1252wxMathPlot wxMathPlot ... -
遍历文件夹中所有文件(wxWidgets)
2012-08-13 16:49 1613包含头文件: #include <wx/dir.h&g ...
相关推荐
"所见即所得打印"(What You See Is What You Get,简称WYSIWYG)是一种在计算机软件中编辑文档的方式,它使得用户在屏幕上看到的内容与最终打印出来的效果几乎完全一致。这种技术在打印和排版领域尤为重要,因为它...
配置CodeBlocks与wxWidgets的集成,可以让你在CodeBlocks中创建和管理使用wxWidgets库的项目。以下是一个详细步骤的概述: 1. **安装CodeBlocks**:首先,你需要在D盘解压缩`codeblocks-20.03`文件,确保不改变其...
Codeblocks+wxWidgets安装及编译
这个压缩包文件“wxWidgets-3.0.4 mingw32-gcc codeblocks可用版本 自编译”是为Windows平台设计的,特别是为那些使用MinGW32编译器和Code::Blocks集成开发环境(IDE)的开发者准备的。 wxWidgets库包含了丰富的...
在Windows环境下开发C++图形用户界面应用程序时,wxWidgets是一个强大的跨平台库,它允许开发者使用统一的API来编写代码,同时在多个操作系统上运行。本指南将详细介绍如何利用MinGW(Minimalist GNU for Windows)...
codeblocks的最新版本只配置支持wxwidgets3.0.0,解决在用codeblocks新建工程时,没有wxwidgets版本可选的问题,将wizard.script文件直接覆盖CB安装目录下的CodeBlocks\share\CodeBlocks\templates\wizard\wxwidgets...
结合这两个组件,开发者可以使用CodeBlocks 8.02作为开发环境,利用wxWidgets 2.8.10库创建功能丰富的、跨平台的C++应用。首先,需要安装`codeblocks-8.02mingw-setup.exe`,然后在CodeBlocks中配置wxWidgets的路径...
这表明文章的主要目的是指导开发者如何设置他们的开发环境,以便能够使用wxWidgets进行跨平台的GUI应用程序开发。 知识点详解: ### 1. wxWidgets简介 wxWidgets是一个强大的跨平台软件开发库,最初于1992年以...
Windows 上配置 Code::Blocks + wxWidgets 在本篇文章中,我们将详细介绍如何在 ...配置 Code::Blocks + wxWidgets 需要仔细地按照步骤进行安装和配置,这样才能确保能够正确地使用 wxWidgets 库和 Code::Blocks IDE。
这个压缩包文件“wxWidgets”包含了已经使用Mingw编译好的wxWidgets库,特别针对CodeBlocks 8.02版本进行了适配。这意味着你可以直接将这些库文件导入到CodeBlocks中,而无需自行编译wxWidgets,从而节省了大量的...
**wxWidgets 概述** wxWidgets 是一个开源的 C++ 库,它允许开发者使用标准的 C++ 编程语法创建跨平台的图形...通过不断学习和实践,开发者可以利用 wxWidgets 实现自己的创新想法,同时享受到跨平台开发带来的便利。
通过这个教程,你已经了解了如何在`CodeBlocks`中使用`wxWidgets`库创建一个带有透明效果的窗口。这只是一个基本的示例,实际应用中你还可以根据需求添加更多的功能,如控件、事件处理等。继续深入学习`wxWidgets`和...
CodeBlocks和wxWidgets的安装、配置及编译 CodeBlocks是一款功能强大的集成开发环境(IDE...安装和配置CodeBlocks、wxWidgets需要注意许多细节,需要一步步按照正确的步骤进行安装和配置,才能确保正确的编译和使用。
这个是一个外国人写的在CodeBlocks中建立的wxWidgets3.1工程的向导脚本,一放进去直接覆盖掉。
在本文中,我们将深入探讨如何使用wxWidgets库来实现自定义菜单功能。wxWidgets是一个流行的跨平台C++库,它提供了丰富的GUI(图形用户界面)组件,使得开发者能够轻松地创建具有吸引力的桌面应用程序。 首先,我们...
5. **使用CodeBlocks**:现在,你可以使用新编译的CodeBlocks IDE创建C++项目,并选择wxWidgets作为GUI库。CodeBlocks将自动处理项目设置,使得链接到wxWidgets库变得简单。 通过源码编译CodeBlocks和wxWidgets,...
wxWidgets是一个成熟的跨平台C++库,它允许开发者使用一套代码来创建图形用户界面(GUI)程序,这些程序能够在Windows、Linux、Mac OS X等多个操作系统上运行。在深入了解如何使用wxWidgets进行程序开发之前,有必要...
总之,通过这个项目,你可以学习到如何在CodeBlocks中集成和使用wxWidgets,理解GUI编程的基本原理,掌握统计计算的实现方法,以及实践面向对象编程和C++的基础知识。这是一个很好的动手实践项目,对于提升编程技能...