Make wxProgressDialog::Fit() work in native MSW version

This method is supposed to adjust the dialog size to its contents and
while the dialog increases automatically when using native
implementation under MSW, it doesn't shrink back on its own and so it's
still useful to allow Fit() to do it.

Update the sample to test Fit() too.
This commit is contained in:
Vadim Zeitlin
2017-10-27 01:34:10 +02:00
parent 0736bdfb28
commit 0473d14ef1
4 changed files with 26 additions and 1 deletions

View File

@@ -44,6 +44,7 @@ public:
virtual void SetIcons(const wxIconBundle& icons) wxOVERRIDE; virtual void SetIcons(const wxIconBundle& icons) wxOVERRIDE;
virtual void DoMoveWindow(int x, int y, int width, int height) wxOVERRIDE; virtual void DoMoveWindow(int x, int y, int width, int height) wxOVERRIDE;
virtual void DoGetPosition(int *x, int *y) const wxOVERRIDE; virtual void DoGetPosition(int *x, int *y) const wxOVERRIDE;
virtual void Fit() wxOVERRIDE;
virtual bool Show( bool show = true ) wxOVERRIDE; virtual bool Show( bool show = true ) wxOVERRIDE;

View File

@@ -196,7 +196,8 @@ public:
conform to the length of the new message if desired. The dialog does conform to the length of the new message if desired. The dialog does
not do this automatically, except for the native MSW implementation not do this automatically, except for the native MSW implementation
which does increase the dialog size if necessary (but still doesn't which does increase the dialog size if necessary (but still doesn't
shrink it back even if the text becomes shorter). shrink it back even if the text becomes shorter and you need to call
Fit() explicitly if you want this to happen).
@param value @param value
The new value of the progress meter. It should be less than or equal to The new value of the progress meter. It should be less than or equal to

View File

@@ -360,6 +360,11 @@ bool MyApp::OnInit()
case 30: case 30:
msg = "Back to brevity"; msg = "Back to brevity";
break; break;
case 80:
msg = "Back and adjusted";
dlg.Fit();
break;
} }
if ( !dlg.Update(i, msg) ) if ( !dlg.Update(i, msg) )

View File

@@ -767,6 +767,24 @@ void wxProgressDialog::DoGetPosition(int *x, int *y) const
wxGenericProgressDialog::DoGetPosition(x, y); wxGenericProgressDialog::DoGetPosition(x, y);
} }
void wxProgressDialog::Fit()
{
#ifdef wxHAS_MSW_TASKDIALOG
if ( HasNativeTaskDialog() )
{
wxCriticalSectionLocker locker(m_sharedData->m_cs);
// Force the task dialog to use this message to adjust it layout.
m_sharedData->m_msgChangeElementText = TDM_SET_ELEMENT_TEXT;
// Don't change the message, but pretend that it did change.
m_sharedData->m_notifications |= wxSPDD_MESSAGE_CHANGED;
}
#endif // wxHAS_MSW_TASKDIALOG
wxGenericProgressDialog::Fit();
}
bool wxProgressDialog::Show(bool show) bool wxProgressDialog::Show(bool show)
{ {
#ifdef wxHAS_MSW_TASKDIALOG #ifdef wxHAS_MSW_TASKDIALOG