codeblocks+wxWidgets绘图

最近要用codeblocks+wxWidgets做一个实验的结果图,采用的版本是codeblocksSVN完美配置绿色版,SVN6852,下载地址http://bt.neu6.edu.cn/viewthread.php?tid=692508&highlight=codeblocks

之所以采用这个版本是因为不需配置,方便快速做完现在手头上的东西。

新建工程,选择wxWidgets Project:

第一步之后是一个欢迎界面,无需理会,next;

弹出窗口提示选择wxWidgets的版本,我下的版本集成了2.8.x,选好后点击next;

设置路径和工程名:

 

 

输入作者信息,不理会,next;

选择使用的GUI类型,我做的功能比较简单,直接选None,next

 

输入wxWidgets的路径,由于利用了绿色版,也无需设置,保留$(#wx)这个全局符号,继续一路next;

最后工程建好,工程列表如下:

替换wxDrawApp.cpp中的内容:

 

#include  " wxDrawApp.h "

// (*AppHeaders
#include  " wxDrawMain.h "
#include <wx/image.h>

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{

    Line *line =  new Line(wxT( " Line "));
    line->Show( true);

     return  true;
}

 

更改wxDrawMain.cpp中的内容:

 

#include  " wxDrawMain.h "
Line::Line( const wxString& title)
       : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize( 280180))
{
   this->Connect(wxEVT_PAINT, wxPaintEventHandler(Line::OnPaint));
   this->Centre();
}


void Line::OnPaint(wxPaintEvent&  event)
{
    wxPaintDC dc( this);

     //  绘制线段
    wxCoord x1 =  50, y1 =  60;
    wxCoord x2 =  190, y2 =  60;

    dc.DrawLine(x1, y1, x2, y2);
}

 

更改wxDrawApp.h中的内容:

 

 

#include <wx/wx.h>

class MyApp :  public wxApp
{
   public:
     virtual  bool OnInit();
};

更改wxDrawMain.h中的内容:

 

#include <wx/wx.h>

class Line :  public wxFrame
{
public:
    Line( const wxString& title);
     void OnPaint(wxPaintEvent&  event);
};

 

这些代码任何有过一点MFC、C++经验的人都可以看懂,新建了一个Line类,重载了库中的OnPaint函数,完成绘制一条线段的功能;

效果如下:


 

 OnPaint响应函数中的内容可以进行修改,完成各种复杂的绘制,下面粘贴一点有用的代码实例:

 

void Line::OnPaint(wxPaintEvent&  event)
{
    wxPaintDC dc( this);

     //  绘制线段
    wxCoord x1 =  50, y1 =  60;
    wxCoord x2 =  190, y2 =  60;

    dc.DrawLine(x1, y1, x2, y2);

     //  添加文字
    dc.DrawText(wxT( " fjsadk "),  4060);
    dc.DrawText(wxT( " fwefdecd "),  7080);

     //  点
    dc.DrawPoint( 10, 10);
    dc.DrawPoint( 10, 20);
    dc.DrawPoint( 20, 10);
    dc.DrawPoint( 20, 20);

     //  画笔
    wxColour col1, col2;

    col1.Set(wxT( " #0c0c0c "));
    col2.Set(wxT( " #000000 "));

    wxBrush brush(wxColour( 255255255), wxTRANSPARENT);
    dc.SetBrush(brush);

    dc.SetPen(wxPen(col1,  1, wxSOLID));
    dc.DrawRectangle( 10159060);

    dc.SetPen(wxPen(col1,  1, wxDOT));
    dc.DrawRectangle( 130159060);

    dc.SetPen(wxPen(col1,  1, wxLONG_DASH));
    dc.DrawRectangle( 250159060);

    dc.SetPen(wxPen(col1,  1, wxSHORT_DASH));
    dc.DrawRectangle( 101059060);

    dc.SetPen(wxPen(col1,  1, wxDOT_DASH));
    dc.DrawRectangle( 1301059060);

    dc.SetPen(wxPen(col1,  1, wxTRANSPARENT));
    dc.DrawRectangle( 2501059060);

     //  绘制图形
    wxColour gray, white, red, blue;
    wxColour orange, green, brown;

    gray.Set(wxT( " #d4d4d4 "));
    white.Set(wxT( " #ffffff "));
    red.Set(wxT( " #ff0000 "));
    orange.Set(wxT( " #fa8e00 "));
    green.Set(wxT( " #619e1b "));
    brown.Set(wxT( " #715b33 "));
    blue.Set(wxT( " #0d0060 "));

    dc.SetPen(wxPen(gray));

    dc.DrawRectangle( 20205050);
    dc.DrawRectangle( 30405050);

    dc.SetBrush(wxBrush(white));
    dc.DrawRectangle( 100205050);
    dc.DrawRectangle( 110405050);
    wxRegion region1( 100205050);
    wxRegion region2( 110405050);
    region1.Intersect(region2);
    wxRect rect1 = region1.GetBox();
    dc.SetClippingRegion(region1);
    dc.SetBrush(wxBrush(red));
    dc.DrawRectangle(rect1);
    dc.DestroyClippingRegion();

    dc.SetBrush(wxBrush(white));
    dc.DrawRectangle( 180205050);
    dc.DrawRectangle( 190405050);
    wxRegion region3( 180205050);
    wxRegion region4( 190405050);
    region3.Union(region4);
    dc.SetClippingRegion(region3);
    wxRect rect2 = region3.GetBox();
    dc.SetBrush(wxBrush(orange));
    dc.DrawRectangle(rect2);
    dc.DestroyClippingRegion();

    dc.SetBrush(wxBrush(white));
    dc.DrawRectangle( 201205050);
    dc.DrawRectangle( 301405050);
    wxRegion region5( 201205050);
    wxRegion region6( 301405050);
    region5.Xor(region6);
    wxRect rect3 = region5.GetBox();
    dc.SetClippingRegion(region5);
    dc.SetBrush(wxBrush(green));
    dc.DrawRectangle(rect3);
    dc.DestroyClippingRegion();

    dc.SetBrush(wxBrush(white));
    dc.DrawRectangle( 1001205050);
    dc.DrawRectangle( 1101405050);
    wxRegion region7( 1001205050);
    wxRegion region8( 1101405050);
    region7.Subtract(region8);
    wxRect rect4 = region7.GetBox();
    dc.SetClippingRegion(region7);
    dc.SetBrush(wxBrush(brown));
    dc.DrawRectangle(rect4);
    dc.DestroyClippingRegion();

    dc.SetBrush(white);
    dc.DrawRectangle( 1801205050);
    dc.DrawRectangle( 1901405050);
    wxRegion region9( 1801205050);
    wxRegion region10( 1901405050);
    region10.Subtract(region9);
    wxRect rect5 = region10.GetBox();
    dc.SetClippingRegion(region10);
    dc.SetBrush(wxBrush(blue));
    dc.DrawRectangle(rect5);
    dc.DestroyClippingRegion();

}

 

 

转载于:https://www.cnblogs.com/ziqiao/archive/2011/11/14/2248268.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值