C++学习笔记(5)利用codeblocks开发窗口界面程序

        目前在Windows平台中有比较多的界面程序框架:GTK+、Qt、wxWidgets、MFC、WTL、WPF,而真正支持跨平台的只有Qt和wxWidgets两种。wxWidgets比较小巧学习成本稍低,实际上每种界面框架库都有自己的优缺点。选择wxWidgets作为界面库学习目标,主要是因为该库作为codeblocks默认的界面库与开发工具的结合比较紧密,仅此而已。

创建窗口界面程序

 

 

此处的#wx是全局变量,需要提前设定(参考之前的文章) 

 

 在Other linker options中添加如下静态链接库:

-lwx_mswu_xrc-3.2
-lwx_mswu_html-3.2
-lwx_mswu_qa-3.2
-lwx_mswu_core-3.2
-lwx_baseu_xml-3.2
-lwx_baseu_net-3.2
-lwx_baseu-3.2
-lwxexpat-3.2
-lwxjpeg-3.2
-lwxpng-3.2
-lwxregexu-3.2
-lwxtiff-3.2
-lwxzlib-3.2
-lwxscintilla-3.2

在Serch directories—Compiler中添加编译相关版本头文件目录

 在Serch directories—Linker中添加编译相关版本库目录

在Serch directories—Resource Compiler中添加编译相关版本的资源库目录

编译程序

编译报错

 问题原因是在Debug设置中添加了不存在的库文件,解决方法是在Debug配置中删除相关库文件配置即可。

 再次编译程序

 运行程序

 窗口界面设置

通过资源编辑器窗口设置属性

重新编译运行程序可以看到修改结果

通过写代码设置属性

在SDKLearnMain.cpp中的初始化函数中添加如下代码:

//设置窗口名称
SetTitle("SDK学习");
//设置窗口图标
static const char *graph[] = {
// columns rows colors chars-per-pixel
    "16 16 4 2",
    "   c black",
    ".  c #BA1825",
    "X  c gray100",
    "UX c None",
// pixels
    "UX. . . . . . . . . . . . . . UX",
    ". . . . . . . . . . . . . . . . ",
    ". . . . . . . . . . . . . . . . ",
    ". . . . . . . . . . . X X . . . ",
    ". . . . . . . . . . . X X . . . ",
    ". . . . . . . . . . . X X . . . ",
    ". . . . . X X . . . . X X . . . ",
    ". . . . . X X . . . . X X . . . ",
    ". . . . . X X . X X . X X . . . ",
    ". . . . . X X . X X . X X . . . ",
    ". . . . . X X . X X . X X . . . ",
    ". . . . . X X . X X . X X . . . ",
    ". . . X X X X X X X X X X . . . ",
    ". . . . . . . . . . . . . . . . ",
    ". . . . . . . . . . . . . . . . ",
    "UX. . . . . . . . . . . . . . UX"
};
SetIcon( wxIcon( graph ) );
//设置窗口大小
    int   cxScreen = wxSystemSettings::GetMetric(wxSYS_SCREEN_X)/1.5 +200;  // wide
    int   cyScreen = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y)/1.5 ;  // high
    SetSize(cxScreen,cyScreen);
    //窗口居中
Center();

通常对于拷贝来的代码段在代码编辑窗口中通常都是格式混乱的,我们可以通过右键菜单Format use AStyle完成代码的格式调整。

 保存窗口修改,重新编译并运行程序

添加Notebook控件

通过资源编辑窗口设置Notebook窗口Tab位置和边框类型

向Notebook控件中添加Page页

可以在资源编辑窗口中直接通过Notebook控件上的Tab页位置右键菜单实现新Tab页的添加。

 通过切换Tab页实现系统菜单变化可以通过wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED事件处理来实现。下面是实现的操作与代码:

 首先在资源编辑窗口中选中Notebook控件

 然后在控件事件列表中选中wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED事件并创建事件处理函数事件处理函数代码如下:

    wxString curName=m_SDKLearnNotebook->GetPageText(event.GetSelection());
    auto nm=GetMenuBar()->FindMenu(curName);

    if(wxNOT_FOUND==nm)
    {
        if(curName.Contains(_("System")))
        {
            GetMenuBar()->SetMenuLabel(0,L"System");
        }
        else if(curName.Contains(_("Basic")))
        {
            GetMenuBar()->SetMenuLabel(0,L"Basic");
        }
        else if(curName.Contains(_("Network")))
        {
            GetMenuBar()->SetMenuLabel(0,L"Network");
        }
        else if(curName.Contains(_("Database")))
        {
            GetMenuBar()->SetMenuLabel(0,L"Database");
        }
        else if(curName.Contains(_("AI")))
        {
            GetMenuBar()->SetMenuLabel(0,L"AI");
        }
        else if(curName.Contains(_("Multimedia")))
        {
            GetMenuBar()->SetMenuLabel(0,L"Multimedia");
        }
    }

向Notebook控件中添加Panel页

实际上为了更加细致控制Notebook中的Tab页,可以通过创建新的Panel类来实现Tab页的完全控制。主要用于需要进行图形绘制或视频显示的场景。

添加Panel资源

 

 

向Notebook中添加Panel页

在SDKLearnMain.cpp中添加如下代码:

//引入Panel头文件
#include "SystemPanel.h"
//创建Panel指针变量
SystemPanel* m_SystemPanel;
//在初始化函数中添加Panel到NoteBook中
m_SystemPanel=new SystemPanel(m_SDKLearnNotebook);
m_SDKLearnNotebook->AddPage(m_SystemPanel,L"SystemPanel");
//在析构函数中删除Panel指针
if(NULL!=m_SystemPanel)
   delete m_SystemPanel;

编译运行结果如下:

 向Panel页中添加wxListCtrl控件

 向Panel中添加右键菜单


完成菜单项添加后,在Resources窗口中选择新建菜单,在菜单属性区设置Var name

在Resources窗口中选择Panel页属性区{}按钮设置EVT_RIGHT_UP事件响应函数

设置EVT_RIGHT_UP事件响应函数名,编辑事件响应函数,显示右键菜单。

void SystemPanel::OnRightUp(wxMouseEvent& event)
{
    PopupMenu( &m_SystemMenu, event.GetX(), event.GetY() );
}

编译运行,效果如下:

在右侧资源编辑窗口中,双击菜单图标进入菜单编辑窗口

 

 点击New按钮添加菜单项

设置菜单ID和菜单名称,点OK按钮生成菜单项

在Resources窗口中选择新建菜单项,在菜单属性区设置Var name

在菜单属性区选择{}按钮设置菜单选中事件

设置菜单响应事件处理函数名

在事件处理函数中添加事件处理内容

#include <wx/msgdlg.h>
void SystemPanel::Onm_GetVersionSelected(wxCommandEvent& event)
{
    wxMessageBox(msg, _("Welcome to..."));
}

编译并运行,结果如下:

​​​​​​至此,我们完成了通过codeblocks创建简单窗口界面程序的学习。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值