simplify the code for extended flags handling fixing a rare bug with wxSTAY_ON_TOP being ignored in some situations
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49086 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -168,6 +168,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_MENU(DIALOGS_CENTRE_SCREEN, MyFrame::DlgCenteredScreen)
|
EVT_MENU(DIALOGS_CENTRE_SCREEN, MyFrame::DlgCenteredScreen)
|
||||||
EVT_MENU(DIALOGS_CENTRE_PARENT, MyFrame::DlgCenteredParent)
|
EVT_MENU(DIALOGS_CENTRE_PARENT, MyFrame::DlgCenteredParent)
|
||||||
EVT_MENU(DIALOGS_MINIFRAME, MyFrame::MiniFrame)
|
EVT_MENU(DIALOGS_MINIFRAME, MyFrame::MiniFrame)
|
||||||
|
EVT_MENU(DIALOGS_ONTOP, MyFrame::DlgOnTop)
|
||||||
|
|
||||||
#if wxUSE_STARTUP_TIPS
|
#if wxUSE_STARTUP_TIPS
|
||||||
EVT_MENU(DIALOGS_TIP, MyFrame::ShowTip)
|
EVT_MENU(DIALOGS_TIP, MyFrame::ShowTip)
|
||||||
@@ -390,6 +391,7 @@ bool MyApp::OnInit()
|
|||||||
dialogs_menu->Append(DIALOGS_CENTRE_SCREEN, _T("Centered on &screen\tShift-Ctrl-1"));
|
dialogs_menu->Append(DIALOGS_CENTRE_SCREEN, _T("Centered on &screen\tShift-Ctrl-1"));
|
||||||
dialogs_menu->Append(DIALOGS_CENTRE_PARENT, _T("Centered on &parent\tShift-Ctrl-2"));
|
dialogs_menu->Append(DIALOGS_CENTRE_PARENT, _T("Centered on &parent\tShift-Ctrl-2"));
|
||||||
dialogs_menu->Append(DIALOGS_MINIFRAME, _T("&Mini frame"));
|
dialogs_menu->Append(DIALOGS_MINIFRAME, _T("&Mini frame"));
|
||||||
|
dialogs_menu->Append(DIALOGS_ONTOP, _T("Dialog staying on &top"));
|
||||||
menuDlg->Append(wxID_ANY, _T("&Generic dialogs"), dialogs_menu);
|
menuDlg->Append(wxID_ANY, _T("&Generic dialogs"), dialogs_menu);
|
||||||
|
|
||||||
#if USE_SETTINGS_DIALOG
|
#if USE_SETTINGS_DIALOG
|
||||||
@@ -1057,6 +1059,15 @@ void MyFrame::MiniFrame(wxCommandEvent& WXUNUSED(event))
|
|||||||
frame->Show();
|
frame->Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyFrame::DlgOnTop(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
wxDialog dlg(this, wxID_ANY, _T("Dialog staying on top of other windows"),
|
||||||
|
wxDefaultPosition, wxSize(300, 100),
|
||||||
|
wxDEFAULT_DIALOG_STYLE | wxSTAY_ON_TOP);
|
||||||
|
(new wxButton(&dlg, wxID_OK, _T("Close")))->Centre();
|
||||||
|
dlg.ShowModal();
|
||||||
|
}
|
||||||
|
|
||||||
#if wxUSE_STARTUP_TIPS
|
#if wxUSE_STARTUP_TIPS
|
||||||
void MyFrame::ShowTip(wxCommandEvent& WXUNUSED(event))
|
void MyFrame::ShowTip(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
|
@@ -268,6 +268,7 @@ public:
|
|||||||
void DlgCenteredScreen(wxCommandEvent& event);
|
void DlgCenteredScreen(wxCommandEvent& event);
|
||||||
void DlgCenteredParent(wxCommandEvent& event);
|
void DlgCenteredParent(wxCommandEvent& event);
|
||||||
void MiniFrame(wxCommandEvent& event);
|
void MiniFrame(wxCommandEvent& event);
|
||||||
|
void DlgOnTop(wxCommandEvent& event);
|
||||||
|
|
||||||
#if wxUSE_PROGRESSDLG
|
#if wxUSE_PROGRESSDLG
|
||||||
void ShowProgress(wxCommandEvent& event);
|
void ShowProgress(wxCommandEvent& event);
|
||||||
@@ -366,6 +367,7 @@ enum
|
|||||||
DIALOGS_CENTRE_SCREEN,
|
DIALOGS_CENTRE_SCREEN,
|
||||||
DIALOGS_CENTRE_PARENT,
|
DIALOGS_CENTRE_PARENT,
|
||||||
DIALOGS_MINIFRAME,
|
DIALOGS_MINIFRAME,
|
||||||
|
DIALOGS_ONTOP,
|
||||||
DIALOGS_MODELESS_BTN,
|
DIALOGS_MODELESS_BTN,
|
||||||
DIALOGS_PROGRESS,
|
DIALOGS_PROGRESS,
|
||||||
DIALOGS_ABOUTDLG_SIMPLE,
|
DIALOGS_ABOUTDLG_SIMPLE,
|
||||||
|
@@ -423,25 +423,10 @@ bool wxTopLevelWindowMSW::CreateDialog(const void *dlgTemplate,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
WXDWORD exflags;
|
|
||||||
(void)MSWGetCreateWindowFlags(&exflags);
|
|
||||||
|
|
||||||
if ( exflags )
|
|
||||||
{
|
|
||||||
::SetWindowLong(GetHwnd(), GWL_EXSTYLE, exflags);
|
|
||||||
::SetWindowPos(GetHwnd(),
|
|
||||||
exflags & WS_EX_TOPMOST ? HWND_TOPMOST : 0,
|
|
||||||
0, 0, 0, 0,
|
|
||||||
SWP_NOSIZE |
|
|
||||||
SWP_NOMOVE |
|
|
||||||
(exflags & WS_EX_TOPMOST ? 0 : SWP_NOZORDER) |
|
|
||||||
SWP_NOACTIVATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if !defined(__WXWINCE__)
|
#if !defined(__WXWINCE__)
|
||||||
// For some reason, the system menu is activated when we use the
|
// For some reason, the system menu is activated when we use the
|
||||||
// WS_EX_CONTEXTHELP style, so let's set a reasonable icon
|
// WS_EX_CONTEXTHELP style, so let's set a reasonable icon
|
||||||
if ( exflags & WS_EX_CONTEXTHELP )
|
if ( HasExtraStyle(wxWS_EX_CONTEXTHELP) )
|
||||||
{
|
{
|
||||||
wxFrame *winTop = wxDynamicCast(wxTheApp->GetTopWindow(), wxFrame);
|
wxFrame *winTop = wxDynamicCast(wxTheApp->GetTopWindow(), wxFrame);
|
||||||
if ( winTop )
|
if ( winTop )
|
||||||
@@ -455,7 +440,7 @@ bool wxTopLevelWindowMSW::CreateDialog(const void *dlgTemplate,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif // !__WXWINCE__
|
||||||
|
|
||||||
// move the dialog to its initial position without forcing repainting
|
// move the dialog to its initial position without forcing repainting
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
@@ -561,7 +546,7 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent,
|
|||||||
|
|
||||||
// reuse the code in MSWGetStyle() but correct the results slightly for
|
// reuse the code in MSWGetStyle() but correct the results slightly for
|
||||||
// the dialog
|
// the dialog
|
||||||
dlgTemplate->style = MSWGetStyle(style, NULL);
|
dlgTemplate->style = MSWGetStyle(style, &dlgTemplate->dwExtendedStyle);
|
||||||
|
|
||||||
// all dialogs are popups
|
// all dialogs are popups
|
||||||
dlgTemplate->style |= WS_POPUP;
|
dlgTemplate->style |= WS_POPUP;
|
||||||
|
Reference in New Issue
Block a user