2023年12月15日发(作者:)
wxWidgets-2.9.0 + VC2008 的环境配置:
安装完wxWidgets后,去wxWidgets目录C:wxWidgets-2.9.0buildmsw,找到wx_如果报错: LB_GETITEMRECTZ找不到
解决方法:将默认的Debug模式选择为 Universal 版本
Debug运行库 多线程模式 改为MD
Release 改为MT
然后在VC里面加入路径:
包含文件路径:
C:wxWidgets-2.9.0libvc_libmswud(否则报无法打开文件“wx/setup.h”
C:wxWidgets-2.9.0include
库文件路径:
C:wxWidgets-2.9.0libvc_lib
文件,然后用VC编译,
编译完后会在C:wxWidgets-2.9.0lib里生成一个文件夹 vc_lib .
创建一个基本的wxWidgets窗口
#include "wx/wx.h"
//必须继承wxApp
class MyApp : public wxApp
{
public:
};
//必须继承wxFrame
class MyFrame:public wxFrame
{
public:
private:
};
//必须加这句,否则消息映射回报错
DECLARE_EVENT_TABLE()
MyFrame(const wxString& title);
//入口函数
virtual bool OnInit();
bool MyApp::OnInit()
{
}
//创建MyApp实例的代码在这里面
IMPLEMENT_APP(MyApp)
DECLARE_APP(MyApp)
MyFrame::MyFrame(const wxString& title):wxFrame(NULL,wxID_ANY,title)
{
}
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
至此一个没有任何控件的基本窗口就生成了,下面是一些常用的控件
/*
*/
添加消息映射的地方:例如菜单响应
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
MyFrame::OnAbout的声明格式是:
void OnAbout(wxCommandEvent& event);
/*
*/
return;
添加、初始化窗口控件的地方
//创建一个继承自wxFrame的窗口对象
MyFrame *frame = new MyFrame(wxT("wokao"));
frame->Show(true);
return true;
END_EVENT_TABLE()
常用的控件介绍
菜单
wxMenuBar
wxMenu
----菜单栏
----菜单栏里面的元素,直接显示出来的,一级菜单
例:
wxMenuBar *menuBar = new wxMenuBar();
wxMenu *fileMenu = new wxMenu;
wxMenu *helpMenu = new wxMenu;
helpMenu->Append(wxID_ABOUT, "&F1", "FKU!");
fileMenu->Append(wxID_EXIT, "E&xittAlt-X", "FKU too!");
menuBar->Append(fileMenu, "&File");
menuBar->Append(helpMenu, "&Help");
SetMenuBar(menuBar);
首先new一个菜单栏的对象,然后创建一级菜单,然后用wxMenu::Append创建出二级菜单,
第一个参数是消息ID,
第二个包含了菜单显示的字符和快捷键,&后面的字符代表当前页面时,可
的快捷键,t后面的也是快捷键,不需要打开菜单就能触发
第三个是描述,会显示在属性栏
以触发 然后通过wxMenuBar::Append将菜单加入到菜单栏里面
最后将菜单栏加入到窗口界面中
常用的成员函数
wxMenu::AppendSeparator();//在菜单中添加一条横线
wxMenu::AppendSubMenu(fileMenu,"&QuittAlt-Q","我了个去");//添加一条子菜单,最后一个参数是描述
相应的事件格式
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
void MyFrame::OnAbout(wxCommandEvent &event)
按钮
wxButton(wxWindow *parent, //显示该按钮的容器
wxWindowID id, //消息ID
const wxString& label = wxEmptyString, //按钮显示的字符
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0, //具体样式见API
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxButtonNameStr)
例:new wxButton(Wind1,ID_BUTTON1,wxT("OK"),wxPoint(10,10));
响应的点击事件格式
EVT_BUTTON(ID_BUTTON1,MyFrame::OnButton)
void MyFrame::OnButton(wxCommandEvent& event);
位图按钮
wxBitmapButton
(比较wxButton的区别就是把 显示字符换成图片wxBitmapButton)
//消息ID
wxBitmapButton(wxWindow *parent, //显示该按钮的容器
wxWindowID id,
const wxBitmap& bitmap,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxBU_AUTODRAW,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxButtonNameStr)
例:
//创建一个image对象,外部读取图片资源
wxImage image(wxT(""));
//然后将图片转换成wxBitmap对象
wxBitmap bitmap(image);
new wxBitmapButton(Wind1,ID_BUTT,bitmap,wxPoint(10,30) );
响应的点击事件格式
EVT_BUTTON(wxID_OK,MyFrame::OnButton)
void MyFrame::OnButton(wxCommandEvent& event);
静态文本
//消息ID
wxStaticText(wxWindow *parent, //显示该控件的容器
wxWindowID id,
const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
const wxString& name = wxStaticTextNameStr)
例:
new wxStaticText(Wind1, ID_STXT,wxT("wolegequ"),wxPoint(500,10));
label就是要显示的字符 ->SetLabel(wxString)可以修改字符
文本输入框
wxTextCtrl(wxWindow *parent,
wxWindowID id,
const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxTextCtrlNameStr)
EVT_TEXT(id,func) //当文字发生改变时触发
EVT_TEXT_ENTER(id,func)//当按下enter建时触发
例:
new wxTextCtrl(Wind1, ID_TT1,
wxT("WOLEGEQU"),wxPoint(100,10),
wxSize(200,100),wxTE_MULTILINE);
value 默认显示的字符
style = wxTE_MULTILINE代表多行,其他样式见API
SetEditable(bool editable) 设置是否可以编辑
Func格式:void funcName(wxCommandEvent& event)
常用函数:
响应事件格式
下拉框
wxComboBox ( wxWindow * parent,
wxWindowID id,
const wxString & value,
const wxPoint & pos,
const wxSize & size,
const wxArrayString & choices,
long style = 0,
const wxValidator & validator = wxDefaultValidator,
const wxString & name = wxComboBoxNameStr
)
例:
wxArrayString MsgArr;
("aaaaaa");
("bbbbb");
("ccccc");
("ddddd");
wxComboBox *CBox = new wxComboBox(Wind1,
wxMYID_COMBO,wxT("ddddd"),wxPoint(10,200),wxSize(100,30),
MsgArr,wxCB_DROPDOWN);
创建一个字符串数组wxArrayString MsgArr; 然后创建出来一个下拉列表
Func格式:void FuncNmae(wxCommandEvent& event);
EVT_COMBOBOX(id, func)://当选择某个元素时触发事件,可以调用GetValue()查看选择了哪一个
事件格式:
滑块
wxSlider(wxWindow *parent, //显示容器
//消息ID
//初始值
//最小值
//最大值
wxWindowID id,
int value,
int minValue,
int maxValue,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxSL_HORIZONTAL, //水平滑调条
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxSliderNameStr)
选项框
例:
常用成员函数:
tValue(int)//设置滑块的值
GetValue();//返回滑块的值
new wxSlider(Wind1, wxMYID_SLIDER, 200, 0, 300,
wxPoint(10,140), wxSize(200,-1),
wxSL_HORIZONTAL|wxSL_LABELS|wxSL_TOP);
ORIZONTAL 是水平显示
SL_LABELS
SL_TOP
显示刻度
在上面显示刻度
部分常用样式:
响应事件格式
Func格式: void funcName(wxScrollEvent& event);
EVT_SLIDER(wxMYID_SLIDER, funcName) //当滑动的值改变时触发
wxCheckBox(wxWindow *parent,
wxWindowID id,
const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxCheckBoxNameStr)
常用成员函数:
常用事件
Func格式void OnCheckBox(wxCommandEvent& event)
EVT_CHECKBOX(wxMYID_CHBOX, OnCheckBox)//当状态改变时触发
Enable(bool enable = true) 设置是否能点击改变状态
SetValue(bool value) 主动设置状态
bool IsChecked() 返回状态
void SetLabel(wxString)设置文本字符
例:
new wxCheckBox(Wind1, wxMYID_CHBOX, wxT("我是字符"),wxPoint(10,110));
通过样式可以设置成3种状态的选项框
滚动条
wxScrollBar(wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxSB_HORIZONTAL,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxScrollBarNameStr)
这个是单独创建一个滚动条组件(详见API文档,这里主要介绍wxScrolledWindow)
如果需要创建带滚动条的窗口 可以直接使用容器wxScrolledWindow
wxScrolledWindow(wxWindow *parent,
wxWindowID winid = wxID_ANY,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxScrolledWindowStyle,
const wxString& name = wxPanelNameStr)
例:
wxScrolledWindow *Wind = new wxScrolledWindow(this, wxMYID_SCROLLED,
wxPoint(0,0), wxSize(500,400) );
1000,1000); //总共能有多少个单位
Wind->SetScrollbars(1,1, //每次移动像素
该函数主要设置窗口视口的大小和滑块每移动一次 里面容器移动的步长
int pixelsPerUnitY, //每次移动像素
wxScrolledWindow::SetScrollbars(int pixelsPerUnitX, //每次移动像素
int noUnitsX, int noUnitsY,//总共能有多少个单位
int xPos = 0, int yPos = 0,
bool noRefresh = false );
树结构
wxWindowID id = wxID_ANY,
const wxPoint & pos = wxDefaultPosition,
const wxSize & size = wxDefaultSize,
long style = wxTR_DEFAULT_STYLE,
const wxValidator & validator = wxDefaultValidator,
const wxString & name = wxTreeCtrlNameStr
)
wxTreeCtrl ( wxWindow * parent,
wxTreeCtrl *MyTree=new wxTreeCtrl(Wind1, wxMYID_TREE, wxPoint(10, 260), wxSize(100,200));
wxTreeItemId rootID1 = MyTree->AddRoot(wxT("我是第一个ROOT"));
wxTreeItemId citem1 = MyTree->AppendItem(rootID1,wxT("child11"));
wxTreeItemId citem2 = MyTree->AppendItem(citem1,wxT("child12"));
wxTreeItemId citem3 = MyTree->AppendItem(citem1,wxT("child13"));
创建一个wxTreeCtrl对象, 然后使用成员函数wxTreeCtrl::AddRoot创建一个根目录,返回一个wxTreeItemID对象,这个当作根节点,一个树形结构只能有一个根节点,否则会报错,然后使用成员函数
wxTreeCtrl::AppendItem创建子节点.
遍历某个树状控件的所有子项可以使用GetRootItem函数获得根节点,然后使用GetFirstChild和GetNextChild遍历所有子节点
常用事件响应
Func格式: void funcName(wxTreeEvent& event)
EVT_TREE_ITEM_ACTIVATED(wxMYID_TREE, funcName)//双击节点的时候触发
SetItemText(const wxTreeItemId & item, const wxString & text );设置某个节点的文字
DeleteChildren ( const wxTreeItemId & item ) ;删除所有该节点的直接子节点
标签页
wxNotebook ( wxWindow * parent,
wxWindowID id,
const wxPoint & pos = wxDefaultPosition,
const wxSize & size = wxDefaultSize,
long style = 0,
const wxString & name = wxNotebookNameStr
)
wxNotebook *MyNotebook;
MyNotebook = new wxNotebook(Wind1, wxMYID_NOTEBOOK, wxPoint(150,260),wxSize(400,300));
//创建面板
wxPanel *myPandl1 = new wxPanel(MyNotebook, wxID_ANY);
wxPanel *myPandl2 = new wxPanel(MyNotebook, wxID_ANY);
wxPanel *myPandl3 = new wxPanel(MyNotebook, wxID_ANY);
wxPanel *myPandl4 = new wxPanel(MyNotebook, wxID_ANY);
//将面板加入标签
MyNotebook->AddPage(myPandl1, wxT("我"));
MyNotebook->AddPage(myPandl2, wxT("了"));
MyNotebook->AddPage(myPandl3, wxT("个"));
MyNotebook->AddPage(myPandl4, wxT("去"));
创建一个wxNotebook对象,然后创建wxPanel对象,显示的容器设置为创建的MyNotebook,这就创建了容器.然后使用wxNotebook:: AddPage将容器绑定相应的标签,这就创建完成了,然后往响应的容易里面创建各个控件.(标签的显示可以通过样式style控制)
事件响应:
Func格式: void funcName(wxBookCtrlEvent& event);
EVT_NOTEBOOK_PAGE_CHANGED(id, func)://切换出当前页面时触发
EVT_NOTEBOOK_PAGE_CHANGING(id, func):// 切换到当前标签时触发
属性格
wxPropertyGrid
头文件 #include
库文件 wxmsw29ud_ wxmsw29ud_
wxPropertyGrid::wxPropertyGrid
( wxWindow*
wxWindowID*
parent,
id = wxID_ANY,
pos = wxDefultPosition
style = wxPG_DEFAULT_STYLE
const wxPoint&
long
const wxSize& size = wxDefaultSize
const wxChar* name = wxPropertyGridNameStr);
wxPropertyGrid *MyProperty;
//创建一个下拉列表形式的属性格
wxPGChoices chs;//列表对象
(wxT("我是傲娇的图片"), bitmap, 60+i); //直接将图片资源传入进去
MyProperty->Append( new wxEnumProperty(wxT("ddddd"),
chs) );//将列表加入到该属性格
常用的成员函数
wxPGProperty* wxPropertyGridEvent ::GetProperty();//获取当前改变的属性
void funcName(wxPropertyGridEvent& event)
事件格式:
Func格式:
EVT_PG_CHANGED( wxMYID_PROPERTY, funcName )//当某个属性发生变更时触发
MyProperty = new wxPropertyGrid(Wind1, wxMYID_PROPERTY, wxPoint(450,10),wxSize(300,200));
//创建一个字符串形式的属性格
//创建一个只能输入数字的属性格
//创建一个BOOL行的
//创建一个选择色块的属性
MyProperty->Append( new wxColourProperty(wxT("CustomColourProperty"), wxPG_LABEL) );
//创建一个选择路径的属性格
MyProperty->Append( new wxStringProperty("String Property", wxPG_LABEL) );
MyProperty->Append( new wxIntProperty("Int Property", wxPG_LABEL,10) );
MyProperty->Append( new wxBoolProperty("Bool Property", wxPG_LABEL) );
MyProperty->Append( new wxFileProperty( wxT("FileProperty"), wxT("TextFile") ) );
(wxT("我擦"),40);
wxPG_LABEL,


发布评论