Qian Hong : atl: Implement AtlAxDialogBox().
Alexandre Julliard
julliard at winehq.org
Tue May 4 16:23:35 CDT 2021
Module: wine
Branch: master
Commit: f987d8ac3b6bf2fb027196162985477c8daf27d2
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f987d8ac3b6bf2fb027196162985477c8daf27d2
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>
---
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