0

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

我正在使用 .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); 

它显示两个按钮在指定的点对齐,但是在声明单个按钮的情况下,它显示按钮在整个框架上拉伸,为什么会这样?

艾玛

4

2 回答 2

1

我认为问题在于您已将值 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 - 最终您会遇到一些很难调试的奇怪行为。

于 2012-07-17T15:24:26.630 回答
1

正如wxFrame 文档中提到的,唯一的孩子wxFrame总是会调整大小以适应其整个客户区,因为这是您通常想要的。

除非,也就是说,您自己处理调整大小事件。

wxFrame 处理以下事件:

wxEVT_SIZE:如果框架只有一个子窗口,不包括状态和工具栏,这个子窗口被调整大小以占据整个框架客户区。如果存在两个或多个窗口,则应通过手动处理 wxEVT_SIZE 或使用 sizers 显式布局它们;

这是创建框架的子项,然后将所有控件创建为此面板的子项的原因之一(另一个原因是您需要使用wxPanel键盘导航才能工作) 。wxPanel

顺便说一句,考虑使用在任何情况下都无法正常工作的大小而不是绝对定位。

于 2012-07-21T17:58:06.323 回答