天天看點

23、wxWidgets對話框之自定義對話框

23、wxWidgets對話框之自定義對話框

class MyCustomDialog:public wxDialog

{

public:

    MyCustomDialog(const wxString& title);

protected:

    void OnClose(wxCommandEvent& event);

    void OnCloseWindow(wxCloseEvent& event);

};

MyCustomDialog::MyCustomDialog(const wxString& title)

    :wxDialog(NULL,-1,title,wxDefaultPosition,wxDefaultSize)

{

    //為較低分辨率的螢幕調整對話框.自動滾屏

    wxDialog::EnableLayoutAdaptation(true);

    wxStaticBoxSizer* sbSizer = new wxStaticBoxSizer(wxVERTICAL,this,"Colors");

    wxRadioButton* rb256 = new wxRadioButton(this,-1,"256 Colors");

    wxRadioButton* rbCus = new wxRadioButton(this,-1,"custom");

    sbSizer->Add(rb256,1,wxEXPAND|wxALL,5);

    sbSizer->Add(rbCus,1,wxEXPAND|wxALL,5);

    wxBoxSizer* hbox = new wxBoxSizer(wxHORIZONTAL);

    wxButton* btnOK = new wxButton(this,-1,"OK");

    wxButton* btnClose = new wxButton(this,-1,"Close");

    hbox->Add(btnOK,1,wxALL,5);

    hbox->Add(btnClose,1,wxALL,5);

    wxBoxSizer *szMain = new wxBoxSizer(wxVERTICAL);

    szMain->Add(sbSizer,1,wxEXPAND|wxALL,10);

    szMain->Add(hbox,1,wxALIGN_RIGHT,10);

    SetSizer(szMain);

    Bind(wxEVT_CLOSE_WINDOW,MyCustomDialog::OnCloseWindow,this);

    Bind(wxEVT_COMMAND_BUTTON_CLICKED,MyCustomDialog::OnClose,this,btnClose->GetId());

    Centre();

    ShowModal();

    Destroy();

}

void MyCustomDialog::OnClose(wxCommandEvent& event)

{

    //生成一個wxCloseEvent

    Close(false);

//    PostMessage((HWND__ *)this->GetHandle(),WM_CLOSE,0,0);

}

void MyCustomDialog::OnCloseWindow(wxCloseEvent& event)

{

    if(event.CanVeto())

    {

        if ( wxMessageBox(wxT("确定要退出嗎"), wxT("請确認"),

                          wxICON_QUESTION | wxYES_NO) == wxYES )

        {

            event.Skip();

        }

        else

        {

            event.Veto();

        }

    }

}