wxWidgets学习笔记三

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

你可能感兴趣的:(wxWidgets学习笔记三)