学习wxWidgets的笔记二

2010-7-18(有两天的忘记贴上来了,现在补上)

 

三、关于窗口的基本知识:of cause you know what are windows

 

1.         滚动条:为了优化性能只有拥有wxHSCROLLwxVSCROLL类类型的窗体各自的滚动条

2.         光标和鼠标指针:wxCaret可以用来显示当前文本的位置,wxCursor用来显示鼠标指针,通常你在使用wxWidgets编写的程序运行的屏幕上看到的窗口,都和一个wxWindow类或者它的派生类对应。

3.         客户区和非客户区: 个窗口的客户区大小,通常都只意味着窗口里面那些能被绘制或者它的子窗口能被放置的位置的大小。客户区的大小还应该减去滚动条所占的空间。

4.         顶层窗口:窗口分为像wxFramewxDialogwxPopup这样的顶层窗口和其他窗口。只有顶层窗口可以使用NULL来作为它的父窗口,也只有顶层窗口是延迟删除的。除了wxPopup(我的理解是:叫弹出式窗口)窗口外顶层窗口通常有标题栏和关闭按钮,只要允许就可以拽着移动或者是随意改变它的大小。

5.         坐标体系:左上角为原点(00),单位是像素。

6.         窗口绘制:窗口重绘的时候需要用到wxEVT_ERASE_BACKGROUND来通知应用程序重新绘制背景。wxEVT_PAINT则用来重新绘制前景,已经准备好使用的窗口空间(像wxButton按钮)通常知道怎么处理这两个事件。自己创建的窗口控件就需要自己处理这两个事件,获取窗口的变动区域可以优化自己的绘制代码。

7.         颜色和字体:前景色,背景色,字体设置:窗口本身的类型决定了是否设置字体。

8.         窗口变体:使窗口以不同级别的大小显示wxWINDOW_VARIANT_NOMAL(默认显示级别)wxWINDOW_VARIANT_SMALL,wxWINDOW_VARIANT_MINI, 或者wxWINDOW_VARINT_LARGE。当你有很多信息要显示的时候而空间又不够,就可以使用相对较小的级别。

9.         改变大小:大小发身变化它将收到一个wxEVT_SIZE事件。sizer类。

10.     空闲事件处理和用户界面更新:所有的窗口在所有其他事件都已经处理完以后发出wxEVT_IDLE这个空闲事件,使用EVT_IDLE映射宏来处理。更新:周期性地在系统空闲时调用。

11.     窗口的创建和删除:除非是frame或者dialog窗口,对于别的窗口,都必须在构造函数中传入一个非空的父窗口。窗口类的创建:大多数可以用1步创建和两步创建比如wxButton的创建方法如下:它的构造函数如下:wxButton();

wxButton(wxWindow* parent,WindowID id,const wxString& label=wx_EmptyStringconst wxPoint& pos=wxDefaultPositionconst wxSize& size=wxDefaultSize,long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxT(“button”));

一步创建的方法:wxButton *button = new wxButton(parent,wxID_OK);

除非是frame或者dialog窗口,对于别的窗口,都必须在构造函数中传入一个非空的父窗口。父窗口释放,所有的子窗口也将被释放。

两步创建的方法如下:

wxButton *button = new wxButton;//先调用构造函数

button->Create(parent,wxID_OK);//调用Create函数的时候会收到wxEVT_CREATE

12.     每一个设备上下文都是wxDC的派生类通过SetClippingRegion函数指定一个区域,这个区域以外的部分将不被显示,可以使用 DestroyClippingRegion函数清除设备上下文当前指定的区域

29.   如果你想要做一个随意涂鸦的软件,下面不失为一种方法:    BEGIN_EVENT_TABLE(MyWindow, wxWindow)

    EVT_MOTION(MyWindow::OnMotion)

END_EVENT_TABLE()

void MyFrame::OnMotion(wxMouseEvent &event)//鼠标消息处理函数

{

       if (event.Dragging())//如果鼠标拖动时为真

       {

              wxClientDC dc(this);//创建一个指向当前窗口的设备指针dc

              wxPen pen(*wxRED, 1); //创建画笔,颜色:红色;宽度1

              dc.SetPen(pen);

              dc.DrawPoint(event.GetPosition());画点

              dc.SetPen(wxNullPen);

       }

}

13.     wxPaintEvent事件用来绘画窗口客户区的主要图形,wxEraseEvent用来通知应用程序擦除背景,wxWindow::SetBackgroundColour函数调用设置的颜色或者别的合适的颜色清除整个背景。EVT_ERASE_BACKGROUND擦除背景,GetDC( )返回客户区,如果你定义了一个窗口重画事件处理函数,则必须要使用wxPaintDC(即使没有使用它)

14.     下面这个例子画出了一个矩形框黑底红框:

%
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值