Przeglądaj źródła

Fixed divide by zero if the application has run out of GDI handles and is trying to show an error dialog

Sam Lantinga 10 lat temu
rodzic
commit
08ce12c4e3
1 zmienionych plików z 6 dodań i 3 usunięć
  1. 6 3
      src/video/windows/SDL_windowsmessagebox.c

+ 6 - 3
src/video/windows/SDL_windowsmessagebox.c

@@ -297,9 +297,12 @@ static WIN_DialogData *CreateDialogData(int w, int h, const char *caption)
 
 
         /* Font size - convert to logical font size for dialog parameter. */
         /* Font size - convert to logical font size for dialog parameter. */
         {
         {
-            HDC ScreenDC = GetDC(0);
-            WordToPass = (WORD)(-72 * NCM.lfMessageFont.lfHeight / GetDeviceCaps(ScreenDC, LOGPIXELSY));
-            ReleaseDC(0, ScreenDC);
+            HDC ScreenDC = GetDC(NULL);
+            int LogicalPixelsY = GetDeviceCaps(ScreenDC, LOGPIXELSY);
+            if (!LogicalPixelsY) /* This can happen if the application runs out of GDI handles */
+                LogicalPixelsY = 72;
+            WordToPass = (WORD)(-72 * NCM.lfMessageFont.lfHeight / LogicalPixelsY);
+            ReleaseDC(NULL, ScreenDC);
         }
         }
 
 
         if (!AddDialogData(dialog, &WordToPass, 2)) {
         if (!AddDialogData(dialog, &WordToPass, 2)) {