`
dqifa
  • 浏览: 116370 次
社区版块
存档分类
最新评论

利用wxwidgets操纵word

 
阅读更多

最近在学习怎么用wxwidgets来操纵word,寻找之中发现MedeoSoftware,里面有很多wxwidgets的用法,不过我最关心的还是其中的dmxMSWordDocument,操作word的方法比较全,很值得学习。代码如下(并附上全部源码):

 

 

dmxMSWordDocument.h

#ifndef _DMX_MSWORD_DOCUMENT_H_
#define _DMX_MSWORD_DOCUMENT_H_

#include "wxCommon.h"

////////////////////////////////////////////////////////////////////////////////
// dmxMSWordFont
////////////////////////////////////////////////////////////////////////////////

struct dmxMSWordFont
{
	long pointsize;
	bool bold;
	bool italic;
	wxString font_name;
	wxColour color;

	dmxMSWordFont(long a_pointsize = 12, bool a_bold = false, bool a_italic = false,
				  const wxString &ar_font_name = "Times New Roman",
				  const wxColour &ar_color = wxColour(0, 0, 0))
	:	pointsize(a_pointsize),
		bold(a_bold),
		italic(a_italic),
		font_name(ar_font_name),
		color(ar_color)
	{}

	dmxMSWordFont(const dmxMSWordFont &ar_font)
	:	pointsize(ar_font.pointsize),
		bold(ar_font.bold),
		italic(ar_font.italic),
		font_name(ar_font.font_name),
		color(ar_font.color)
	{}

	dmxMSWordFont& operator=(const dmxMSWordFont &ar_font)
	{
		if (&ar_font != this) {
			pointsize = ar_font.pointsize;
			bold = ar_font.bold;
			italic = ar_font.italic;
			font_name = ar_font.font_name;
			color = ar_font.color;
		}
		return *this;
	}

	bool operator==(const dmxMSWordFont &ar_font) const
	{
		if (pointsize != ar_font.pointsize ||
			bold != ar_font.bold ||
			italic != ar_font.italic ||
			font_name != ar_font.font_name ||
			color != ar_font.color)
			return false;
		else
			return true;
	}

	bool operator!=(const dmxMSWordFont &ar_font) const
	{
		return !operator==(ar_font);
	}
};

extern dmxMSWordFont gc_DefaultMSWordFont;

////////////////////////////////////////////////////////////////////////////////
// dmxMSWordDocument
////////////////////////////////////////////////////////////////////////////////

class dmxMSWordDocument
{
public: 
	enum Alignment
	{
		c_ALIGN_LEFT	= 0,
		c_ALIGN_CENTER	= 1,
		c_ALIGN_RIGHT	= 2,
		c_ALIGN_JUSTIFY	= 3
	};

	enum PageOrientation
	{
		c_PORTRAIT,
		c_LANDSCAPE
	};

private:
	bool m_ok;
	wxAutomationObject m_word;
	wxAutomationObject m_document;
	wxAutomationObject *mp_table;

	struct TableBufferElement
	{
		wxString Text;
		Alignment TextAlignment;
		dmxMSWordFont Font;
	};

	typedef std::vector<TableBufferElement> TableLineBuffer;
	std::vector<TableLineBuffer> m_table_buffer;
	
public:
	dmxMSWordDocument(const wxString &ar_name = wxEmptyString, bool a_visible = true);
	~dmxMSWordDocument();

	bool IsOk(void) const { return m_ok; }

	void Show(bool a_show = true);

	void Close(void);
	bool SaveAs(const wxString &ar_file_name);

	static bool IsAccessible(void);

	void AddParagraph(Alignment a_alignment = c_ALIGN_JUSTIFY, 
					  const dmxMSWordFont &ar_font = gc_DefaultMSWordFont);

	void AddTextParagraph(const wxString &ar_text, Alignment a_alignment = c_ALIGN_JUSTIFY,
						  const dmxMSWordFont &ar_font = gc_DefaultMSWordFont);

	void AddBitmap(const wxBitmap &ar_image, Alignment a_alignment = c_ALIGN_JUSTIFY);
	void AddPictureFromFile(const wxString &ar_file_name, Alignment a_alignment = c_ALIGN_JUSTIFY);

	bool CreateTableFromString(const wxString &ar_text, long a_cols, long a_rows,
							   const wxChar *ap_separator = "|",
							   long a_table_format1 = 22, // 耱桦?纛痨囹桊钼囗? 22 = "彦蜿?蜞犭桷?7"
							   long a_table_format2 = 16); // 羼腓 礤 镱塍麒腩顸, 蝾 稃蜞屐? 耱桦?纛痨囹桊钼囗? 16 = "彦蜿?蜞犭桷?1"

	void InitTableBuffer(long a_cols, long a_rows);
	void SetTableBufferCellText(long a_col, long a_row, const wxString &ar_text,
								Alignment a_alignment = c_ALIGN_JUSTIFY, 
								const dmxMSWordFont &ar_font = gc_DefaultMSWordFont);
	bool CreateTableFromBuffer(void);

	void AddTable(long a_cols, long a_rows);
	void AddTableCellText(long a_col, long a_row, const wxString &ar_text,
						  Alignment a_alignment = c_ALIGN_JUSTIFY, 
						  const dmxMSWordFont &ar_font = gc_DefaultMSWordFont);
	void AddPictureToTableCell
	(
		long a_col, long a_row, 
		const wxString &ar_file_name,
		Alignment a_alignment
	);
	void AddBitmapToTableCell
	(
		long a_col, long a_row, 
		const wxBitmap &ar_bitmap,
		Alignment a_alignment
	);
	void PasteFromClipboardToTableCell
	(
		long a_col, long a_row, 
		Alignment a_alignment
	);
	
	void Paste(Alignment a_alignment);
	void SetPageOrientation(PageOrientation a_orientation);

	void SetPageLeftMargin(double a_margin_sm);
	void SetPageRightMargin(double a_margin_sm);
	void SetPageTopMargin(double a_margin_sm);
	void SetPageBottomMargin(double a_margin_sm);

	void SetPageHeaderDistance(double a_margin_sm);
	void SetPageFooterDistance(double a_margin_sm);

private:
	void mf_SetPageMargin(const wxString &ar_margin_name, double a_margin);
};

#endif

 

 

dmxMSWordDocument.cpp

#include "wxCommon.h"
#include "dmxMSWordDocument.h"
#include "Useful.h"
#include "message_dialog.h"
#include "wxTranslation.h"
#include "wxstringutil.h"

////////////////////////////////////////////////////////////////////////////////
// dmxMSWordFont
////////////////////////////////////////////////////////////////////////////////

dmxMSWordFont gc_DefaultMSWordFont = dmxMSWordFont();

////////////////////////////////////////////////////////////////////////////////
// dmxMSWordDocument
////////////////////////////////////////////////////////////////////////////////

dmxMSWordDocument::dmxMSWordDocument(const wxString &ar_name, bool a_visible)
:	m_ok(false),
	mp_table(NULL)
{
	// 青矬耜噱?MSWord
	if (!m_word.CreateInstance("Word.Application"))
		return;

	m_ok = true;

	m_word.PutProperty("Visible", a_visible);
	m_word.CallMethod("Documents.Add");
	m_word.GetObject(m_document, "ActiveDocument");

	wxAutomationObject footer(m_document.CallMethod("Sections.Last.Footers.Item", 3L).GetVoidPtr());
	footer.CallMethod("PageNumbers.Add");

	if (!ar_name.IsEmpty())
		m_document.PutProperty("Name", ar_name);

	m_document.PutProperty("Content.Font.Name", gc_DefaultMSWordFont.font_name);
	m_document.PutProperty("Content.Font.Size", gc_DefaultMSWordFont.pointsize);
	m_document.PutProperty("Content.Font.Bold", gc_DefaultMSWordFont.bold);
	m_document.PutProperty("Content.Font.Italic", gc_DefaultMSWordFont.italic);
	m_document.PutProperty("Content.Font.Color", (long)RGB(gc_DefaultMSWordFont.color.Red(), 
														gc_DefaultMSWordFont.color.Green(), 
														gc_DefaultMSWordFont.color.Blue()));
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::Show(bool a_show)
{
	m_word.PutProperty("Visible", a_show);
	m_word.CallMethod("Word.ActiveWindow.Activate");
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::Close(void)
{
	m_word.CallMethod("Quit", false);
}

//------------------------------------------------------------------------------

bool dmxMSWordDocument::SaveAs(const wxString &ar_file_name)
{
	m_document.CallMethod("SaveAs", ar_file_name);
	return true;
}

//------------------------------------------------------------------------------

dmxMSWordDocument::~dmxMSWordDocument()
{
	if (mp_table) {
		delete mp_table;
		mp_table = NULL;
	}
}

//------------------------------------------------------------------------------

bool dmxMSWordDocument::IsAccessible(void)
{
	wxAutomationObject word;
	bool accessible = word.CreateInstance("Word.Application");
	if (accessible)
		word.CallMethod("Word.Close");

	return accessible;
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::AddParagraph(Alignment a_alignment, const dmxMSWordFont &ar_font)
{
	m_document.CallMethod("Content.InsertParagraphAfter");

	wxAutomationObject paragraph;
	m_document.GetObject(paragraph, "Paragraphs.Last");

	paragraph.PutProperty("Alignment", long(a_alignment));
	paragraph.PutProperty("SpaceAfter", long(0));
	paragraph.PutProperty("SpaceBefore", long(0));

	paragraph.PutProperty("Range.Font.Name", ar_font.font_name);
	paragraph.PutProperty("Range.Font.Size", ar_font.pointsize);
	paragraph.PutProperty("Range.Font.Bold", ar_font.bold);
	paragraph.PutProperty("Range.Font.Italic", ar_font.italic);
	paragraph.PutProperty("Range.Font.Color", (long)RGB(ar_font.color.Red(), 
														ar_font.color.Green(), 
														ar_font.color.Blue()));
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::AddTextParagraph(const wxString &ar_text, Alignment a_alignment,
										 const dmxMSWordFont &ar_font)
{
	m_document.CallMethod("Content.InsertAfter", ar_text);

	wxAutomationObject paragraph;
	m_document.GetObject(paragraph, "Paragraphs.Last");

	paragraph.PutProperty("Alignment", long(a_alignment));
	paragraph.PutProperty("SpaceAfter", long(0));
	paragraph.PutProperty("SpaceBefore", long(0));

	paragraph.PutProperty("Range.Font.Name", ar_font.font_name);
	paragraph.PutProperty("Range.Font.Size", ar_font.pointsize);
	paragraph.PutProperty("Range.Font.Bold", ar_font.bold);
	paragraph.PutProperty("Range.Font.Italic", ar_font.italic);
	paragraph.PutProperty("Range.Font.Color", (long)RGB(ar_font.color.Red(), 
														ar_font.color.Green(), 
														ar_font.color.Blue()));

	AddParagraph();
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::AddBitmap(const wxBitmap &ar_bitmap, Alignment a_alignment)
{
	wxOpenClipboard();
	wxEmptyClipboard();
	wxSetClipboardData(wxDF_BITMAP, &ar_bitmap, ar_bitmap.GetWidth(), ar_bitmap.GetHeight());
	wxCloseClipboard();

	Paste(a_alignment);
}


//------------------------------------------------------------------------------

void dmxMSWordDocument::AddPictureFromFile(const wxString &ar_file_name, Alignment a_alignment)
{
	m_document.CallMethod("Content.InsertAfter", wxEmptyString);

	wxAutomationObject paragraph;
	if (!m_document.GetObject(paragraph, "Paragraphs.Last"))
		return;

	paragraph.PutProperty("Alignment", long(a_alignment));
	paragraph.PutProperty("SpaceAfter", long(0));
	paragraph.PutProperty("SpaceBefore", long(0));
	wxVariant range = paragraph.GetProperty("Range");

	wxAutomationObject shapes;
	m_document.GetObject(shapes, "InlineShapes");

	wxVariant no_link_to_file(false);
	wxVariant save_with_document(true);
	shapes.CallMethod("AddPicture", ar_file_name, no_link_to_file, save_with_document, range);
}

//------------------------------------------------------------------------------

bool dmxMSWordDocument::CreateTableFromString(const wxString &ar_text, 
											  long a_cols, long a_rows,
											  const wxChar *ap_separator,
											  long a_table_format1,
											  long a_table_format2)
{
	wxAutomationObject paragraph;
	m_document.GetObject(paragraph, "Paragraphs.Last");

	paragraph.CallMethod("Range.InsertAfter", ar_text);

	std::vector<wxVariant> args;
	args.push_back(wxVariant(dmxT("|"), dmxT("Separator")));
	args.push_back(wxVariant(a_rows, dmxT("NumRows")));
	args.push_back(wxVariant(a_cols, dmxT("NumColumns")));
	args.push_back(wxVariant(true, dmxT("AutoFit")));
	args.push_back(wxVariant(0L, dmxT("AutoFitBehavior")));
	args.push_back(wxVariant(1L, dmxT("DefaultTableBehavior")));

	wxVariant result;
	if (a_table_format1 < 0)
	{
		// 杨玟噱?蜞犭桷??纛痨囹铎 镱 箪铍鬣龛?
		paragraph.CallMethod("Range.ConvertToTable", args.size(), &(args[0]));
	}
	else
	{
		// 消蜞屐? 耦玟囹?蜞犭桷?镥疴 玎溧眄 纛痨囹铎
		args.push_back(wxVariant(a_table_format1, dmxT("Format")));
		result = paragraph.CallMethod("Range.ConvertToTable", args.size(), &(args[0]));
		if (result.IsNull()) 
		{
			// 羼腓 礤 镱塍麒腩顸, 蝾 稃蜞屐? 耦玟囹?怛铕 玎溧眄 纛痨囹铎
			args.back() = wxVariant(a_table_format2, dmxT("Format"));
			if (a_table_format2 > 0)
				result = paragraph.CallMethod("Range.ConvertToTable", args.size(), &(args[0]));

			if (result.IsNull())
				// 眢, 珥圜栩, 耦怦屐 礤 镱塍麒腩顸
				return false;
		}
	}

	AddParagraph();

	return true;
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::InitTableBuffer(long a_cols, long a_rows)
{
	m_table_buffer.resize(a_rows, TableLineBuffer(a_cols, TableBufferElement()));
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::SetTableBufferCellText(long a_col, long a_row, 
											   const wxString &ar_text,
											   Alignment a_alignment, 
											   const dmxMSWordFont &ar_font)
{
	TableBufferElement element;
	element.Text = ar_text;
	element.Font = ar_font;
	element.TextAlignment = a_alignment;

	m_table_buffer[a_row][a_col] = element;
}

//------------------------------------------------------------------------------

bool dmxMSWordDocument::CreateTableFromBuffer(void)
{
	dmxUInt32 rows = m_table_buffer.size();
	if (rows == 0)
		return true;

	dmxUInt32 cols = m_table_buffer[0].size();
	if (cols == 0)
		return true;

	// 灶痨桊箦?耱痤牦 ?耦玟噱?蜞犭桷?
	wxString table_string;
	for (dmxUInt32 j = 0; j < rows; j++)
		for (dmxUInt32 i = 0; i < cols; i++) {
			table_string << m_table_buffer[j][i].Text;
			if (j < rows - 1  || i < cols - 1)
				table_string << '|';
		}

	if (!CreateTableFromString(table_string, cols, rows, "|")) {
		dmxMessageBox(NULL, wxTR("tr_WordDocument", "MsgCreateTableError"), dmxMessageDialog::c_ICON_ERROR);
		return false;
	}

	// 灶痨囹桊箦?麇殛?蜞犭桷?
	wxVariant index = m_document.GetProperty("Tables.Count");
	wxAutomationObject table(m_document.CallMethod("Tables.Item", index).GetVoidPtr());

	for (dmxUInt32 j = 0; j < rows; j++)
		for (dmxUInt32 i = 0; i < cols; i++) {
			if (m_table_buffer[j][i].TextAlignment == c_ALIGN_JUSTIFY &&
				m_table_buffer[j][i].Font == gc_DefaultMSWordFont) 
				continue;
			
			wxAutomationObject cell(table.CallMethod("Cell", long(j + 1), long(i + 1)).GetVoidPtr());

			if (m_table_buffer[j][i].TextAlignment != c_ALIGN_JUSTIFY)
				cell.PutProperty("Range.Paragraphs.Alignment", long(m_table_buffer[j][i].TextAlignment));
			cell.PutProperty("Range.Paragraphs.SpaceAfter", long(0));
			cell.PutProperty("Range.Paragraphs.SpaceBefore", long(0));

			dmxMSWordFont font = m_table_buffer[j][i].Font;
			if (font.font_name != gc_DefaultMSWordFont.font_name)
				cell.PutProperty("Range.Font.Name", font.font_name);
			if (font.pointsize != gc_DefaultMSWordFont.pointsize)
				cell.PutProperty("Range.Font.Size", font.pointsize);
			if (font.bold != gc_DefaultMSWordFont.bold)
				cell.PutProperty("Range.Bold", font.bold);
			if (font.italic != gc_DefaultMSWordFont.italic)
				cell.PutProperty("Range.Font.Italic", font.italic);
			if (font.color!= gc_DefaultMSWordFont.color)
				cell.PutProperty("Range.Font.Color", (long)RGB(font.color.Red(), 
															   font.color.Green(), 
															   font.color.Blue()));
		}

	return true;
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::AddTable(long a_cols, long a_rows)
{
	if (mp_table) {
		delete mp_table;
		mp_table = NULL;
	}

	dmxMSWordFont dummy_font(6, false, false, "Arial");
	AddParagraph(dmxMSWordDocument::c_ALIGN_CENTER, dummy_font);

	wxAutomationObject paragraph;
	if (m_document.GetObject(paragraph, "Paragraphs.Last"))
	{
		paragraph.PutProperty("PointSize", long(6));
	}


	wxVariant args[3];
	args[0] = m_document.GetProperty("Paragraphs.Last.Range");
	args[1] = a_rows;
	args[2] = a_cols;

	m_document.CallMethod("Tables.Add", 3, args);

	wxVariant index = m_document.GetProperty("Tables.Count");
	mp_table = new wxAutomationObject(m_document.CallMethod("Tables.Item", index).GetVoidPtr());
	mp_table->PutProperty("Borders.InsideLineStyle", 1L);// = wdLineStyleSingle
    mp_table->PutProperty("Borders.OutsideLineStyle", 1L);
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::AddTableCellText(long a_col, long a_row, 
										 const wxString &ar_text, Alignment a_alignment, 
										 const dmxMSWordFont &ar_font)
{
	if (!mp_table)
		return;

	wxAutomationObject cell(mp_table->CallMethod("Cell", a_row, a_col).GetVoidPtr());
	
	cell.PutProperty("Range.Paragraphs.Alignment", long(a_alignment));
	cell.PutProperty("Range.Paragraphs.SpaceAfter", long(0));
	cell.PutProperty("Range.Paragraphs.SpaceBefore", long(0));

	if (ar_font != gc_DefaultMSWordFont) {
		cell.PutProperty("Range.Font.Name", ar_font.font_name);
		cell.PutProperty("Range.Font.Size", ar_font.pointsize);
		cell.PutProperty("Range.Bold", ar_font.bold);
		cell.PutProperty("Range.Font.Italic", ar_font.italic);
		cell.PutProperty("Range.Font.Color", (long)RGB(ar_font.color.Red(), 
													   ar_font.color.Green(), 
													   ar_font.color.Blue()));
	}

	cell.CallMethod("Range.InsertAfter", ar_text);
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::AddPictureToTableCell
(
	long a_col, long a_row, 
	const wxString &ar_file_name,
	Alignment a_alignment
)
{
	if (!mp_table)
		return;

	wxAutomationObject cell(mp_table->CallMethod("Cell", a_row, a_col).GetVoidPtr());
	cell.CallMethod("Range.InsertAfter", wxEmptyString);

	wxAutomationObject paragraph;
	if (!cell.GetObject(paragraph, "Range.Paragraphs.Last"))
		return;

	paragraph.PutProperty("Alignment", long(a_alignment));
	paragraph.PutProperty("SpaceAfter", long(0));
	paragraph.PutProperty("SpaceBefore", long(0));
	wxVariant range = paragraph.GetProperty("Range");

	wxAutomationObject shapes;
	m_document.GetObject(shapes, "InlineShapes");

	wxVariant no_link_to_file(false);
	wxVariant save_with_document(true);
	shapes.CallMethod("AddPicture", ar_file_name, no_link_to_file, save_with_document, range);
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::AddBitmapToTableCell
(
	long a_col, long a_row, 
	const wxBitmap &ar_bitmap,
	Alignment a_alignment
)
{
	if (!mp_table)
		return;

	wxAutomationObject cell(mp_table->CallMethod("Cell", a_row, a_col).GetVoidPtr());

	wxAutomationObject range;
	if (!cell.GetObject(range, "Range"))
		return;

	wxOpenClipboard();
	wxEmptyClipboard();
	wxSetClipboardData(wxDF_BITMAP, &ar_bitmap, ar_bitmap.GetWidth(), ar_bitmap.GetHeight());
	wxCloseClipboard();

	range.CallMethod("Paste");
	range.PutProperty("Alignment", long(a_alignment));
	range.PutProperty("SpaceAfter", long(0));
	range.PutProperty("SpaceBefore", long(0));
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::PasteFromClipboardToTableCell
(
	long a_col, long a_row, 
	Alignment a_alignment
)
{
	if (!mp_table)
		return;

	wxAutomationObject cell(mp_table->CallMethod("Cell", a_row, a_col).GetVoidPtr());

	wxAutomationObject range;
	if (!cell.GetObject(range, "Range"))
		return;

	range.CallMethod("Paste");
	range.PutProperty("Alignment", long(a_alignment));
	range.PutProperty("SpaceAfter", long(0));
	range.PutProperty("SpaceBefore", long(0));
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::Paste(Alignment a_alignment)
{
	wxAutomationObject paragraph;
	if (m_document.GetObject(paragraph, "Paragraphs.Last"))
	{
		paragraph.PutProperty("Alignment", long(a_alignment));
		paragraph.PutProperty("SpaceAfter", long(0));
		paragraph.PutProperty("SpaceBefore", long(0));
	}

	m_document.CallMethod("Paragraphs.Last.Range.Paste");
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::SetPageOrientation(PageOrientation a_orientation)
{
	wxAutomationObject page_setup;
	if (!m_document.GetObject(page_setup, "PageSetup"))
		return;

	page_setup.PutProperty("Orientation", long(a_orientation));
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::mf_SetPageMargin(const wxString &ar_margin_name, double a_margin_sm)
{
	wxAutomationObject page_setup;
	if (!m_document.GetObject(page_setup, "PageSetup"))
		return;

	// 1 濑殪 = 2,54 耢 = 72 蝾麝?
	double margin_points = (a_margin_sm*72.0)/2.54;
	page_setup.PutProperty(ar_margin_name, margin_points);
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::SetPageLeftMargin(double a_margin_sm)
{
	mf_SetPageMargin("LeftMargin", a_margin_sm);
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::SetPageRightMargin(double a_margin_sm)
{
	mf_SetPageMargin("RightMargin", a_margin_sm);
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::SetPageTopMargin(double a_margin_sm)
{
	mf_SetPageMargin("TopMargin", a_margin_sm);
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::SetPageBottomMargin(double a_margin_sm)
{
	mf_SetPageMargin("BottomMargin", a_margin_sm);
}

//------------------------------------------------------------------------------

void dmxMSWordDocument::SetPageHeaderDistance(double a_margin_sm)
{
	mf_SetPageMargin("HeaderDistance", a_margin_sm);
}
//------------------------------------------------------------------------------

void dmxMSWordDocument::SetPageFooterDistance(double a_margin_sm)
{
	mf_SetPageMargin("FooterDistance", a_margin_sm);
}

////////////////////////////////////////////////////////////////////////////////

 

注:在使用ole时不要忘记包含头文件#include <wx/msw/ole/automtn.h>

分享到:
评论
3 楼 鸵鸟大仙 2012-12-17  
麻烦请问一下怎么在wxwidgets中加载msword.olb?我只会在MFC下实现对word的控制,如果换到wxwidgets下,需要怎么做?万分感谢哈!!
2 楼 dqifa 2012-10-05  
Rat_boy 写道
我现在也在做wxWidgets操作Word的功能 但是搞了好久都没有弄出来,网上又只有你的东西,下载了你的那个东西怎么还是不知道怎么操作,能否讲的再详细一点,还有dmx开头的类是否是阁下自己写的类库啊?各种不会,望指点一二啊



这里有源码:http://emonkey.iteye.com/blog/1672611
1 楼 Rat_boy 2012-09-29  
我现在也在做wxWidgets操作Word的功能 但是搞了好久都没有弄出来,网上又只有你的东西,下载了你的那个东西怎么还是不知道怎么操作,能否讲的再详细一点,还有dmx开头的类是否是阁下自己写的类库啊?各种不会,望指点一二啊

相关推荐

    在wxWidgets中操纵word实例

    在wxWidgets中操纵Word实例,主要是通过COM(Component Object Model)接口实现的,因为Microsoft Office应用程序如Word提供了COM接口供外部程序进行交互。在Windows平台上,COM是微软提供的一种二进制兼容的标准,...

    使用wxwidgets进行跨平台程序开发(中文版)_wxWidgets学习_wxWidgets_

    5. **C++ 支持**:作为 C++ 库,wxWidgets 充分利用了 C++ 的面向对象特性,提供了易于理解和使用的类结构。 **wxWidgets 学习路径** 学习 wxWidgets 需要对 C++ 有基本的了解,以及对 GUI 开发的基本概念。以下是...

    嵌入式图像开发wxWidgets

    开发者可以利用wxWidgets提供的API来创建和管理这些控件,并定义它们的行为。 在Linux环境下,wxWidgets为开发人员提供了一种无需了解X Window System底层细节就能构建用户界面的方法。它封装了复杂的窗口管理、...

    wxWidgets和MFC混合编程

    wxWidgets和MFC混合编程的优点在于,可以充分利用wxWidgets的跨平台特性和MFC的丰富的控件库,实现更加灵活和强大的应用程序开发。 在一个程序中使用wxWidgets和MFC混合编程需要解决两个主要问题:如何在一个程序...

    wxWidgets教程(中文)

    6. **国际化与本地化**:说明如何利用wxWidgets的国际化的支持,使程序能够适应不同语言的用户需求。 7. **高级主题**:深入讨论更复杂的主题,如自定义控件、绘图、打印和预览功能,以及多线程和网络编程。 8. **...

    wxWidgets中文教程带实例.zip

    **wxWidgets 概述** wxWidgets 是一个开源的跨平台 C++ 库,它使得开发者能够用 C++ 创建原生的 GUI(图形用户界面)应用程序。这个库支持多个操作系统,包括 Windows、Linux 和 macOS,因此程序员可以编写一次代码...

    使用wxWidgets进行跨平台程序开发 pdf

    总之,本书为准备使用wxWidgets进行跨平台开发的开发者提供了一个全面的学习资源,它详细介绍了wxWidgets的核心功能和如何利用这些功能来创建功能丰富的跨平台GUI应用程序。通过对本书内容的学习,开发者可以掌握...

    wxWidgets2.8.10和CodeBlocks8.02

    首先,需要安装`codeblocks-8.02mingw-setup.exe`,然后在CodeBlocks中配置wxWidgets的路径,这样就可以在IDE中创建新的wxWidgets项目,编写代码并利用MinGW进行编译和调试。通过这种方式,开发者可以充分发挥这两个...

    wxWidgets入门 深入 查询

    **wxWidgets入门与深入查询** **一、wxWidgets概述** wxWidgets是一款强大的开源跨平台GUI库,它允许开发者使用C++编写一次代码,...在学习过程中,利用好各种资源和社区支持,将极大地促进学习效率和项目成功率。

    wxWidgets跨平台程序开发

    全书共有20章,第·1·章简要介绍了·wxWidgets·的发展历史和框架结构,第2章介绍了wxWidgets的程序框架及其实现,第3章深入剖析了wxWidgets的事件处理机制,第4~11章详细讲述了wxWidgets的图形用户界面、数据结构...

    wxWidgets-2.8.10-PDF

    **wxWidgets 框架详解** wxWidgets 是一个开源的 C++ 库,它允许开发者用标准的 C++ ...由于这些文档都是英文版,阅读和理解它们将有助于提升开发者的技术英语水平,并且能够更好地理解和利用 wxWidgets 的全部功能。

    wxwidgets 第一个程序

    开发过程中,利用wxWidgets的调试支持和性能分析工具,可以帮助找出潜在的问题并优化代码。此外,遵循良好的编程实践,如适当的错误处理和内存管理,也是确保应用程序稳定性和效率的关键。 总的来说,`wxWidgets` ...

    wxWidgets3.1.2源代码

    这些改进使得开发者能够利用更先进的功能,同时保持代码的兼容性和稳定性。 总之,`wxWidgets 3.1.2`源代码包提供了一个全面的GUI开发解决方案,无论你是初学者还是经验丰富的开发者,都能从中受益。通过深入研究和...

    wxWidgets_Cross-PlatformProgramming.pdf

    这本书旨在帮助开发者掌握利用wxWidgets在不同操作系统上创建一致用户界面的技能。 wxWidgets是一个开放源代码的C++库,它提供了丰富的GUI工具集,使得程序员能够用一种语言编写程序,而无需关心其在Windows、Linux...

    wxWidgets-3.1.4_wxWidgets_wxwidgetsversion_

    5. **性能优化**:wxWidgets与操作系统紧密集成,尽可能地利用底层API,确保高效的性能。 【配置文件】: - `configure`:这是自动配置脚本,用于检测目标系统的特征并生成合适的Makefile,以适应不同的编译环境。 ...

    wxWidgets-2.8.0.zip_Accel.cpp_wxDynamicLibrary_wxWidgets_wxwidge

    《wxWidgets-2.8.0:跨平台GUI框架的深度解析》 wxWidgets是一个开源的、免费的、跨平台的图形用户界面(GUI)库,...无论你是初涉GUI编程的新手,还是经验丰富的开发者,wxWidgets都是一个值得探索和利用的宝贵资源。

    wxWidgets 串口在visual stdio 2010环境下的实现

    在本项目中,我们将探讨如何在Visual Studio 2010环境下,利用wxWidgets框架来实现串口功能,具体是通过wxctb-0.9这个库进行操作。以下是对这些知识点的详细说明: **wxWidgets框架**: wxWidgets是一个开源的C++库...

    《使用wxWidgets进行跨平台程序开发》光盘例子源码

    《使用wxWidgets进行跨平台程序开发》是一本深入讲解如何利用wxWidgets库构建跨平台应用程序的专业书籍。wxWidgets是一个开源的C++库,它允许开发者使用标准的C++语法编写一次代码,然后在多种操作系统上运行,包括...

    VS2019+wxWidgets-3.1.4的配置的模板工程(wxProject.zip)

    总结来说,使用VS2019和wxWidgets 3.1.4创建跨平台的GUI应用,需要正确安装和配置环境,理解wxWidgets的基本结构和编程模式,以及掌握如何利用VS2019的项目和属性设置来管理依赖关系。通过不断实践和学习,您可以...

Global site tag (gtag.js) - Google Analytics