wxWidgets:图像面板中的帧大小没有改变



我使用wxWidgets 'An Image Panel'代码。这里我只做了一个改动。我想让帧大小等于图像大小,我的图像大小是762x463,但我的帧大小不同。frame SetSize函数不工作

wxImagePanel::wxImagePanel(wxFrame* parent, wxString file, wxBitmapType format) :
wxPanel(parent)
{
image.LoadFile(file, format);
}
void wxImagePanel::paintEvent(wxPaintEvent & evt)
{
// depending on your system you may need to look at double-buffered dcs
wxPaintDC dc(this);
render(dc);
}
void wxImagePanel::paintNow()
{
// depending on your system you may need to look at double-buffered dcs
wxClientDC dc(this);
render(dc);
}
void wxImagePanel::render(wxDC&  dc)
{
dc.DrawBitmap( image, 0, 0, false );
}
class MyApp: public wxApp
{

wxFrame *frame;
wxImagePanel * drawPane;
public:
bool OnInit()
{
// make sure to call this first
wxInitAllImageHandlers();

wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
wxBitmap image(wxT("properties.png"), wxBITMAP_TYPE_PNG);
frame = new wxFrame(NULL, wxID_ANY, wxT("Hello wxDC"), wxPoint(50,50), wxSize(image.GetWidth(), image.GetHeight()));  // 762x463

// then simply create like this
drawPane = new wxImagePanel( frame, wxT("image.jpg"), wxBITMAP_TYPE_JPEG);
sizer->Add(drawPane, 1, wxEXPAND);

frame->SetSizer(sizer);

frame->Show();
return true;
} 

};

要设置显示图像的帧大小,需要做2个更改:

  1. 在构造器wxImagePanel::wxImagePanel中,您需要添加一行来设置图像面板的最小尺寸。
wxImagePanel::wxImagePanel(wxFrame* parent, wxString file, wxBitmapType format) :
wxPanel(parent)
{
image.LoadFile(file, format);
SetMinSize(image.GetSize());
...

一个替代的,可能更好的解决方案是覆盖wxWindow::DoGetBestClientSize为您的wxImagePanel类,并让它返回image.GetSize();

顺便说一下,在上面显示的代码中,实际上没有任何东西将绘制处理程序连接到绘制事件,因此您可能还想添加像 这样的行
Bind(wxEVT_PAINT, &wxImagePanel::paintEvent, this);

的构造函数

  1. MyApp::OnInit的正文中,修改
  2. 一行
frame->SetSizer(sizer);

frame->SetSizerAndFit(sizer);

使用SetSizerAndFit方法将告诉框架将自身调整为显示其所有内容所需的最小尺寸。由于在步骤1中,图像面板的最小大小被设置为image的大小,并且图像面板是框架的唯一内容,因此框架将调整大小以适合图像。

最新更新