Bläddra i källkod

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

Sam Lantinga 11 år sedan
förälder
incheckning
08ce12c4e3
1 ändrade filer med 6 tillägg och 3 borttagningar
  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)) {