【问题标题】:Button in wxwidgets -Different bahaviourswxwidgets 中的按钮 - 不同的行为
【发布时间】:2012-07-17 08:33:33
【问题描述】:

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

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

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

艾玛

【问题讨论】:

  • 如果您要创建两个按钮,为什么它们都显示会让您感到惊讶?还是我答错了?
  • 它怎么可能重复?不像 wxpython 是小部件 + phython 但我遇到的问题是纯 wxwidgets
  • @emma 使用相同的布局算法

标签: c++ user-interface wxwidgets


【解决方案1】:

wxFrame documentation 中所述,wxFrame 的唯一子代将始终调整大小以适应其整个客户区,因为这是您通常想要的。

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

wxFrame 处理以下事件:

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

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

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

【讨论】:

  • 有趣。从来没有注意到这一点 - 我猜是因为我总是处理调整大小事件。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多