WxWidgets 快速指南
应用程序结构
要启动一个wxWidgets应用程序,您需要从wxApp类派生一个类,并在OnInit()方法中重写它,通常会在该方法中创建应用程序的主顶级窗口。
这个窗口可以是一个wxFrame或一个wxDialog,并且可以包含一个或多个wxPanel、wxSplitterWindow或其他窗口和控件的实例。这些窗口可以使用C++代码创建,也可以从以XRC格式定义的资源中加载。
框架可以包含一个wxMenuBar、一个wxToolBar、一个wxStatusBar和一个当框架最小化时使用的wxIcon。
一个wxPanel用于放置用户交互所需的控件(从wxControl类派生而来的类)。例如,wxButton、wxCheckBox、wxChoice、wxListBox、wxRadioBox和wxSlider等。这些控件需要正确地放置(以及在用户调整顶层窗口大小时重新放置),为此,您可以使用wxSizer派生类(如wxBoxSizer和wxFlexGridSizer)来正确布局所有控件。
也可以使用wxDialog类来创建控件,其优点是不需要在内部单独创建一个面板。
与其创建一个对话框并为其添加项目,不如选择一个方便的常用对话框类,比如wxMessageDialog和wxFileDialog。
使用屏幕绘图
你不能直接在窗口上绘图——你需要使用其中一个较老的设备上下文(DC)类或较新的图形上下文(GC)类,这些类支持透明度、抗锯齿等功能。wxDC是wxClientDC、wxPaintDC、wxMemoryDC、wxPostScriptDC、wxMemoryDC、wxMetafileDC和wxPrinterDC的基础。如果你的绘图函数带有wxDC参数,你可以将这些DC中的任何一个传递给函数,从而使用相同的代码在不同的设备上绘图。你可以使用wxDC的成员函数进行绘图,例如wxDC::DrawLine和wxDC::DrawText。使用刷子(wxBrush)和笔(wxPen)控制窗口的颜色。
使用wxGraphicsContext时,您需要使用wxGraphicsRenderer中的一种方法来创建它,然后使用wxGraphicsPath对象构建您的绘图,最后使用wxGraphicsContext::StrokePath()或wxGraphicsContext::FillPath()完成绘图。
事件处理
GUI程序的大部分时间都用于等待用户触发的事件,然后对其进行处理。要实现这一点,您可以使用wxEvtHandler::Bind()指定要处理的给定事件的处理程序。事件处理程序接收描述事件的对象,例如wxKeyEvent或wxMouseEvent,并执行与之对应的操作。有关此主题的更多信息,请参阅事件处理概述。