wxWidgets学习笔记三

本文通过一个具体的wxWidgets应用实例,介绍了如何创建GUI界面、处理事件及进行绘图操作等核心内容,适合初学者快速入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值