如何打开特定 windows 到 wxWidgets 上的特定按钮?
How to open specific windows to specific buttons on wxWidgets?
我在来这里之前进行了研究,但找不到任何有用的信息。请告诉我,因为我是 wxWidgets 和 C++ GUI 的新手。我创建了一个 3x3 的网格,每个按钮都有自己的用途。单击时,有些按钮应该打开一个新页面,至少包含按钮文本所说的内容,而其他按钮应该将您定向到按钮上的网站。我尝试在事件处理程序中创建一个新的 window 但即使我使用 Show();
也没有任何显示
我有一个 cApp,class 是应用程序的启动器,cMain 是图形界面实现。我只会显示cMain。
cMAIN.H
#pragma once
//Graphical interface component
#include "wx/wx.h"
class cMain : public wxFrame
{
public:
cMain();
~cMain();
public:
int nFieldWidth = 3;
int nFieldHeight = 3;
wxButton** btn;
void OnButtonClicked0(wxCommandEvent& evt);
void OnButtonClicked1(wxCommandEvent &evt);
void OnButtonClicked2(wxCommandEvent &evt);
void OnButtonClicked3(wxCommandEvent &evt);
void OnButtonClicked4(wxCommandEvent &evt);
void OnButtonClicked5(wxCommandEvent &evt);
void OnButtonClicked6(wxCommandEvent &evt);
void OnButtonClicked7(wxCommandEvent &evt);
void OnButtonClicked8(wxCommandEvent &evt);
wxDECLARE_EVENT_TABLE();
};
cMAIN.CPP
#include "cMain.h"
#include "cApp.h"
#include <string>
wxBEGIN_EVENT_TABLE(cMain, wxFrame)
EVT_BUTTON(0, OnButtonClicked0)
EVT_BUTTON(1, OnButtonClicked1)
EVT_BUTTON(2, OnButtonClicked2)
EVT_BUTTON(3, OnButtonClicked3)
EVT_BUTTON(4, OnButtonClicked4)
EVT_BUTTON(5, OnButtonClicked5)
EVT_BUTTON(6, OnButtonClicked6)
EVT_BUTTON(7, OnButtonClicked7)
EVT_BUTTON(8, OnButtonClicked8)
wxEND_EVENT_TABLE();
cMain::cMain() : wxFrame(nullptr, wxID_ANY, "3x3Grid", wxPoint(30,30), wxSize(800,600))//overriding the frame
{
btn = new wxButton * [nFieldWidth * nFieldHeight]; // creating an array of buttons of size nFW * nFH
wxGridSizer* grid = new wxGridSizer(nFieldWidth, nFieldHeight, 10, 10); //creating new sizer grid
wxFont font(24, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false);
for (int x = 0; x < nFieldWidth; x++)
{
for (int y = 0; y < nFieldHeight; y++)
{
btn[y * nFieldWidth + x] = new wxButton(this, 10000 + (y * nFieldWidth + x), std::to_string(y * nFieldWidth + x)); //sets button[index] = a new button
btn[y * nFieldWidth + x]->SetFont(font); //set font
grid->Add(btn[y * nFieldWidth + x], 1, wxEXPAND | wxALL); //adds button to grid
}
}
btn[0]->SetLabel("Input Data");
btn[1]->SetLabel("Read Data from File");
btn[2]->SetLabel("Open www.website.com");
btn[3]->SetLabel("Lookup Data");
btn[4]->SetLabel("Open website.com");
btn[5]->SetLabel("Open https://website.com");
btn[6]->SetLabel("Store Data to File");
btn[7]->SetLabel("Open https://website.com");
btn[8]->SetLabel("Help");
this->SetSizer(grid);
grid->Layout();
}
cMain::~cMain()
{
delete[]btn;
}
void cMain::OnButtonClicked0(wxCommandEvent& evt)
{
cMain* inputwindow = new cMain();
inputwindow->Show();
}
void cMain::OnButtonClicked1(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked2(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked3(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked4(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked5(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked6(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked7(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked8(wxCommandEvent& evt)
{
}
按钮 ID 和 EVT_BUTTON(id) 不匹配。例如按钮 0 的 id 是 10000,而不是 0。
在之前的回复之上:
您应该考虑使用 wxID_HIGHEST
而不是 1000,或者只使用 wxID_ANY 和 Bind()
函数。
我在来这里之前进行了研究,但找不到任何有用的信息。请告诉我,因为我是 wxWidgets 和 C++ GUI 的新手。我创建了一个 3x3 的网格,每个按钮都有自己的用途。单击时,有些按钮应该打开一个新页面,至少包含按钮文本所说的内容,而其他按钮应该将您定向到按钮上的网站。我尝试在事件处理程序中创建一个新的 window 但即使我使用 Show();
也没有任何显示
我有一个 cApp,class 是应用程序的启动器,cMain 是图形界面实现。我只会显示cMain。
cMAIN.H
#pragma once
//Graphical interface component
#include "wx/wx.h"
class cMain : public wxFrame
{
public:
cMain();
~cMain();
public:
int nFieldWidth = 3;
int nFieldHeight = 3;
wxButton** btn;
void OnButtonClicked0(wxCommandEvent& evt);
void OnButtonClicked1(wxCommandEvent &evt);
void OnButtonClicked2(wxCommandEvent &evt);
void OnButtonClicked3(wxCommandEvent &evt);
void OnButtonClicked4(wxCommandEvent &evt);
void OnButtonClicked5(wxCommandEvent &evt);
void OnButtonClicked6(wxCommandEvent &evt);
void OnButtonClicked7(wxCommandEvent &evt);
void OnButtonClicked8(wxCommandEvent &evt);
wxDECLARE_EVENT_TABLE();
};
cMAIN.CPP
#include "cMain.h"
#include "cApp.h"
#include <string>
wxBEGIN_EVENT_TABLE(cMain, wxFrame)
EVT_BUTTON(0, OnButtonClicked0)
EVT_BUTTON(1, OnButtonClicked1)
EVT_BUTTON(2, OnButtonClicked2)
EVT_BUTTON(3, OnButtonClicked3)
EVT_BUTTON(4, OnButtonClicked4)
EVT_BUTTON(5, OnButtonClicked5)
EVT_BUTTON(6, OnButtonClicked6)
EVT_BUTTON(7, OnButtonClicked7)
EVT_BUTTON(8, OnButtonClicked8)
wxEND_EVENT_TABLE();
cMain::cMain() : wxFrame(nullptr, wxID_ANY, "3x3Grid", wxPoint(30,30), wxSize(800,600))//overriding the frame
{
btn = new wxButton * [nFieldWidth * nFieldHeight]; // creating an array of buttons of size nFW * nFH
wxGridSizer* grid = new wxGridSizer(nFieldWidth, nFieldHeight, 10, 10); //creating new sizer grid
wxFont font(24, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false);
for (int x = 0; x < nFieldWidth; x++)
{
for (int y = 0; y < nFieldHeight; y++)
{
btn[y * nFieldWidth + x] = new wxButton(this, 10000 + (y * nFieldWidth + x), std::to_string(y * nFieldWidth + x)); //sets button[index] = a new button
btn[y * nFieldWidth + x]->SetFont(font); //set font
grid->Add(btn[y * nFieldWidth + x], 1, wxEXPAND | wxALL); //adds button to grid
}
}
btn[0]->SetLabel("Input Data");
btn[1]->SetLabel("Read Data from File");
btn[2]->SetLabel("Open www.website.com");
btn[3]->SetLabel("Lookup Data");
btn[4]->SetLabel("Open website.com");
btn[5]->SetLabel("Open https://website.com");
btn[6]->SetLabel("Store Data to File");
btn[7]->SetLabel("Open https://website.com");
btn[8]->SetLabel("Help");
this->SetSizer(grid);
grid->Layout();
}
cMain::~cMain()
{
delete[]btn;
}
void cMain::OnButtonClicked0(wxCommandEvent& evt)
{
cMain* inputwindow = new cMain();
inputwindow->Show();
}
void cMain::OnButtonClicked1(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked2(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked3(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked4(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked5(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked6(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked7(wxCommandEvent& evt)
{
}
void cMain::OnButtonClicked8(wxCommandEvent& evt)
{
}
按钮 ID 和 EVT_BUTTON(id) 不匹配。例如按钮 0 的 id 是 10000,而不是 0。
在之前的回复之上:
您应该考虑使用 wxID_HIGHEST
而不是 1000,或者只使用 wxID_ANY 和 Bind()
函数。