fixed bug 424212 (unworking close button in the progress dialog)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10473 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2001-06-09 16:49:56 +00:00
parent ed582841a2
commit c4d305b7bd
3 changed files with 57 additions and 6 deletions

View File

@ -82,6 +82,9 @@ public:
bool Iconized() const { return IsIconized(); };
#endif
// wxMSW only: remove the "Close" button from the dialog
bool EnableCloseButton(bool enable = TRUE);
// implementation only from now on
// -------------------------------

View File

@ -92,6 +92,18 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
m_windowStyle |= style;
bool hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
#ifdef __WXMSW__
// we have to remove the "Close" button from the title bar then as it is
// confusing to have it - it doesn't work anyhow
//
// FIXME: should probably have a (extended?) window style for this
if ( !hasAbortButton )
{
EnableCloseButton(FALSE);
}
#endif // wxMSW
m_state = hasAbortButton ? Continue : Uncancelable;
m_maximum = maximum;
@ -123,13 +135,13 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
if ( maximum > 0 )
{
// note that we can't use wxGA_SMOOTH because it happens to also mean
// wxDIALOG_MODAL and will cause the dialog to be modal. Have an extra
// style argument to wxProgressDialog, perhaps.
m_gauge = new wxGauge(this, -1, maximum,
wxDefaultPosition, wxDefaultSize,
wxGA_HORIZONTAL | wxRAISED_BORDER);
// Sorry, but wxGA_SMOOTH happens to also mean wxDIALOG_MODAL and will
// cause the dialog to be modal. Have an extra style argument to wxProgressDialog,
// perhaps.
// wxGA_HORIZONTAL | wxRAISED_BORDER | (style & wxGA_SMOOTH));
wxDefaultPosition, wxDefaultSize,
wxGA_HORIZONTAL);
c = new wxLayoutConstraints;
c->left.SameAs(this, wxLeft, 2*LAYOUT_X_MARGIN);
c->top.Below(m_msg, 2*LAYOUT_Y_MARGIN);
@ -309,6 +321,12 @@ wxProgressDialog::Update(int value, const wxString& newmsg)
// tell the user what he should do...
m_btnAbort->SetLabel(_("Close"));
}
#ifdef __WXMSW__
else // enable the close button to give the user a way to close the dlg
{
EnableCloseButton(TRUE);
}
#endif // __WXMSW__
if ( !newmsg )
{

View File

@ -192,6 +192,36 @@ bool wxDialog::Create(wxWindow *parent,
return TRUE;
}
bool wxDialog::EnableCloseButton(bool enable)
{
// get system (a.k.a. window) menu
HMENU hmenu = ::GetSystemMenu(GetHwnd(), FALSE /* get it */);
if ( !hmenu )
{
wxLogLastError(_T("GetSystemMenu"));
return FALSE;
}
// enabling/disabling the close item from it also automatically
// disables/enabling the close title bar button
if ( !::EnableMenuItem(hmenu, SC_CLOSE,
MF_BYCOMMAND | (enable ? MF_ENABLED : MF_GRAYED)) )
{
wxLogLastError(_T("DeleteMenu(SC_CLOSE)"));
return FALSE;
}
// update appearance immediately
if ( !::DrawMenuBar(GetHwnd()) )
{
wxLogLastError(_T("DrawMenuBar"));
}
return TRUE;
}
void wxDialog::SetModal(bool flag)
{
if ( flag )