Center task dialog-based wxProgressDialog on the parent window.

wxProgressDialog was created without the parent when using task dialogs so it
was centred on screen and not on its parent as usual. Fix this by explicitly
positioning it so that it's centered over the parent.

Closes #12699.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66244 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-11-23 13:11:02 +00:00
parent bbb03ec995
commit a4984245b6
2 changed files with 25 additions and 0 deletions

View File

@@ -449,6 +449,7 @@ MSW:
- Fix Cygwin 1.7 build (David Gangola).
- Allow using wxDC::DrawText() with multiline texts.
- Fix wxBitmapButton best size determination broken in 2.9.1.
- Center task dialog-based wxProgressDialog on the parent (John Roberts).

View File

@@ -73,10 +73,12 @@ public:
m_progressBarMarquee = false;
m_skipped = false;
m_notifications = 0;
m_parent = NULL;
}
wxCriticalSection m_cs;
wxWindow *m_parent; // Parent window only used to center us over it.
HWND m_hwnd; // Task dialog handler
long m_style; // wxProgressDialog style
int m_value;
@@ -632,6 +634,7 @@ bool wxProgressDialog::Show(bool show)
m_sharedData->m_range = m_maximum;
m_sharedData->m_state = Uncancelable;
m_sharedData->m_style = GetPDStyle();
m_sharedData->m_parent = GetTopParent();
if ( HasPDFlag(wxPD_CAN_ABORT) )
{
@@ -821,6 +824,27 @@ wxProgressDialogTaskRunner::TaskDialogCallbackProc
0,
MAKELPARAM(0, sharedData->m_range) );
// We always create this task dialog with NULL parent because our
// parent in wx sense is a window created from a different thread
// and so can't be used as our real parent. However we still center
// this window on the parent one as the task dialogs do with their
// real parent usually.
if ( sharedData->m_parent )
{
wxRect rect(wxRectFromRECT(wxGetWindowRect(hwnd)));
rect = rect.CentreIn(sharedData->m_parent->GetRect());
::SetWindowPos(hwnd,
NULL,
rect.x,
rect.y,
-1,
-1,
SWP_NOACTIVATE |
SWP_NOOWNERZORDER |
SWP_NOSIZE |
SWP_NOZORDER);
}
// If we can't be aborted, the "Close" button will only be enabled
// when the progress ends (and not even then with wxPD_AUTO_HIDE).
if ( !(sharedData->m_style & wxPD_CAN_ABORT) )