[commit] r2771 - trunk/GME/Gme

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Mon Jul 8 13:30:35 CDT 2019


Author: ksmyth
Date: Mon Jul  8 13:30:35 2019
New Revision: 2771

Log:
GMEView: recreate offscreen buffer to new SM_CXMAXTRACK dimensions after WM_DISPLAYCHANGE. Fixes bug where right side of model editor wasn't rendered after increasing screen resolution

Modified:
   trunk/GME/Gme/GME.rc
   trunk/GME/Gme/GMEChildFrameWrapper.h
   trunk/GME/Gme/GMEView.cpp
   trunk/GME/Gme/GMEView.h
   trunk/GME/Gme/MainFrm.cpp
   trunk/GME/Gme/MainFrm.h

Modified: trunk/GME/Gme/GME.rc
==============================================================================
--- trunk/GME/Gme/GME.rc	Fri Dec 28 14:27:16 2018	(r2770)
+++ trunk/GME/Gme/GME.rc	Mon Jul  8 13:30:35 2019	(r2771)
@@ -1450,7 +1450,7 @@
 STRINGTABLE
 BEGIN
     IDR_MAINFRAME           "GME"
-    IDR_GMETYPE             "\nGME\nGME\n\n\nGME.Project\nGME Project"
+    IDR_GMETYPE             "GMEChildFrame\nGME\nGME\n\n\nGME.Project\nGME Project"
     ID_WINDOW_MANAGER       """Manages the currently open windows\nWindow List"""
 END
 

Modified: trunk/GME/Gme/GMEChildFrameWrapper.h
==============================================================================
--- trunk/GME/Gme/GMEChildFrameWrapper.h	Fri Dec 28 14:27:16 2018	(r2770)
+++ trunk/GME/Gme/GMEChildFrameWrapper.h	Mon Jul  8 13:30:35 2019	(r2771)
@@ -37,8 +37,10 @@
 		const RECT& rect, CWnd* pParentWnd, UINT nID,
 		CFile* pPersist = NULL, BOOL bStorage = FALSE,
 		BSTR bstrLicKey = NULL)
-	{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
-		pPersist, bStorage, bstrLicKey); }
+	{
+		return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
+			pPersist, bStorage, bstrLicKey);
+	}
 
 // Attributes
 public:

Modified: trunk/GME/Gme/GMEView.cpp
==============================================================================
--- trunk/GME/Gme/GMEView.cpp	Fri Dec 28 14:27:16 2018	(r2770)
+++ trunk/GME/Gme/GMEView.cpp	Mon Jul  8 13:30:35 2019	(r2771)
@@ -564,6 +564,7 @@
 	ON_COMMAND(ID_MULTIUSER_SHOWOWNER, OnViewMultiUserShowObjectOwner)
 	ON_UPDATE_COMMAND_UI( ID_MULTIUSER_SHOWOWNER, OnUpdateViewMultiUserShowObjectOwner)
 	ON_WM_KILLFOCUS()
+	ON_MESSAGE(WM_DISPLAYCHANGE, OnDisplayChange)
 
 	ON_COMMAND(ID_VIEW_SHOWCONNECTEDPORTSONLY, &CGMEView::OnViewShowconnectedportsonly)
 	ON_UPDATE_COMMAND_UI(ID_VIEW_SHOWCONNECTEDPORTSONLY, &CGMEView::OnUpdateViewShowconnectedportsonly)
@@ -698,10 +699,7 @@
 		// update & disable some components
 		theApp.UpdateCompList4CurrentKind( CGMEApp::m_no_model_open_string);
 
-        ::RestoreDC(*offScreen, offScreenCreated);
-		delete offScreen;
-		delete ofsbmp;
-		offScreenCreated = 0;
+		DeleteOffScreen();
 		if( CMainFrame::theInstance != NULL ) {
 			CMainFrame::theInstance->SetPartBrowserMetaModel(NULL);
 			CMainFrame::theInstance->SetPartBrowserBg(::GetSysColor(COLOR_APPWORKSPACE));
@@ -837,6 +835,7 @@
 		onScreen->GetClipBox(&onScreenClipBox);
 		if (onScreenClipBox.IsRectEmpty()) // empty check is enough: windows may never overlap, since they don't float
 			return;
+		CreateOffScreen(pDC);
 		pDC = offScreen;
 		OnPrepareDC(pDC);
 	}
@@ -2928,10 +2927,8 @@
 	offScreen = new CDC;
 	BOOL success = offScreen->CreateCompatibleDC(dc);
 	ASSERT(success);
-	ASSERT(::GetSystemMetrics(SM_SAMEDISPLAYFORMAT));
 	// In multi-monitor systems a window can bigger than just one screen, monitor resolutions can be different, etc.
 	// TODO: Maybe we should calculate with SM_CXMAXTRACK,SM_CYMAXTRACK? A window can be larger than the displays!!!
-	// TODO: handle run-time resolution changes!
 	int offScreenWidth = GetSystemMetrics(SM_CXMAXTRACK);
 	int offScreenHeight = GetSystemMetrics(SM_CYMAXTRACK);
 //	int offScreenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN);
@@ -2945,6 +2942,15 @@
     offScreen->SelectObject(ofsbmp);
 }
 
+void CGMEView::DeleteOffScreen() {
+	if (offScreenCreated) {
+		::RestoreDC(*offScreen, offScreenCreated);
+		delete offScreen;
+		delete ofsbmp;
+		offScreenCreated = 0;
+	}
+}
+
 void CGMEView::SetScroll()
 {
 	CRect objext, annext, extent;
@@ -4639,6 +4645,7 @@
 BOOL CGMEView::OnEraseBkgnd(CDC* pDC)
 {
 	if (!pDC->IsPrinting() && !IsPreview()) {
+		CreateOffScreen(pDC);
 		OnPrepareDC(offScreen);
 		CRect r;
 		GetClientRect(&r);
@@ -11086,3 +11093,9 @@
 {
 	pCmdUI->SetCheck(showConnectedPortsOnly);
 }
+
+LRESULT CGMEView::OnDisplayChange(WPARAM wParam, LPARAM lParam)
+{
+	DeleteOffScreen();
+	return TRUE;
+}

Modified: trunk/GME/Gme/GMEView.h
==============================================================================
--- trunk/GME/Gme/GMEView.h	Fri Dec 28 14:27:16 2018	(r2770)
+++ trunk/GME/Gme/GMEView.h	Mon Jul  8 13:30:35 2019	(r2771)
@@ -275,6 +275,7 @@
 	void					ResetParent(bool doInvalidate = false);
 	void					InitSets();
 	void					CreateOffScreen(CDC* dc);
+	void					DeleteOffScreen();
 	void					Invalidate(bool thorough = false);
 	void					SetProperties();
 	void					SetTypeNameProperty();
@@ -433,6 +434,7 @@
 	virtual void OnActivateFrame( UINT nState, CFrameWnd* pFrameWnd );
 	//}}AFX_VIRTUAL
 	afx_msg void OnKillFocus(CWnd* pNewWnd);
+	LRESULT OnDisplayChange(WPARAM wParam, LPARAM lParam);
 
 // Implementation
 public:

Modified: trunk/GME/Gme/MainFrm.cpp
==============================================================================
--- trunk/GME/Gme/MainFrm.cpp	Fri Dec 28 14:27:16 2018	(r2770)
+++ trunk/GME/Gme/MainFrm.cpp	Mon Jul  8 13:30:35 2019	(r2771)
@@ -113,6 +113,8 @@
 	ON_COMMAND(ID_VIEW_FULLSCREEN, OnViewFullScreen)
 	ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, OnToolbarCreateNew)
 //}}AFX_MSG_MAP
+	ON_MESSAGE(WM_DISPLAYCHANGE, OnDisplayChange)
+
 	// By making the Menu IDs that same as the ToolBar IDs
 	// we can leverage off of code that is already provided
 	// in MFCs implementation of CFrameWnd to check, uncheck
@@ -1636,3 +1638,16 @@
 	}
 	return;
 }
+
+LRESULT CMainFrame::OnDisplayChange(WPARAM wParam, LPARAM lParam) {
+	CDocument* pDocument = CGMEDoc::theInstance;
+	POSITION pos = pDocument->GetFirstViewPosition();
+	if (pos) {
+		while (pos != NULL) {
+			CGMEChildFrame* pView = (CGMEChildFrame*)pDocument->GetNextView(pos);
+			pView->SendMessage(WM_DISPLAYCHANGE, wParam, lParam);
+		}
+	}
+
+	return TRUE;
+}

Modified: trunk/GME/Gme/MainFrm.h
==============================================================================
--- trunk/GME/Gme/MainFrm.h	Fri Dec 28 14:27:16 2018	(r2770)
+++ trunk/GME/Gme/MainFrm.h	Mon Jul  8 13:30:35 2019	(r2771)
@@ -209,6 +209,8 @@
 	afx_msg LRESULT OnGetTabTooltip(WPARAM wp, LPARAM lp);
 
 	//}}AFX_MSG
+	LRESULT OnDisplayChange(WPARAM wParam, LPARAM lParam);
+
 	DECLARE_MESSAGE_MAP()
 private:
 	BOOL InitStatusBar(UINT *pIndicators, int nSize, int nSeconds);


More information about the gme-commit mailing list