wxNO_FULL_REPAINT_ON_RESIZE logic for wxMSW
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3164 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -588,7 +588,7 @@ enum
|
|||||||
|
|
||||||
// don't invalidate the whole window (resulting in a PAINT event) when the
|
// don't invalidate the whole window (resulting in a PAINT event) when the
|
||||||
// window is resized (currently, makes sense for wxMSW only)
|
// window is resized (currently, makes sense for wxMSW only)
|
||||||
#define wxNO_FULLREPAINT_ON_RESIZE 0x00010000
|
#define wxNO_FULL_REPAINT_ON_RESIZE 0x00010000
|
||||||
/*
|
/*
|
||||||
* wxFrame/wxDialog style flags
|
* wxFrame/wxDialog style flags
|
||||||
*/
|
*/
|
||||||
|
@@ -654,8 +654,7 @@ bool wxApp::CheckForKeyDown(WXEvent* event)
|
|||||||
wxKeyEvent keyEvent(wxEVT_KEY_DOWN);
|
wxKeyEvent keyEvent(wxEVT_KEY_DOWN);
|
||||||
wxTranslateKeyEvent(keyEvent, win, (Widget) 0, xEvent);
|
wxTranslateKeyEvent(keyEvent, win, (Widget) 0, xEvent);
|
||||||
|
|
||||||
win->ProcessEvent( keyEvent );
|
return win->ProcessEvent( keyEvent );
|
||||||
return (keyEvent.GetSkipped() != TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@@ -916,7 +916,7 @@ WXWidget wxMenu::CreateMenu (wxMenuBar * menuBar, WXWidget parent, wxMenu * topM
|
|||||||
#else
|
#else
|
||||||
xmCascadeButtonWidgetClass, (Widget) parent,
|
xmCascadeButtonWidgetClass, (Widget) parent,
|
||||||
#endif
|
#endif
|
||||||
XmNlabelString, label_str,
|
XmNlabelString, label_str(),
|
||||||
XmNsubMenuId, menu,
|
XmNsubMenuId, menu,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
@@ -108,9 +108,15 @@ MSG s_currentMsg;
|
|||||||
wxApp *wxTheApp = NULL;
|
wxApp *wxTheApp = NULL;
|
||||||
|
|
||||||
// FIXME why not const? and not static?
|
// FIXME why not const? and not static?
|
||||||
|
|
||||||
|
// NB: all "NoRedraw" classes must have the same names as the "normal" classes
|
||||||
|
// with NR suffix - wxWindow::MSWCreate() supposes this
|
||||||
wxChar wxFrameClassName[] = _T("wxFrameClass");
|
wxChar wxFrameClassName[] = _T("wxFrameClass");
|
||||||
|
wxChar wxFrameClassNameNoRedraw[] = _T("wxFrameClassNR");
|
||||||
wxChar wxMDIFrameClassName[] = _T("wxMDIFrameClass");
|
wxChar wxMDIFrameClassName[] = _T("wxMDIFrameClass");
|
||||||
|
wxChar wxMDIFrameClassNameNoRedraw[] = _T("wxMDIFrameClassNR");
|
||||||
wxChar wxMDIChildFrameClassName[] = _T("wxMDIChildFrameClass");
|
wxChar wxMDIChildFrameClassName[] = _T("wxMDIChildFrameClass");
|
||||||
|
wxChar wxMDIChildFrameClassNameNoRedraw[] = _T("wxMDIChildFrameClassNR");
|
||||||
wxChar wxPanelClassName[] = _T("wxPanelClass");
|
wxChar wxPanelClassName[] = _T("wxPanelClass");
|
||||||
wxChar wxCanvasClassName[] = _T("wxCanvasClass");
|
wxChar wxCanvasClassName[] = _T("wxCanvasClass");
|
||||||
|
|
||||||
@@ -278,11 +284,15 @@ bool wxApp::RegisterWindowClasses()
|
|||||||
{
|
{
|
||||||
WNDCLASS wndclass;
|
WNDCLASS wndclass;
|
||||||
|
|
||||||
|
// for each class we register one with CS_(V|H)REDRAW style and one
|
||||||
|
// without for windows created with wxNO_FULL_REDRAW_ON_REPAINT flag
|
||||||
|
static const long styleNormal = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
|
||||||
|
static const long styleNoRedraw = CS_DBLCLKS;
|
||||||
|
|
||||||
// the fields which are common to all classes
|
// the fields which are common to all classes
|
||||||
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
|
|
||||||
wndclass.lpfnWndProc = (WNDPROC)wxWndProc;
|
wndclass.lpfnWndProc = (WNDPROC)wxWndProc;
|
||||||
wndclass.cbClsExtra = 0;
|
wndclass.cbClsExtra = 0;
|
||||||
wndclass.cbWndExtra = sizeof( DWORD ); // what is this DWORD used for?
|
wndclass.cbWndExtra = sizeof( DWORD ); // VZ: what is this DWORD used for?
|
||||||
wndclass.hInstance = wxhInstance;
|
wndclass.hInstance = wxhInstance;
|
||||||
wndclass.hIcon = (HICON) NULL;
|
wndclass.hIcon = (HICON) NULL;
|
||||||
wndclass.hCursor = ::LoadCursor((HINSTANCE)NULL, IDC_ARROW);
|
wndclass.hCursor = ::LoadCursor((HINSTANCE)NULL, IDC_ARROW);
|
||||||
@@ -290,9 +300,7 @@ bool wxApp::RegisterWindowClasses()
|
|||||||
|
|
||||||
// Register the frame window class.
|
// Register the frame window class.
|
||||||
wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
|
wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
|
||||||
#ifdef _MULTIPLE_INSTANCES
|
wndclass.style = styleNormal;
|
||||||
sprintf( wxFrameClassName,"wxFrameClass%d", wxhInstance );
|
|
||||||
#endif
|
|
||||||
wndclass.lpszClassName = wxFrameClassName;
|
wndclass.lpszClassName = wxFrameClassName;
|
||||||
|
|
||||||
if ( !RegisterClass(&wndclass) )
|
if ( !RegisterClass(&wndclass) )
|
||||||
@@ -302,9 +310,20 @@ bool wxApp::RegisterWindowClasses()
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "no redraw" frame
|
||||||
|
wndclass.lpszClassName = wxFrameClassNameNoRedraw;
|
||||||
|
wndclass.style = styleNoRedraw;
|
||||||
|
|
||||||
|
if ( !RegisterClass(&wndclass) )
|
||||||
|
{
|
||||||
|
wxLogLastError("RegisterClass(no redraw frame)");
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
// Register the MDI frame window class.
|
// Register the MDI frame window class.
|
||||||
wndclass.hbrBackground = (HBRUSH)NULL; // paint MDI frame ourselves
|
wndclass.hbrBackground = (HBRUSH)NULL; // paint MDI frame ourselves
|
||||||
wndclass.lpszClassName = wxMDIFrameClassName;
|
wndclass.lpszClassName = wxMDIFrameClassNameNoRedraw;
|
||||||
|
|
||||||
if ( !RegisterClass(&wndclass) )
|
if ( !RegisterClass(&wndclass) )
|
||||||
{
|
{
|
||||||
@@ -313,6 +332,17 @@ bool wxApp::RegisterWindowClasses()
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "no redraw" MDI frame
|
||||||
|
wndclass.lpszClassName = wxMDIFrameClassName;
|
||||||
|
wndclass.style = styleNoRedraw;
|
||||||
|
|
||||||
|
if ( !RegisterClass(&wndclass) )
|
||||||
|
{
|
||||||
|
wxLogLastError("RegisterClass(no redraw MDI parent frame)");
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
// Register the MDI child frame window class.
|
// Register the MDI child frame window class.
|
||||||
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
|
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
|
||||||
wndclass.lpszClassName = wxMDIChildFrameClassName;
|
wndclass.lpszClassName = wxMDIChildFrameClassName;
|
||||||
@@ -324,6 +354,17 @@ bool wxApp::RegisterWindowClasses()
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "no redraw" MDI child frame
|
||||||
|
wndclass.lpszClassName = wxMDIChildFrameClassNameNoRedraw;
|
||||||
|
wndclass.style = styleNoRedraw;
|
||||||
|
|
||||||
|
if ( !RegisterClass(&wndclass) )
|
||||||
|
{
|
||||||
|
wxLogLastError("RegisterClass(no redraw MDI child)");
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
// Register the panel window class.
|
// Register the panel window class.
|
||||||
wndclass.hbrBackground = (HBRUSH) GetStockObject( LTGRAY_BRUSH );
|
wndclass.hbrBackground = (HBRUSH) GetStockObject( LTGRAY_BRUSH );
|
||||||
wndclass.lpszClassName = wxPanelClassName;
|
wndclass.lpszClassName = wxPanelClassName;
|
||||||
|
@@ -2254,6 +2254,12 @@ bool wxWindow::MSWCreate(int id,
|
|||||||
if ( style & WS_CHILD )
|
if ( style & WS_CHILD )
|
||||||
controlId = id;
|
controlId = id;
|
||||||
|
|
||||||
|
wxString className(wclass);
|
||||||
|
if ( GetWindowStyleFlag() & wxNO_FULL_REPAINT_ON_RESIZE )
|
||||||
|
{
|
||||||
|
className += _T("NR");
|
||||||
|
}
|
||||||
|
|
||||||
m_hWnd = (WXHWND)CreateWindowEx(extendedStyle,
|
m_hWnd = (WXHWND)CreateWindowEx(extendedStyle,
|
||||||
wclass,
|
wclass,
|
||||||
title ? title : _T(""),
|
title ? title : _T(""),
|
||||||
|
Reference in New Issue
Block a user