wxwidgetstudy/main.cpp

176 lines
9.0 KiB
C++
Raw Normal View History

2024-01-25 14:14:28 +08:00
/*
1. main函数或者winmain函数或者其它类似的函数被调用(
wxWidgets提供的,).wxWidgets MyApp的
.
2. wxWidgets调用MyApp::OnInit函数, MyFrame的实例.
3. MyFrame的构造函数通过它的基类wxFrame的构造函数创建一个窗口
.
4. MyApp::OnInit函数显示主窗口并且返回真.
5. wxWidgets开始事件循环.
退退
*/
2024-01-25 12:56:32 +08:00
#include "wx/wx.h"
2024-01-25 14:14:28 +08:00
/*
wxWidgets程序都需要定义一个wxApp类的子类
wxApp的子类至少需要定义一个OnInit函数wxWidgets准备好运行
Win32程序中的main函数或者WinMain函数类似
*/
2024-01-25 12:56:32 +08:00
// 定义应用程序类
class MyApp : public wxApp {
public:
2024-01-25 14:14:28 +08:00
/*
OnInit函数中
.wxWidgets将开始事件循环用来处理用户输入并且在必要的情
OnInit函数返回假 wxWidgets将会释放它内部已经分配的资源
*/
2024-01-25 12:56:32 +08:00
virtual bool OnInit();
2024-01-25 14:14:28 +08:00
/*
OnExit 便退
OnInit
*/
2024-01-25 12:56:32 +08:00
};
2024-01-25 14:14:28 +08:00
/*
Frame窗口是一个可以容纳别的窗口的顶级窗口
*/
2024-01-25 12:56:32 +08:00
class MyFrame : public wxFrame {
public:
// 主窗口类的构造函数
MyFrame(const wxString& title);
2024-01-25 14:14:28 +08:00
/*
MyFrame类中不是虚函数
*/
2024-01-25 12:56:32 +08:00
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
private:
// 声明事件表
DECLARE_EVENT_TABLE()
};
2024-01-25 14:14:28 +08:00
/*
DECLARE_APPwxWidgets就不知道怎样创建一个新的应用程序对象
使
*/
2024-01-25 12:56:32 +08:00
IMPLEMENT_APP(MyApp)
2024-01-25 14:14:28 +08:00
/*
wxWidgets创建这个MyApp类的实例的时候wxTheApp.
使wxApp到MyApp的类型强制转换
wxGetApp()MyApp实例的引用
便
使DECLARE_APP,wxTheApp变量调用wxApp的方法.
MyApp的头文件
*/
DECLARE_APP(MyApp)
2024-01-25 12:56:32 +08:00
// 初始化程序
bool MyApp::OnInit()
{
2024-01-25 14:14:28 +08:00
/*
wxT Unicode模式_T宏的作用是完全一样的使
"_()" wxWidgets将其中的字符串翻译成其它语言的版本
*/
2024-01-25 12:56:32 +08:00
MyFrame* frame = new MyFrame(wxT("Minimal wxWidgets App"));
// 显示主窗口
frame->Show(true);
// 开始事件处理循环
return true;
}
2024-01-25 14:14:28 +08:00
/*
.cpp文件wxWidgets来自用户或者其它地方的事件
EVT_MENU宏只是很多中事件宏的其中之一wxWidgets哪种事件应该被关联到哪个成员函数
wxID_EXIT wxID_ABOUT wxID_ABOUT和wxID_EXIT是wxWidgets
*/
2024-01-25 12:56:32 +08:00
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
END_EVENT_TABLE()
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxString msg;
msg.Printf(wxT("Hello and welcome to %s"), wxVERSION_STRING);
2024-01-25 14:14:28 +08:00
// 四个参数分别代表消息内容,标题,窗口类型以及父窗口。
2024-01-25 12:56:32 +08:00
wxMessageBox(msg, wxT("About Minimal"), wxOK | wxICON_INFORMATION, this);
}
2024-01-25 14:14:28 +08:00
2024-01-25 12:56:32 +08:00
void MyFrame::OnQuit(wxCommandEvent& event)
{
2024-01-25 14:14:28 +08:00
/*
wxFrame类的 Close frame窗口 wxEVT_CLOSE_WINDOW
wxWindow::Destroy frame
OnQuit OnQuit
wxWidgets会通过 Close OnQuit中的那样 frame wxEVT_CLOSE_WINDOW
frame
*/
2024-01-25 12:56:32 +08:00
Close();
}
2024-01-25 14:14:28 +08:00
/*
wxFrame使(NULL),
(wxID_ANY标识让 wxWidgets自己选择一个)
wxFrame::Create函数来创建一个frame窗口的实例
XPM格式来表示XPM文件其实是一个ASCII编码的完全符合C++
C++
SetIcon那一行代码使用 mondrian_xpm
mondrian变量是在mondrian.xpm文件里定义的 frame窗口关联在一起
Append函数的三个参数的意义分别为
"&"线"\t"
*/
2024-01-25 12:56:32 +08:00
MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title)
{
// 设置窗口图标
// SetIcon(wxIcon(mondrian_xpm));
// 创建菜单条
wxMenu* fileMenu = new wxMenu;
// 添加“关于”菜单项
wxMenu* helpMenu = new wxMenu;
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!"));
}