diff --git a/src/gui_w32.c b/src/gui_w32.c
index 7e63549..a29de9d 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -991,13 +991,10 @@
     ATOM	atom;
 #endif
 
-    /* Display any pending error messages */
-    display_errors();
-
     /* Return here if the window was already opened (happens when
      * gui_mch_dialog() is called early). */
     if (s_hwnd != NULL)
-	return OK;
+	goto theend;
 
     /*
      * Load the tearoff bitmap
@@ -1224,6 +1221,10 @@
     s_findrep_struct.wReplaceWithLen = MSWIN_FR_BUFSIZE;
 #endif
 
+theend:
+    /* Display any pending error messages */
+    display_errors();
+
     return OK;
 }
 
@@ -2540,6 +2541,8 @@
     int		fontHeight;
     int		textWidth, minButtonWidth, messageWidth;
     int		maxDialogWidth;
+    int		maxDialogHeight;
+    int		scroll_flag = 0;
     int		vertical;
     int		dlgPaddingX;
     int		dlgPaddingY;
@@ -2554,9 +2557,14 @@
 	return dfltbutton;   /* return default option */
 #endif
 
+#if 0
     /* If there is no window yet, open it. */
     if (s_hwnd == NULL && gui_mch_init() == FAIL)
 	return dfltbutton;
+#else
+    if (s_hwnd == NULL)
+	get_dialog_font_metrics();
+#endif
 
     if ((type < 0) || (type > VIM_LAST_TYPE))
 	type = 0;
@@ -2639,10 +2647,14 @@
     if (maxDialogWidth < DLG_MIN_MAX_WIDTH)
 	maxDialogWidth = DLG_MIN_MAX_WIDTH;
 
+    maxDialogHeight = rect.bottom - rect.top - GetSystemMetrics(SM_CXFRAME) * 2;
+    if (maxDialogHeight < DLG_MIN_MAX_HEIGHT)
+	maxDialogHeight = DLG_MIN_MAX_HEIGHT;
+
     /* Set dlgwidth to width of message */
     pstart = message;
     messageWidth = 0;
-    msgheight = 0;
+    msgheight = fontHeight;
     do
     {
 	pend = vim_strchr(pstart, DLG_BUTTON_SEP);
@@ -2650,14 +2662,33 @@
 	    pend = pstart + STRLEN(pstart);	/* Last line of message. */
 	msgheight += fontHeight;
 	textWidth = GetTextWidth(hdc, pstart, (int)(pend - pstart));
-	if (textWidth > messageWidth)
+	if (textWidth >= maxDialogWidth)
+	{
+	    /* Line will wrap.  This doesn't work correctly, because the wrap
+	     * happens at a word boundary! */
+	    messageWidth = maxDialogWidth;
+	    while (textWidth >= maxDialogWidth)
+	    {
+		msgheight += fontHeight;
+		textWidth -= maxDialogWidth;
+	    }
+	}
+	else if (textWidth > messageWidth)
 	    messageWidth = textWidth;
 	pstart = pend + 1;
     } while (*pend != NUL);
-    dlgwidth = messageWidth;
+
+    messageWidth += 10;		/* roundoff space */
+
+    /* Restrict the size to a maximum.  Causes a scrollbar to show up. */
+    if (msgheight > maxDialogHeight)
+    {
+	msgheight = maxDialogHeight;
+	scroll_flag = WS_VSCROLL;
+    }
 
     /* Add width of icon to dlgwidth, and some space */
-    dlgwidth += DLG_ICON_WIDTH + 3 * dlgPaddingX;
+    dlgwidth = messageWidth + DLG_ICON_WIDTH + 3 * dlgPaddingX;
 
     if (msgheight < DLG_ICON_HEIGHT)
 	msgheight = DLG_ICON_HEIGHT;
@@ -2839,6 +2870,7 @@
 	    DLG_NONBUTTON_CONTROL + 0, (WORD)0x0082,
 	    dlg_icons[type]);
 
+#if 0
     /* Dialog message */
     p = add_dialog_element(p, SS_LEFT,
 	    PixelToDialogX(2 * dlgPaddingX + DLG_ICON_WIDTH),
@@ -2846,6 +2878,15 @@
 	    (WORD)(PixelToDialogX(messageWidth) + 1),
 	    PixelToDialogY(msgheight),
 	    DLG_NONBUTTON_CONTROL + 1, (WORD)0x0082, message);
+#else
+    /* Dialog message */
+    p = add_dialog_element(p, ES_LEFT|scroll_flag|ES_MULTILINE|ES_READONLY,
+	    PixelToDialogX(2 * dlgPaddingX + DLG_ICON_WIDTH),
+	    PixelToDialogY(dlgPaddingY),
+	    (WORD)(PixelToDialogX(messageWidth) + 1),
+	    PixelToDialogY(msgheight),
+	    DLG_NONBUTTON_CONTROL + 1, (WORD)0x0081, message);
+#endif
 
     /* Edit box */
     if (textfield != NULL)
