Robert Shearman : atl:
Add a partial implementation of AtlModuleRegisterWndClassInfoW
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jun 15 07:12:38 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: da5cc563788045eef9c1defe0668a2d9d6dc1b2e
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=da5cc563788045eef9c1defe0668a2d9d6dc1b2e
Author: Robert Shearman <rob at codeweavers.com>
Date: Wed Jun 14 13:20:41 2006 +0100
atl: Add a partial implementation of AtlModuleRegisterWndClassInfoW
based on documentation by Mike McCormack.
---
dlls/atl/atl_main.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/dlls/atl/atl_main.c b/dlls/atl/atl_main.c
index 2d87b2e..dd12a5d 100644
--- a/dlls/atl/atl_main.c
+++ b/dlls/atl/atl_main.c
@@ -35,6 +35,8 @@ #include "atlbase.h"
#include "atliface.h"
#include "atlwin.h"
+#include "wine/unicode.h"
+
WINE_DEFAULT_DEBUG_CHANNEL(atl);
HINSTANCE hInst;
@@ -363,9 +365,52 @@ HRESULT WINAPI AtlAxCreateControl(LPCOLE
/***********************************************************************
* AtlModuleRegisterWndClassInfoW [ATL.@]
+ *
+ * PARAMS
+ * pm [IO] Information about the module registering the window.
+ * wci [IO] Information about the window being registered.
+ * pProc [O] Window procedure of the registered class.
+ *
+ * RETURNS
+ * Atom representing the registered class.
+ *
+ * NOTES
+ * Can be called multiple times without error, unlike RegisterClassEx().
+ *
+ * If the class name is NULL then it a class with a name of "ATLxxxxxxxx" is
+ * registered, where the x's represent an unique value.
+ *
*/
ATOM WINAPI AtlModuleRegisterWndClassInfoW(_ATL_MODULEW *pm, _ATL_WNDCLASSINFOW *wci, WNDPROC *pProc)
{
- FIXME("%p %p %p)\n", pm, wci, pProc);
- return 0;
+ ATOM atom;
+
+ FIXME("%p %p %p semi-stub\n", pm, wci, pProc);
+
+ atom = wci->m_atom;
+ if (!atom)
+ {
+ WNDCLASSEXW wc;
+
+ TRACE("wci->m_wc.lpszClassName = %s\n", debugstr_w(wci->m_wc.lpszClassName));
+
+ if (!wci->m_wc.lpszClassName)
+ {
+ static const WCHAR szFormat[] = {'A','T','L','%','0','8','x',0};
+ sprintfW(wci->m_szAutoName, szFormat, (UINT)(UINT_PTR)wci);
+ TRACE("auto-generated class name %s\n", debugstr_w(wci->m_szAutoName));
+ wci->m_wc.lpszClassName = wci->m_szAutoName;
+ }
+
+ atom = GetClassInfoExW(pm->m_hInst, wci->m_wc.lpszClassName, &wc);
+ if (!atom)
+ atom = RegisterClassExW(&wci->m_wc);
+
+ wci->pWndProc = wci->m_wc.lpfnWndProc;
+ wci->m_atom = atom;
+ }
+ *pProc = wci->pWndProc;
+
+ TRACE("returning 0x%04x\n", atom);
+ return atom;
}
More information about the wine-cvs
mailing list