C++ wxwidgets中的按钮-不同的Bahavious

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

我想问一下如何从一个点调整按钮在特定位置的大小,这是我写的,但是按钮会出现在整个屏幕上,请帮助

我使用的是.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_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
进行键盘导航才能工作)


如果你在创建两个按钮,为什么它们都显示出来让你吃惊?或者我的问题搞错了吗?可能的重复怎么可能的重复?不像wxpython是widgets+phython,但我的问题是纯粹的wxwidgets@emma在测试中使用相同的布局算法。从未注意到这一点-我想是因为我总是处理调整大小事件。