-1

我正在尝试使用wxIS_KIND_OF宏获取wxSizer类类型。几秒钟后,我的程序完成,但没有显示我的应用程序的主窗口。

这是代码:

wxXmlResource::Get()->LoadFrame((wxFrame*)this,  (wxWindow*)NULL , wxT("MyFrame1"));

wxPanel* container = (wxPanel*)FindWindowByName("m_panel1");
if (!container){
    cout << "Error loading container!" << endl << flush;
}
else{
    for (unsigned int i=0; i<3; i++){
        auxPanelArray[i] = new wxPanel( container, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
        wxXmlResource::Get()->LoadPanel( auxPanelArray[i] , wxT("MyPanel6"));

        wxSizer* mySizer = auxPanelArray[i]->GetSizer();
        if (wxIS_KIND_OF(mySizer, wxStaticBoxSizer)){
            cout << "Your sizer is a wxStaticBoxSizer" << endl << flush;
            ((wxStaticBoxSizer*)mySizer)->GetStaticBox()->SetLabel("My new label");
        }

        container->GetSizer()->Add(auxPanelArray[i]);
    }
}

在我的 XRC 中,sizer 类型是 wxStaticBoxSizer,所以 wxIS_KIND_OF 应该检测到它并进入 if 块。

为什么它不起作用?

更新 这是 XRC 文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwindows.org/wxxrc" version="2.3.0.1">
    <object class="wxPanel" name="MyPanel6">
        <style>wxTAB_TRAVERSAL</style>
        <object class="wxStaticBoxSizer">
            <minsize>100,100</minsize>
            <orient>wxVERTICAL</orient>
            <label>label</label>
            <object class="sizeritem">
                <option>1</option>
                <flag>wxEXPAND|wxALL</flag>
                <border>5</border>
                <object class="wxBoxSizer">
                    <orient>wxHORIZONTAL</orient>
                    <object class="sizeritem">
                        <option>0</option>
                        <flag>wxALL</flag>
                        <border>5</border>
                        <object class="wxStaticText" name="m_staticText12">
                            <label>MyLabel</label>
                            <wrap>-1</wrap>
                        </object>
                    </object>
                    <object class="sizeritem">
                        <option>0</option>
                        <flag>wxALL</flag>
                        <border>5</border>
                        <object class="wxTextCtrl" name="m_textCtrl4">
                            <value></value>
                        </object>
                    </object>
                </object>
            </object>
            <object class="sizeritem">
                <option>0</option>
                <flag>wxALL</flag>
                <border>5</border>
                <object class="wxButton" name="m_button8">
                    <label>MyButton</label>
                    <default>0</default>
                </object>
            </object>
        </object>
    </object>
</resource>
4

1 回答 1

1

wxIS_KIND_OF()当然,必须为 工作wxStaticBoxSizer,所以要么 sizer 不是这种类型,要么你的代码实际上正在执行但没有任何效果,因为你的标准输出没有显示在任何地方——这是默认情况下在 GUI 应用程序中的情况在 Windows 下。

我还建议使用wxDynamicCast()而不是wxIS_KIND_OF

wxStaticBoxSizer* boxSizer = wxDynamicCast(mySizer, wxStaticBoxSizer);
if ( boxSizer ) {
   ... just use it now, no need for more casts ...
}
于 2013-04-09T13:09:09.190 回答