wxWidgets的AUI(高级用户界面,Advanced User Interface)

前面已经创建了一个简单的窗口程序,包括菜单、工具栏和状态栏,能够响应用户消息。但是,这个窗口还过于简单,相较于目标——类似“Visual Studio”的界面,还缺少两样主要的东西:

  • 浮动/停靠窗口
  • 标签化的多文档界面(Tab MDI)。

wxWidgets提供了高级用户界面(AUI),能够实现所需的功能。

AUI概貌

wxAUI给用户提供了高级界面功能,主要包括浮动窗口、可定制的布局等。
主要功能包括:

  • 框架管理。
  • 工具栏。
  • 非模态控件。
  • 视觉与外观。

为了给窗口增加AUI功能,需要在窗口中添加并初始化wxAuiManager变量,并进行相应的初始化工作。

wxAuiManager是AUI框架的核心类,为wxFrame管理与之相联系的窗格(Pane),并使用窗格的wxAuiPaneInfo类确定窗格的停靠和浮动行为。

为窗口增加AUI一般需要以下步骤:
(1)在窗口类中增加wxAuiManager变量。

/// MyFrame.h

class MyFrame : public wxFrame
{
    …
    wxAuiManager    mAuiMgr; /// 定义wxAuiManager变量

};

(2)初始化和清理wxAuiManager。

/// MyFrame.h

MyFrame::MyFrame
{
    mAuiMgr.SetManageWindow(this); /// 管理当前窗口
    …
    CreatePanes(); /// 创建窗格
    …
    mAuiMgr.Update(); /// 更新管理的内容.
}

MyFrame::~MyFrame
{
    mAuiMgr.UnInit(); /// 清理管理器.    
}

(3)将子窗口与wxAuiManager相联系,由wxAuiManager进行AUI管理。

/// MyFrame.cpp

void MyFrame::CreatePanes()
{
    wxTextCtrl* text1 = new wxTextCtrl(this, -1);
    mAuiMgr.AddPane(text1, wxLEFT, "Pane Caption");

    wxTextCtrl* text2 = new wxTextCtrl(this, -1);
    mAuiMgr.AddPane(text2, wxBOTTOM, "Pane Caption");
}

浮动和停靠窗口

下面,还是以一个程序为列,说一下AUI的用法。

我们的目标是创建一个程序,程序中有2个浮动/可停靠窗口,一个停靠在主窗口的左边,另外2个停靠在主窗口的下边。程序运行效果如下:
这里写图片描述这里写图片描述
主窗口类的代码如下:

/// MainFrame.h

#pragma once

#include "wxInc.h"

class MainFrame : public wxFrame
{
    DECLARE_EVENT_TABLE();

public:
    MainFrame();
    ~MainFrame();

protected:
    void CreateBars();
    void CreatePanes();

private:
    wxAuiManager    mAuiMgr;

};
/// MainFrame.cpp

#include "MainFrame.h"

BEGIN_EVENT_TABLE(MainFrame , wxFrame)
END_EVENT_TABLE()

MainFrame::MainFrame() : wxFrame(NULL, wxID_ANY, wxT("main window"))
{
    /// 将AUI管理器挂接在当前窗口.
    mAuiMgr.SetManagedWindow(this);

    /// 创建菜单栏、工具栏和状态栏.
    CreateBars(); 

    /// 创建浮动窗口.
    CreatePanes(); 

    /// 更新AUI管理器的内容.
    mAuiMgr.Update(); 
}


MainFrame::~MainFrame(void)
{
    /// 清理AUI管理器.
    mAuiMgr.UnInit();
}

void MainFrame::CreateBars()
{
    /// 1. 创建菜单栏
    wxMenuBar * menuBar = new wxMenuBar();

    wxMenu * menu1 = new wxMenu();
    menu1->Append(ID_ITEM_1, wxT("subitem 1-1"));
    menu1->Append(ID_ITEM_2, wxT("subitem 1-2"));
    menuBar->Append(menu1, wxT("item 1"));

    SetMenuBar(menuBar);

    /// 2. 创建工具栏
    wxToolBar * toolBar = new wxToolBar(this, wxID_ANY);
    toolBar->AddTool(ID_ITEM_5, wxT("button1"), wxArtProvider::GetBitmap(wxART_GO_BACK, wxART_TOOLBAR));
    toolBar->AddTool(ID_ITEM_6, wxT("button2"), wxArtProvider::GetBitmap(wxART_TIP, wxART_TOOLBAR));
    toolBar->Realize();  /// 在增加按钮后必须调用此函数
    SetToolBar(toolBar);    

    /// 3. 创建状态栏
    wxStatusBar * statusBar = CreateStatusBar(2);

}

void MainFrame::CreatePanes()
{
    wxWindow * wnd1 = new wxWindow(this, wxID_ANY);
    mAuiMgr.AddPane(wnd1, wxLEFT, wxT("pane 1"));

    wxWindow * wnd2 = new wxWindow(this, wxID_ANY);
    mAuiMgr.AddPane(wnd2, wxBOTTOM, wxT("pane 2"));

    mAuiMgr.Update();
}

浮动工具栏

AUI中提供了浮动工具栏。
这里写图片描述这里写图片描述
为实现浮动工具栏,需要创建wxAuiToolBar的实例,并将其加入AUI管理器,具体代码如下:

/// MainFrame.cpp

……

void MainFrame::CreateBars()
{
    ……
    /// 2. 创建浮动工具栏
    /// 2.1 创建wxAuiToolBar工具栏.
    wxAuiToolBar * toolBar = new wxAuiToolBar(this, wxID_ANY);
    toolBar->AddTool(wxID_OPEN, wxT("open file"), wxArtProvider::GetBitmap(wxART_NEW, wxART_TOOLBAR));
    toolBar->AddTool(wxID_CLOSE, wxT("close file"), wxArtProvider::GetBitmap(wxART_DELETE, wxART_TOOLBAR));
    toolBar->Realize();

    /// 2.2 将工具栏加入AUI管理器,规定其摆放位置等参数.
    mAuiMgr.AddPane(toolBar, wxAuiPaneInfo().Name(wxT("tb1")).Caption(wxT("Big Toolbar")).ToolbarPane().Top());

    ……
}

……
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
好的,我会尽力回答你的问题。首先,wxWidgets是一个跨平台的C++应用程序框架,可以用来开发GUI(图形用户界面)应用程序。wxAUIwxWidgets中的一个工具包,用于管理应用程序中的多个面板、工具栏和菜单等。下面是一些代码示例,帮助你用wxWidgets的wxAUI框架编写一个简单的界面,将窗口分为左中右三部分: ```cpp // 创建wxWidgets应用程序对象 wxAppConsole* app = wxCreateApp(); // 初始化应用程序 wxApp::SetInstance(app); wxEntry(argc, argv); // 创建主窗口 wxFrame* frame = new wxFrame(NULL, wxID_ANY, wxT("My Frame"), wxDefaultPosition, wxSize(500, 300)); // 创建wxAUI管理器 wxAuiManager* manager = new wxAuiManager(frame); // 创建左中右三个面板 wxPanel* panel_left = new wxPanel(frame, wxID_ANY, wxDefaultPosition, wxSize(150, -1)); wxPanel* panel_center = new wxPanel(frame, wxID_ANY, wxDefaultPosition, wxSize(200, -1)); wxPanel* panel_right = new wxPanel(frame, wxID_ANY, wxDefaultPosition, wxSize(150, -1)); // 将左中右三个面板添加到管理器中 manager->AddPane(panel_left, wxLEFT, wxT("Left Pane")); manager->AddPane(panel_center, wxCENTER, wxT("Center Pane")); manager->AddPane(panel_right, wxRIGHT, wxT("Right Pane")); // 设置管理器的布局 manager->Update(); // 显示主窗口 frame->Show(); // 进入消息循环 wxTheApp->OnRun(); // 释放资源 wxApp::CleanUp(); // 返回0表示正常退出 return 0; ``` 以上代码中,我们首先创建了一个wxAppConsole应用程序对象,并初始化应用程序。然后创建了一个名为"My Frame"的主窗口,窗口大小为500x300。接着创建了一个wxAuiManager管理器,并将三个面板添加到管理器中。最后设置管理器的布局,显示主窗口,并进入消息循环,直到应用程序退出。 以上是一个简单的界面实现,窗口分为左中右三部分。你可以根据自己的需要添加更多的面板、工具栏和菜单等,来创建更复杂的界面。希望这能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值