2010.7.19
1. 输出文字:
// Name: minimal.cpp
// Purpose: Minimal wxWidgets sample
// Author: Julian Smart
#include "wxHelloWorld.h"
// 初始化程序
bool MyApp::OnInit()
{
// 创建主窗口
wxSize size(700,250);
wxPoint point(100,100);
MyFrame *frame = new MyFrame(wxT("Minimal wxWidgets App"),point,size);
// 显示主窗口
frame->Show(true);
// 开始事件处理循环
return true;
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxString msg;
msg.Printf(wxT("Hello and welcome to %s"),wxVERSION_STRING);//加上版本信息
wxMessageBox(msg, wxT("About Minimal"),wxOK | wxICON_INFORMATION, this);//消息框(消息内容、标题、窗口类型、父窗口)
}
void MyFrame::OnQuit(wxCommandEvent& event)
{
// 释放主窗口
Close();
}
/*
void MyFrame::OnButtonOK(wxCommandEvent &event)
{
Close();
}*/
void MyFrame::OnPaint(wxPaintEvent &event)//刷屏消息处理函数
{
wxBufferedPaintDC dc(this);
dc.SetPen(*wxGREEN_PEN);
//画笔的颜色
dc.SetBrush(*wxRED_BRUSH);
//刷子的颜色
//获取窗口大小
wxSize sz = GetClientSize();
//要绘制的矩形大小
wxCoord w = 100,h = 50;
//将矩形设置在窗口
//但是不为负数的位置
int x = wxMax(0,(sz.x)/2);
int y = wxMax(0,(sz.y)/2);
wxRect rectToDraw(x,y,w,h);
//只有在需要的时候才重画以便提高效率
if (IsExposed(rectToDraw))
{
//dc.DrawRectangle(rectToDraw);
DrawTextString(dc,wxT("You are my friend!——snoopy"),wxPoint(50,50) );
}
}
/*
void MyFrame::OnSize(wxSizeEvent &event)
{
}*/
void MyFrame::OnMotion(wxMouseEvent &event)//鼠标消息处理函数
{
if (event.Dragging())//如果鼠标拖动时为真
{
wxClientDC dc(this);//创建一个指向当前窗口的设备指针dc
wxPen pen(*wxGREEN, 1); //创建画笔,颜色:红色;宽度;
dc.SetPen(pen);
dc.DrawPoint(event.GetPosition());////画点
dc.SetPen(wxNullPen);
}
}
#include "mondrian.xpm"
MyFrame::MyFrame(const wxString& title,const wxPoint& point,const wxSize& size)
: wxFrame(NULL, wxID_ANY, title, point, size)
{
// 设置窗口图标
SetIcon(wxIcon(mondrian_xpm));
// 创建菜单条
wxMenu *fileMenu = new wxMenu;
// 添加“关于”菜单项
wxMenu *helpMenu = new wxMenu;
//wxButton* button = new wxButton(this, wxID_OK, wxT("CLOSE"), wxPoint(200,200));
helpMenu->Append(wxID_ABOUT, wxT("&About.../tF1"),wxT("Show about dialog"));
fileMenu->Append(wxID_EXIT, wxT("E&xit/tAlt-X"),wxT("Quit this program"));
// 将菜单项添加到菜单条中
wxMenuBar *menuBar = new wxMenuBar();
menuBar->Append(fileMenu, wxT("&File"));
menuBar->Append(helpMenu, wxT("&Help"));
// ...然后将菜单条放置在主窗口上
SetMenuBar(menuBar);
// 创建一个状态条来让一切更有趣些。
CreateStatusBar(2);//创建个状态栏,并写上字符
SetStatusText(wxT("welcome to wxwidgets!"),1);
}
void DrawTextString(wxDC& dc,const wxString& text,const wxPoint& pt)
{
//定义一个wxFont类的对象font
//构造函数wxFont::wxFont(字体大小、字体类型(书法、艺术)、斜体、)
wxFont font(30,wxFONTFAMILY_ROMAN ,wxNORMAL,wxBOLD);
//利用DC类的成员函数SetFont设置字体
dc.SetFont(font);
//设置背景透或者不透
dc.SetBackgroundMode(wxSOLID/*wxTRANSPARENT*/);
//设置前景颜色
dc.SetTextForeground(*wxRED);
//设置背景颜色
dc.SetTextBackground(*wxBLACK);
//写字,文本wxString,位置wxPoint
dc.DrawText(text,pt);
}
Cpp文件
.h文件#include "wx/wx.h"
#include "wx/dcbuffer.h"
// 定义应用程序类
void DrawTextString(wxDC& dc,const wxString& text,const wxPoint& pt);
class MyApp : public wxApp
{
public:
// 这个函数将会在程序启动的时候被调用,启动应用程序的时候一定会调用初始化
virtual bool OnInit();
};
// 定义主窗口类
class MyFrame : public wxFrame
{
public:
// 主窗口类的构造函数
MyFrame(const wxString& title,const wxPoint& point,const wxSize &size);
// 事件处理函数
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
//void OnSize(wxSizeEvent& event);
//void OnButtonOK(wxCommandEvent& event);
void OnMotion(wxMouseEvent& event);
void OnPaint(wxPaintEvent& event);
private:
// 声明事件表
DECLARE_EVENT_TABLE()
};
// 有了这一行就可以使用MyApp& wxGetApp()了
DECLARE_APP(MyApp)
// 告诉wxWidgets主应用程序是哪个类
IMPLEMENT_APP(MyApp)
// MyFrame类的事件表
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(wxID_ABOUT,MyFrame::OnAbout)
EVT_MENU(wxID_EXIT,MyFrame::OnQuit)
//EVT_SIZE(MyFrame::OnSize)//这里不需要标识
EVT_PAINT(MyFrame::OnPaint)
//EVT_BUTTON(wxID_OK,MyFrame::OnButtonOK)
EVT_MOTION(MyFrame::OnMotion)
2. dc.DrawRotatedText(text,300,300,angle);
3. dc.DrawText(text,pt);
要绘制一段圆弧,需要使用DrawArc函数,提供一个起点,一个终点和一个圆心的位置。这段圆弧将以逆时针方向从起点画至终点,举例如下:
int x = 10, y = 200, radius = 20;
dc.DrawArc(xradius, y, x + radius, y, x, y);
4. 还有其他的许多关于画规则图形的函数,详见参考。
5. 上面图形的相关函数是:
for (int angle = 0; angle<360; angle+=45)
dc.DrawRotatedText(text,300,300,angle);