added (MSW/GTK) and documented new frame and dialog flags

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8523 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-10-11 13:16:37 +00:00
parent 2fb40b2cd2
commit b3daa5a322
8 changed files with 69 additions and 36 deletions

View File

@@ -43,14 +43,20 @@ dialog to respond to system close events.
\twocolitem{\windowstyle{wxSTAY\_ON\_TOP}}{The dialog stays on top of all other windows (Windows only).} \twocolitem{\windowstyle{wxSTAY\_ON\_TOP}}{The dialog stays on top of all other windows (Windows only).}
\twocolitem{\windowstyle{wxNO\_3D}}{Under Windows, specifies that the child controls \twocolitem{\windowstyle{wxNO\_3D}}{Under Windows, specifies that the child controls
should not have 3D borders unless specified in the control.} should not have 3D borders unless specified in the control.}
\twocolitem{\windowstyle{wxDIALOG\_NO\_PARENT}}{By default, the dialogs crated
with {\tt NULL} parent window will be given the
\helpref{applications top level window}{wxappgettopwindow} as parent. Use this
style to prevent this from happening and create a really orphan dialog (note
that this is not recommended for modal dialogs).}
\twocolitem{\windowstyle{wxDIALOG\_EX\_CONTEXTHELP}}{Under Windows, puts a query button on the \twocolitem{\windowstyle{wxDIALOG\_EX\_CONTEXTHELP}}{Under Windows, puts a query button on the
caption. When pressed, Windows will go into a context-sensitive help mode and wxWindows will send caption. When pressed, Windows will go into a context-sensitive help mode and wxWindows will send
a wxEVT\_HELP event if the user clicked on an application window. {\it Note} that this is an extended a wxEVT\_HELP event if the user clicked on an application window. {\it Note} that this is an extended
style and must be set by calling \helpref{SetExtraStyle}{wxwindowsetextrastyle} before Create is called (two-step construction).} style and must be set by calling \helpref{SetExtraStyle}{wxwindowsetextrastyle} before Create is called (two-step construction).}
\end{twocollist} \end{twocollist}
Under Unix or Linux, MWM (the Motif Window Manager) or other window managers reckognizing Under Unix or Linux, MWM (the Motif Window Manager) or other window managers
the MHM hints should be running for any of these styles to have an effect. reckognizing the MHM hints should be running for any of these styles to have an
effect.
See also \helpref{Generic window styles}{windowstyles}. See also \helpref{Generic window styles}{windowstyles}.

View File

@@ -34,12 +34,15 @@ application windows.
\twocolitem{\windowstyle{wxSTAY\_ON\_TOP}}{Stay on top of other windows. Windows only.} \twocolitem{\windowstyle{wxSTAY\_ON\_TOP}}{Stay on top of other windows. Windows only.}
\twocolitem{\windowstyle{wxSYSTEM\_MENU}}{Displays a system menu.} \twocolitem{\windowstyle{wxSYSTEM\_MENU}}{Displays a system menu.}
\twocolitem{\windowstyle{wxSIMPLE\_BORDER}}{Displays no border or decorations. GTK and Windows only.} \twocolitem{\windowstyle{wxSIMPLE\_BORDER}}{Displays no border or decorations. GTK and Windows only.}
\twocolitem{\windowstyle{wxRESIZE\_BORDER}}{Displays a resizeable border around the window (Unix only).} \twocolitem{\windowstyle{wxRESIZE\_BORDER}}{Displays a resizeable border around the window.}
\twocolitem{\windowstyle{wxFRAME\_FLOAT\_ON\_PARENT}}{Causes the frame to be above the parent window in the \twocolitem{\windowstyle{wxFRAME\_TOOL\_WINDOW}}{Causes a frame with a small
z-order and not shown in the taskbar. Without this style, frames are created as top-level windows that may be obscured by titlebar to be created; the frame does not appear in the taskbar under Windows.}
the parent window, and frame titles are shown in the taskbar. Windows and GTK.} \twocolitem{\windowstyle{wxFRAME\_NO\_TASKBAR}}{Creates a normal frame but if
\twocolitem{\windowstyle{wxFRAME\_TOOL\_WINDOW}}{Causes a frame with a small titlebar to be created; this frame has a parent it does not appear in the taskbar under Windows. Note
the frame title does not appear in the taskbar. Windows only.} that a frame without parent will still appear in the taskbar even with this
style. Has no effect under other platforms.}
\twocolitem{\windowstyle{wxFRAME\_FLOAT\_ON\_PARENT}}{Unused any longer, use
wxFRAME\_TOOL\_WINDOW or wxFRAME\_NO\_TASKBAR instead}
\twocolitem{\windowstyle{wxFRAME\_EX\_CONTEXTHELP}}{Under Windows, puts a query button on the \twocolitem{\windowstyle{wxFRAME\_EX\_CONTEXTHELP}}{Under Windows, puts a query button on the
caption. When pressed, Windows will go into a context-sensitive help mode and wxWindows will send caption. When pressed, Windows will go into a context-sensitive help mode and wxWindows will send
a wxEVT\_HELP event if the user clicked on an application window. {\it Note} that this is an extended a wxEVT\_HELP event if the user clicked on an application window. {\it Note} that this is an extended

View File

@@ -912,10 +912,15 @@ enum wxStretch
#define wxTINY_CAPTION_VERT 0x0080 #define wxTINY_CAPTION_VERT 0x0080
#define wxRESIZE_BORDER 0x0040 #define wxRESIZE_BORDER 0x0040
#define wxDIALOG_NO_PARENT 0x0001 // Don't make owned by apps top window
#define wxFRAME_NO_TASKBAR 0x0002 // No taskbar button (MSW only)
#define wxFRAME_TOOL_WINDOW 0x0004 // No taskbar button, no system menu
// deprecated versions defined for compatibility reasons // deprecated versions defined for compatibility reasons
#define wxRESIZE_BOX wxMAXIMIZE_BOX #define wxRESIZE_BOX wxMAXIMIZE_BOX
#define wxTHICK_FRAME wxRESIZE_BORDER #define wxTHICK_FRAME wxRESIZE_BORDER
// obsolete styles, unused any more
#define wxDIALOG_MODAL 0x0020 #define wxDIALOG_MODAL 0x0020
#define wxDIALOG_MODELESS 0x0000 #define wxDIALOG_MODELESS 0x0000
@@ -1156,12 +1161,6 @@ enum wxStretch
#define wxSP_FULLSASH 0x0400 #define wxSP_FULLSASH 0x0400
#define wxSP_3D (wxSP_3DBORDER | wxSP_3DSASH) #define wxSP_3D (wxSP_3DBORDER | wxSP_3DSASH)
/*
* wxFrame extra flags
*/
// No title on taskbar
#define wxFRAME_TOOL_WINDOW 0x0004
/* /*
* wxTabCtrl flags * wxTabCtrl flags
*/ */

View File

@@ -632,7 +632,9 @@ int wxDialog::ShowModal()
return GetReturnCode(); return GetReturnCode();
} }
if ( !GetParent() ) // use the apps top level window as parent if none given unless explicitly
// forbidden
if ( !GetParent() && !(GetWindowStyleFlag() & wxDIALOG_NO_PARENT) )
{ {
wxWindow *parent = wxTheApp->GetTopWindow(); wxWindow *parent = wxTheApp->GetTopWindow();
if ( parent && parent != this ) if ( parent && parent != this )

View File

@@ -632,7 +632,9 @@ int wxDialog::ShowModal()
return GetReturnCode(); return GetReturnCode();
} }
if ( !GetParent() ) // use the apps top level window as parent if none given unless explicitly
// forbidden
if ( !GetParent() && !(GetWindowStyleFlag() & wxDIALOG_NO_PARENT) )
{ {
wxWindow *parent = wxTheApp->GetTopWindow(); wxWindow *parent = wxTheApp->GetTopWindow();
if ( parent && parent != this ) if ( parent && parent != this )

View File

@@ -107,7 +107,8 @@ void wxDialog::Init()
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE)); SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
} }
bool wxDialog::Create(wxWindow *parent, wxWindowID id, bool wxDialog::Create(wxWindow *parent,
wxWindowID id,
const wxString& title, const wxString& title,
const wxPoint& pos, const wxPoint& pos,
const wxSize& size, const wxSize& size,
@@ -122,9 +123,8 @@ bool wxDialog::Create(wxWindow *parent, wxWindowID id,
wxTopLevelWindows.Append(this); wxTopLevelWindows.Append(this);
// windowFont = wxTheFontList->FindOrCreateFont(11, wxSWISS, wxNORMAL, wxNORMAL); if ( parent )
parent->AddChild(this);
if (parent) parent->AddChild(this);
if ( id == -1 ) if ( id == -1 )
m_windowId = (int)NewControlId(); m_windowId = (int)NewControlId();
@@ -159,6 +159,7 @@ bool wxDialog::Create(wxWindow *parent, wxWindowID id,
if (m_exStyle & wxDIALOG_EX_CONTEXTHELP) if (m_exStyle & wxDIALOG_EX_CONTEXTHELP)
extendedStyle |= WS_EX_CONTEXTHELP; extendedStyle |= WS_EX_CONTEXTHELP;
#endif #endif
// Allows creation of dialogs with & without captions under MSWindows, // Allows creation of dialogs with & without captions under MSWindows,
// resizeable or not (but a resizeable dialog always has caption - // resizeable or not (but a resizeable dialog always has caption -
// otherwise it would look too strange) // otherwise it would look too strange)

View File

@@ -666,12 +666,12 @@ bool wxFrame::MSWCreate(int id, wxWindow *parent, const wxChar *wclass, wxWindow
WXDWORD extendedStyle = MakeExtendedStyle(style); WXDWORD extendedStyle = MakeExtendedStyle(style);
// make all frames appear in the win9x shell taskbar unless // make all frames appear in the win9x shell taskbar unless
// wxFRAME_TOOL_WINDOW is explicitly given - without giving them // wxFRAME_TOOL_WINDOW or wxFRAME_NO_TASKBAR is given - without giving them
// WS_EX_APPWINDOW style, the child (i.e. owned) frames wouldn't appear in it // WS_EX_APPWINDOW style, the child (i.e. owned) frames wouldn't appear in it
#if !defined(__WIN16__) && !defined(__SC__) #if !defined(__WIN16__) && !defined(__SC__)
if ( style & wxFRAME_TOOL_WINDOW ) if ( style & wxFRAME_TOOL_WINDOW )
extendedStyle |= WS_EX_TOOLWINDOW; extendedStyle |= WS_EX_TOOLWINDOW;
else else if ( !(style & wxFRAME_NO_TASKBAR) )
extendedStyle |= WS_EX_APPWINDOW; extendedStyle |= WS_EX_APPWINDOW;
#endif #endif

View File

@@ -2366,14 +2366,22 @@ bool wxWindow::MSWCreate(int id,
} }
#endif // 0 #endif // 0
HWND hParent = (HWND)NULL; HWND hParent = parent ? GetHwndOf(parent) : NULL;
if ( parent )
hParent = (HWND) parent->GetHWND();
wxWndHook = this; wxWndHook = this;
if ( dialog_template ) if ( dialog_template )
{ {
// for the dialogs without wxDIALOG_NO_PARENT style, use the top level
// app window as parent - this avoids creating modal dialogs without
// parent
if ( !hParent && !(GetWindowStyleFlag() & wxDIALOG_NO_PARENT) )
{
wxWindow *winTop = wxTheApp->GetTopWindow();
if ( winTop )
hParent = GetHwndOf(winTop);
}
m_hWnd = (WXHWND)::CreateDialog(wxGetInstance(), m_hWnd = (WXHWND)::CreateDialog(wxGetInstance(),
dialog_template, dialog_template,
hParent, hParent,
@@ -2381,27 +2389,37 @@ bool wxWindow::MSWCreate(int id,
if ( m_hWnd == 0 ) if ( m_hWnd == 0 )
{ {
wxLogError(_("Can't find dummy dialog template!\nCheck resource include path for finding wx.rc.")); wxLogError(_("Can't find dialog template '%s'!\nCheck resource include path for finding wx.rc."),
dialog_template);
return FALSE; return FALSE;
} }
if ( extendedStyle != 0 ) if ( extendedStyle != 0 )
{ {
::SetWindowLong(GetHwnd(), GWL_EXSTYLE, extendedStyle); ::SetWindowLong(GetHwnd(), GWL_EXSTYLE, extendedStyle);
::SetWindowPos(GetHwnd(), NULL, 0, 0, 0, 0, ::SetWindowPos(GetHwnd(), NULL, 0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); SWP_NOSIZE |
SWP_NOMOVE |
SWP_NOZORDER |
SWP_NOACTIVATE);
} }
#if defined(__WIN95__) #if defined(__WIN95__)
// 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 (extendedStyle & WS_EX_CONTEXTHELP) if (extendedStyle & WS_EX_CONTEXTHELP)
{ {
if (wxTheApp->GetTopWindow() && (wxTheApp->GetTopWindow()->IsKindOf(CLASSINFO(wxFrame)))) wxFrame *winTop = wxDynamicCast(wxTheApp->GetTopWindow(), wxFrame);
if ( winTop )
{ {
wxIcon icon = ((wxFrame*)wxTheApp->GetTopWindow())->GetIcon(); wxIcon icon = winTop->GetIcon();
if ( icon.Ok() ) if ( icon.Ok() )
SendMessage(GetHwnd(), WM_SETICON, {
(WPARAM)TRUE, (LPARAM)(HICON) icon.GetHICON()); ::SendMessage(GetHwnd(), WM_SETICON,
(WPARAM)TRUE,
(LPARAM)GetHiconOf(icon));
}
} }
} }
#endif // __WIN95__ #endif // __WIN95__
@@ -2426,7 +2444,7 @@ bool wxWindow::MSWCreate(int id,
wxLogLastError(wxT("MoveWindow")); wxLogLastError(wxT("MoveWindow"));
} }
} }
else else // creating a normal window, not a dialog
{ {
int controlId = 0; int controlId = 0;
if ( style & WS_CHILD ) if ( style & WS_CHILD )
@@ -2462,6 +2480,7 @@ bool wxWindow::MSWCreate(int id,
} }
wxWndHook = NULL; wxWndHook = NULL;
#ifdef __WXDEBUG__ #ifdef __WXDEBUG__
wxNode* node = wxWinHandleList->Member(this); wxNode* node = wxWinHandleList->Member(this);
if (node) if (node)
@@ -2472,7 +2491,8 @@ bool wxWindow::MSWCreate(int id,
wxLogError(wxT("A second HWND association is being added for the same window!")); wxLogError(wxT("A second HWND association is being added for the same window!"));
} }
} }
#endif #endif // Debug
wxAssociateWinWithHandle((HWND) m_hWnd, this); wxAssociateWinWithHandle((HWND) m_hWnd, this);
return TRUE; return TRUE;