gpt4 book ai didi

c++ - wxTextCtrl 未对齐中心 - wxSizerFlags 在 wxWidget 中不起作用

转载 作者:行者123 更新时间:2023-11-28 06:21:14 25 4
gpt4 key购买 nike

此代码显示单个文本框和一个按钮。当用户单击按钮时,窗口退出,但是我想将 textControl 放在窗口的中心,但它不起作用。这是我的代码:

// base.h

#ifndef base_h_
#define base_h_
#include <wx/app.h>
#include <wx/button.h>
#include <wx/string.h>
#include <wx/frame.h>
#include <wx/gdicmn.h>
#include <wx/sizer.h>
#include <wx/panel.h>

class MainApp : public wxApp {
public:
virtual bool OnInit();
};

class MainFrame: public wxFrame {
public:
MainFrame( const
wxString& title, const wxPoint& pos, const wxSize& size );

wxBoxSizer *sizer;
void OnExit(wxCommandEvent& event);

DECLARE_EVENT_TABLE()
};

#endif

// base.cpp
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include "base.h"

IMPLEMENT_APP(MainApp)

bool MainApp::OnInit() {
MainFrame *MainWin = new MainFrame(_T("gui"), wxDefaultPosition, wxSize(5000, 5000));

MainWin->Show(TRUE);
SetTopWindow(MainWin);
return TRUE;
}

BEGIN_EVENT_TABLE ( MainFrame, wxFrame)
EVT_BUTTON ( 3, MainFrame::OnExit )
END_EVENT_TABLE()

MainFrame::MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size): wxFrame((wxFrame*)NULL,- 1, title, pos, size) {

wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
wxPanel *panel = new wxPanel(this, wxID_ANY, wxPoint(0, 0));
sizer->Add(new wxTextCtrl(panel , 1, ""), wxSizerFlags().Center());
sizer->SetSizeHints(this);
SetSizer(sizer);
}

void MainFrame::OnExit( wxCommandEvent& event) {
Close(TRUE);
}

我不知道我在这里做错了什么,wxSizerFlags().Center 不应该做我想要的吗?

最佳答案

您的文本控件包装在 wxPanel 中。您将文本控件添加到 sizer,并将 sizer 设置到框架。这不会起作用,甚至可能会导致错误。您需要创建两个 sizer,一个用于面板,一个用于框架。您有几种选择:您可以将面板扩展到框架的大小并将文本 ctrl 放置在面板的中央,或者您可以将面板居中并将文本 ctrl 扩展到面板的大小。这是第一个选项的一些代码:

wxPanel* panel = new wxPanel(this, wxID_ANY);
wxTextCtrl* text = new wxTextCtrl(panel, 1, "");

wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL);
panelSizer->Add(text, wxSizerFlags().Center());
panel->SetSizer(panelSizer);

wxBoxSizer* frameSizer = new wxBoxSizer(wxVERTICAL);
frameSizer->Add(panel, wxSizerFlags().Expand());
SetSizer(frameSizer);

请注意,我不熟悉 wxSizerFlags,但我想它应该像这样工作。您可能还必须明确设置面板的大小 - 现在它将使用一些默认大小。

关于c++ - wxTextCtrl 未对齐中心 - wxSizerFlags 在 wxWidget 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29281526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com