wxWidgets学习笔记四

来源:互联网 发布:奥飞数据 ipo 编辑:程序博客网 时间:2024/05/12 14:45

2010-7-20

 

1.         //dc.DrawPoint(100, 100);画点

2.         dc.DrawLine(0, 0, 300, 300);//前面是start coord,后面是end coord

 

 

3.      dc.SetBrush(wxBrush(*wxRED,wxBDIAGONAL_HATCH));//设置画刷(相当于填充)为红色,反斜线画刷

dc.DrawRectangle(50, 50, 150, 100);//画矩形

4.      dc.DrawRoundedRectangle(50,50,150,100,10);//画圆角矩形

        void wxDC::DrawRoundedRectangle  ( wxCoord  x, 

       wxCoord  y, 

       wxCoord  width, 

       wxCoord  height, 

       double  radius   )

 

5.                                          

下面这个是用来绘制多边形的函数:  

void DrawPolygons(wxDC& dc)

{

    dc.SetPen(*wxWHITE);

    wxBrush brushHatch(*wxRED, wxCROSSDIAG_HATCH);

    dc.SetBrush(brushHatch);

    wxPoint star[5];

    star[0] = wxPoint(100, 60);

    star[1] = wxPoint(60, 150);

    star[2] = wxPoint(160,100);

    star[3] = wxPoint(40, 100);

    star[4] = wxPoint(140, 150);

    dc.DrawPolygon(WXSIZEOF(star)/*点的个数*/, star/*包含各个点的数组*/, 0, 30);

    dc.DrawPolygon(WXSIZEOF(star), star, 160, 30, wxWINDING_RULE);

    wxPoint star2[10];

    star2[0] = wxPoint(0, 100);

    star2[1] = wxPoint(-59, -81);

    star2[2] = wxPoint(95, 31);

    star2[3] = wxPoint(-95, 31);

    star2[4] = wxPoint(59, -81);

    star2[5] = wxPoint(0, 80);

    star2[6] = wxPoint(-47, -64);

    star2[7] = wxPoint(76, 24);

    star2[8] = wxPoint(-76, 24);

    star2[9] = wxPoint(47, -64);

    int count[2] = {5, 5};

    dc.DrawPolyPolygon(WXSIZEOF(count), count, star2, 450, 150);}

 

41.

 

void drawmap(wxDC& dc)//绘画图片

{

    wxBitmap bmp(wxT(quit_xpm),wxBITMAP_TYPE_PNG);

    dc.DrawBitmap(bmp, 250, 100, true);

}

6.      需要注意的是,wxMouseEvent事件是不会传递给父窗口处理的,所以,为了处理这个事件,你必须重载一个新的窗口类,或者重载一个新的wxEvtHandler,然后将其挂载在某个窗口上,当然你还可以使用动态事件处理函数Connect

7.      处理鼠标事件的宏:

EVT_LEFT_DOWN(func)

用来处理wxEVT_LEFT_DOWN事件, 在鼠标左键按下的时候产生.

EVT_LEFT_UP(func)

用来处理wxEVT_LEFT_UP事件, 在鼠标左键被释放的时候产生.

EVT_LEFT_DCLICK(func)

用来处理wxEVT_LEFT_DCLICK事件,在鼠标左键被双击的时候产生.

EVT_MIDDLE_DOWN(func)

用来处理wxEVT_MIDDLE_DOWN事件, 在鼠标中键被按下的时候产生.

EVT_MIDDLE_UP(func)

用来处理wxEVT_MIDDLE_UP事件,当鼠标中键被释放的时候产生.

EVT_MIDDLE_DCLICK(func)

用来处理wxEVT_MIDDLE_DCLICK事件,在鼠标中键被双击的时候产生.

EVT_RIGHT_DOWN(func)

用来处理wxEVT_RIGHT_DOWN事件,鼠标右键被按下的时候产生.

EVT_RIGHT_UP(func)

用来处理wxEVT_RIGHT_UP事件,鼠标右键被释放的时候产生.

EVT_RIGHT_DCLICK(func)

用来处理wxEVT_RIGHT_DCLICK事件,鼠标右键被双击的时候产生.

EVT_MOTION(func)

用来处理wxEVT_MOTION事件,鼠标指针移动的时候产生.

EVT_ENTER_WINDOW(func)

用来处理wxEVT_ENTER_WINDOW事件,鼠标指针移入某个窗口的时候产生.

EVT_LEAVE_WINDOW(func)

用来处理wxEVT_LEAVE_WINDOW事件,鼠标移出某个窗口的时候产生.

EVT_MOUSEWHEEL(func)

用来处理wxEVT_MOUSEWHEEL事件,鼠标滚轮滚动的时候产生.

EVT_MOUSE_EVENTS(func)

用来处理所有的鼠标事件.

8.      你还可以用下面的函数来或者鼠标事件的类型:Dragging (某个键正按下时鼠标移动), Moving (鼠标正在移动而没有鼠标键被按下), Entering, Leaving, ButtonDown, ButtonUp, ButtonDClick, LeftClick, LeftDClick, LeftUp, RightClick, RightDClick, RightUp, ButtonUpIsButton.

9.      你可以使用GetPosition函数或者GetXGetY函数获取鼠标指针当前的设备单位位置也可以给GetLogicalPosition函数传递某个设备上下文参数以便得到对应的逻辑位置

10.  要想接收到键盘事件,你的窗口必须拥有键盘焦点,这可以通过函数wxWindow::SetFocus

11.  要判断在按键的时候是否有状态键按下,可以使用AltDown, MetaDown, ControlDown或者ShiftDown函数. HasModifiers函数在有Control或者Alt键按下的时候返回True(不包括ShiftMeta).

12.  如果你在键盘事件处理函数中没有调用event.Skip()函数,对应的字符事件将不会产生.在某些平台上,全局的快捷键也会不起作用

13. 

14.  实现上图画的线的代码如下,没按下A就会在鼠标的位置和原点之间划下一条线。

void MyFrame::OnChar(wxKeyEvent& event)

{

    wxClientDC dc(this);//设置一个设备上下文

    wxPen pen(*wxWHITE,1);

    dc.SetPen(pen);//白色画笔

    if(event.ShiftDown())//按下shift键画一条线

    {

       dc.DrawLine(event.GetX(),event.GetY(),0,0);

    }

    int code=event.GetKeyCode();//获取按下按键的编码

    if(code==65)//当按下A键(ASCII码为)时,在y=位置画一条线

    {

       dc.DrawLine(event.GetX(),event.GetY(),0,0);

    }

 

15.  }

16. 

void MyFrame::OnMousePrc(wxMouseEvent&event)//鼠标消息处理

{

    wxPoint pt(event.GetPosition());//获取当前坐标pt

    wxClientDC dc(this);//设置一个设备上下文

    if(event.LeftDown())

    {

       wxPen pen(*wxWHITE,1);

       dc.SetPen(pen);//白色画笔

       dc.SetBrush(*wxBLACK_BRUSH);

       dc.DrawCircle(event.GetX(),event.GetY(),10);//当鼠标左键点击位置在(,)后面时用白色画笔画线

    }

    if(event.LeftUp())

    {

       wxPen pen2(*wxGREEN,1);

       dc.SetPen(pen2);

       dc.SetBrush(*wxGREEN_BRUSH);

       dc.SetBackgroundMode(wxSOLID);

       dc.DrawCircle(event.GetX(),event.GetY(),15);//当鼠标左键弹起时,用红色画笔画线

    }

17.  }