Microsoft KB Archive/177352

= How To Work with Invalid Rectangle When Window Is Resized =

Article ID: 177352

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 4.0 Standard Edition

 Microsoft Visual C++ 4.1 Subscription

 Microsoft Visual C++ 4.2 Enterprise Edition

 Microsoft Visual C++ 4.2 Professional Edition</li></ul>

 Microsoft Visual C++ 5.0 Enterprise Edition</li></ul>

 Microsoft Visual C++ 5.0 Professional Edition</li></ul>

 Microsoft Visual C++ 6.0 Enterprise Edition</li></ul>

 Microsoft Visual C++ 6.0 Professional Edition</li></ul>

 Microsoft Visual C++ 6.0 Standard Edition</li></ul>

 Microsoft Visual C++ 1.52 Professional Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q177352

<div class="summary_section">

SUMMARY
This article describes how to work with the invalidated rectangle that is created when a window is resized.

<div class="moreinformation_section">

MORE INFORMATION
To optimize painting in an MFC program, you can usually call GetClipBox in your view's OnDraw function to get the invalid rectangle and paint only in this area. However, if the user resizes the window, GetClipBox l always returns the whole client area. This happens because the "window class" used for CView and CFrameWnd has the styles CS_VREDRAW and CS_HREDRAW. These styles cause the whole window to be invalidated whenever the window is resized. To work around this problem, you have to register your own window class for the view and the frame which do not have the class styles of CS_VREDRAW and CS_HREDRAW. You can register the class name in InitApplication and use the class name in PreCreateWindow.

Sample Code
class CTestApp : public CWinApp {  public: CString m_strMyClassName; ...  }

BOOL CTestApp::InitApplication {  // Register our own class with the same attributes as AfxFrameOrView"   // refer to MFC Tech Note 1: Window Class Registration for more   // information.         m_strMyClassName = AfxRegisterWndClass (0, ::LoadCursor (NULL,                            IDC_ARROW), (HBRUSH)(COLOR_WINDOW+1),                            LoadIcon(AFX_IDI_STD_FRAME));

return CWinApp::InitApplication; }

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {        CTestApp* pApp = (CTestApp*)AfxGetApp ; // Change the class name to our own name. cs.lpszClass = (const char *)(pApp->m_strMyClassName);

return CFrameWnd::PreCreateWindow(cs); }

BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs) {        CTestApp* pApp = (CTestApp*)AfxGetApp ; // Change the class name to our own name. cs.lpszClass = (const char *)(pApp->m_strMyClassName);

return CView::PreCreateWindow(cs); }

Keywords: kbhowto kbuidesign KB177352

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.