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:
Vadim Zeitlin
1999-07-27 15:15:36 +00:00
parent 106e25cccf
commit 193fe98904
5 changed files with 56 additions and 10 deletions

View File

@@ -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
*/ */

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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(""),