From 759a9f9271aecfd530830e5c824adf55028a4f8d Mon Sep 17 00:00:00 2001 From: Zero Fanker Date: Fri, 7 Jun 2024 21:18:08 -0400 Subject: [PATCH] guardian check when lose window focus . --- MissionEditor/Loading.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/MissionEditor/Loading.cpp b/MissionEditor/Loading.cpp index d6623a4..984cb98 100644 --- a/MissionEditor/Loading.cpp +++ b/MissionEditor/Loading.cpp @@ -729,12 +729,17 @@ void CLoading::InitPics(CProgressCtrl* prog) DDSURFACEDESC2 desc; try { - pics["SCROLLCURSOR"].pic = BitmapToSurface(((CFinalSunDlg*)theApp.m_pMainWnd)->m_view.m_isoview->dd, *BitmapFromResource(IDB_SCROLLCURSOR)).Detach(); - FSunPackLib::SetColorKey((LPDIRECTDRAWSURFACE4)pics["SCROLLCURSOR"].pic, -1); + auto pPic = BitmapToSurface(((CFinalSunDlg*)theApp.m_pMainWnd)->m_view.m_isoview->dd, *BitmapFromResource(IDB_SCROLLCURSOR)).Detach(); + // This is really dangerous to store a dangling ComPtr + pics["SCROLLCURSOR"].pic = pPic; + if (!pPic) { + throw new BitmapNotFound(); + } + FSunPackLib::SetColorKey((LPDIRECTDRAWSURFACE4)pPic, -1); ::memset(&desc, 0, sizeof(DDSURFACEDESC2)); desc.dwSize = sizeof(DDSURFACEDESC2); desc.dwFlags = DDSD_HEIGHT | DDSD_WIDTH; - ((LPDIRECTDRAWSURFACE4)pics["SCROLLCURSOR"].pic)->GetSurfaceDesc(&desc); + ((LPDIRECTDRAWSURFACE4)pPic)->GetSurfaceDesc(&desc); pics["SCROLLCURSOR"].wHeight = desc.dwHeight; pics["SCROLLCURSOR"].wWidth = desc.dwWidth; pics["SCROLLCURSOR"].bType = PICDATA_TYPE_BMP;