C++ wxwidgets中的按钮-不同的Bahavious
我想问一下如何从一个点调整按钮在特定位置的大小,这是我写的,但是按钮会出现在整个屏幕上,请帮助 我使用的是.cpp文件,而不是.h和.cpp文件C++ wxwidgets中的按钮-不同的Bahavious,c++,user-interface,wxwidgets,C++,User Interface,Wxwidgets,我想问一下如何从一个点调整按钮在特定位置的大小,这是我写的,但是按钮会出现在整个屏幕上,请帮助 我使用的是.cpp文件,而不是.h和.cpp文件 enum { BUTTON_Generate = 2, }; bool MyApp::OnInit() { MyFrame *frame = new MyFrame( _("Key Generator"), wxPoint(1, 1),wxSize(450, 450)); frame->Connect( BUTTON_Gen
enum
{
BUTTON_Generate = 2,
};
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame( _("Key Generator"), wxPoint(1, 1),wxSize(450, 450));
frame->Connect( BUTTON_Generate, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)
&MyFrame::OnAbout);
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame( NULL, -1, title, pos, size )
{
GenerateKey = new wxButton(this, BUTTON_Generate, _T("Generate Key"), wxPoint(200,
200), wxSize(10,10), 0);
}
但是如果我写:
另一个按钮为:
GenerateKey2 = new wxButton(this, BUTTON_Generate, _T("Generate Key"), wxPoint(200,
200), wxSize(10,10), 0);
它显示在指定点对齐的两个按钮,但是在声明单个按钮的情况下,它显示在整个框架上拉伸的按钮,为什么会这样
Emma我认为问题在于您已将值2指定给按钮的窗口id。wxWidgets在内部使用该值进行其他操作 要设置与wxWidgets使用的ID不冲突的窗口ID,请执行以下操作:
// IDs for the controls and the menu commands
enum ControlIDs {
lastwxwidgetid = wxID_HIGHEST,
BUTTON_Generate;
};
这将迫使您的新ID高于wxWidgets使用的ID
看来VZ的答案是正确的。但是,在分配冲突的窗口ID时仍应小心-最终会出现一些难以调试的奇怪行为。如中所述,wxFrame
的唯一子窗口总是会调整大小以适应其整个客户端区域,因为这是您通常想要的
除非您自己处理调整大小事件
wxFrame处理以下事件:
wxEVT_SIZE:如果框架正好有一个子窗口,则不计算
在状态和工具栏中,此子对象的大小将调整为包含整个帧
客户区。如果有两个或两个以上的窗户,则应铺设窗户
通过手动处理wxEVT_大小或使用大小器显式输出
这是将wxPanel
创建为框架的子级,然后将所有控件创建为此面板的子级的原因之一(另一个原因是需要使用wxPanel
进行键盘导航才能工作)