Qian Hong : atl: Implement AtlAxDialogBox().

Alexandre Julliard julliard at winehq.org
Tue Oct 26 09:40:28 CDT 2021


Module: wine
Branch: stable
Commit: 1abbaaa221ce79426c8270384bf6d6b7d026ce18
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1abbaaa221ce79426c8270384bf6d6b7d026ce18

Author: Qian Hong <qhong at codeweavers.com>
Date:   Sat May  1 21:47:55 2021 -0500

atl: Implement AtlAxDialogBox().

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=32749
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit f987d8ac3b6bf2fb027196162985477c8daf27d2)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/atl/atl_ax.c | 46 ++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 38 insertions(+), 8 deletions(-)

diff --git a/dlls/atl/atl_ax.c b/dlls/atl/atl_ax.c
index 69d42f55813..fe70d0a3229 100644
--- a/dlls/atl/atl_ax.c
+++ b/dlls/atl/atl_ax.c
@@ -1404,22 +1404,52 @@ HRESULT WINAPI AtlAxGetControl(HWND hWnd, IUnknown **pUnk)
  *           AtlAxDialogBoxW              [atl100.35]
  *
  */
-INT_PTR WINAPI AtlAxDialogBoxW(HINSTANCE hInstance, LPCWSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogProc,
-        LPARAM dwInitParam)
+INT_PTR WINAPI AtlAxDialogBoxW(HINSTANCE instance, const WCHAR *name,
+        HWND owner, DLGPROC proc, LPARAM param)
 {
-    FIXME("(%p %s %p %p %lx)\n", hInstance, debugstr_w(lpTemplateName), hWndParent, lpDialogProc, dwInitParam);
-    return 0;
+    HRSRC resource;
+    HGLOBAL global;
+    DLGTEMPLATE *template;
+    INT_PTR ret;
+
+    TRACE("instance %p, name %s, owner %p, proc %p, param %#Ix\n",
+            instance, debugstr_w(name), owner, proc, param);
+
+    if (!(resource = FindResourceW(instance, name, (const WCHAR *)RT_DIALOG)))
+        return 0;
+
+    if (!(global = LoadResource(instance, resource)))
+        return 0;
+
+    if (!(template = AX_ConvertDialogTemplate(LockResource(global))))
+        return 0;
+
+    ret = DialogBoxIndirectParamW(instance, template, owner, proc, param);
+    HeapFree(GetProcessHeap(), 0, template);
+    return ret;
 }
 
 /***********************************************************************
  *           AtlAxDialogBoxA              [atl100.36]
  *
  */
-INT_PTR WINAPI AtlAxDialogBoxA(HINSTANCE hInstance, LPCSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogProc,
-        LPARAM dwInitParam)
+INT_PTR WINAPI AtlAxDialogBoxA(HINSTANCE instance, const char *name,
+        HWND owner, DLGPROC proc, LPARAM param)
 {
-    FIXME("(%p %s %p %p %lx)\n", hInstance, debugstr_a(lpTemplateName), hWndParent, lpDialogProc, dwInitParam);
-    return 0;
+    WCHAR *nameW;
+    int len;
+    INT_PTR ret;
+
+    if (IS_INTRESOURCE(name))
+        return AtlAxDialogBoxW(instance, (const WCHAR *)name, owner, proc, param);
+
+    len = MultiByteToWideChar(CP_ACP, 0, name, -1, NULL, 0);
+    if (!(nameW = malloc(len * sizeof(WCHAR))))
+        return 0;
+    MultiByteToWideChar(CP_ACP, 0, name, -1, nameW, len);
+    ret = AtlAxDialogBoxW(instance, nameW, owner, proc, param);
+    free(nameW);
+    return ret;
 }
 
 /***********************************************************************




More information about the wine-cvs mailing list