Qian Hong : atl: Don't forward AtlAxWinInit to atl100.
Alexandre Julliard
julliard at winehq.org
Mon Mar 25 14:19:39 CDT 2013
Module: wine
Branch: master
Commit: 6b616f3ea8386d301eaa03caf103879c3a186e56
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6b616f3ea8386d301eaa03caf103879c3a186e56
Author: Qian Hong <qhong at codeweavers.com>
Date: Fri Mar 15 22:16:20 2013 +0800
atl: Don't forward AtlAxWinInit to atl100.
---
dlls/atl/atl.spec | 2 +-
dlls/atl/atl_main.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++
dlls/atl/tests/atl_ax.c | 21 ++++++++++++++++++++
3 files changed, 70 insertions(+), 1 deletions(-)
diff --git a/dlls/atl/atl.spec b/dlls/atl/atl.spec
index 1a167a7..5b31804 100644
--- a/dlls/atl/atl.spec
+++ b/dlls/atl/atl.spec
@@ -33,7 +33,7 @@
39 stdcall AtlAxCreateControl(ptr ptr ptr ptr) atl100.AtlAxCreateControl
40 stdcall AtlAxCreateControlEx(ptr ptr ptr ptr ptr ptr ptr) atl100.AtlAxCreateControlEx
41 stdcall AtlAxAttachControl(ptr ptr ptr) atl100.AtlAxAttachControl
-42 stdcall AtlAxWinInit() atl100.AtlAxWinInit
+42 stdcall AtlAxWinInit()
43 stdcall AtlModuleAddCreateWndData(ptr ptr ptr)
44 stdcall AtlModuleExtractCreateWndData(ptr)
45 stdcall AtlModuleRegisterWndClassInfoW(ptr ptr ptr)
diff --git a/dlls/atl/atl_main.c b/dlls/atl/atl_main.c
index 2a96369..cc3cce1 100644
--- a/dlls/atl/atl_main.c
+++ b/dlls/atl/atl_main.c
@@ -584,3 +584,51 @@ DWORD WINAPI AtlGetVersion(void *pReserved)
{
return _ATL_VER;
}
+
+/**********************************************************************
+ * AtlAxWin class window procedure
+ */
+static LRESULT CALLBACK AtlAxWin_wndproc( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
+{
+ if ( wMsg == WM_CREATE )
+ {
+ DWORD len = GetWindowTextLengthW( hWnd ) + 1;
+ WCHAR *ptr = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
+ if (!ptr)
+ return 1;
+ GetWindowTextW( hWnd, ptr, len );
+ AtlAxCreateControlEx( ptr, hWnd, NULL, NULL, NULL, NULL, NULL );
+ HeapFree( GetProcessHeap(), 0, ptr );
+ return 0;
+ }
+ return DefWindowProcW( hWnd, wMsg, wParam, lParam );
+}
+
+BOOL WINAPI AtlAxWinInit(void)
+{
+ WNDCLASSEXW wcex;
+ const WCHAR AtlAxWin[] = {'A','t','l','A','x','W','i','n',0};
+
+ FIXME("semi-stub\n");
+
+ if ( FAILED( OleInitialize(NULL) ) )
+ return FALSE;
+
+ wcex.cbSize = sizeof(wcex);
+ wcex.style = CS_GLOBALCLASS;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = GetModuleHandleW( NULL );
+ wcex.hIcon = NULL;
+ wcex.hCursor = NULL;
+ wcex.hbrBackground = NULL;
+ wcex.lpszMenuName = NULL;
+ wcex.hIconSm = 0;
+
+ wcex.lpfnWndProc = AtlAxWin_wndproc;
+ wcex.lpszClassName = AtlAxWin;
+ if ( !RegisterClassExW( &wcex ) )
+ return FALSE;
+
+ return TRUE;
+}
diff --git a/dlls/atl/tests/atl_ax.c b/dlls/atl/tests/atl_ax.c
index 4555bd6..ea9ce32 100644
--- a/dlls/atl/tests/atl_ax.c
+++ b/dlls/atl/tests/atl_ax.c
@@ -35,6 +35,7 @@
#include <olectl.h>
#include <ocidl.h>
#include <exdisp.h>
+#include <atlbase.h>
static HRESULT (WINAPI *pAtlAxAttachControl)(IUnknown *, HWND, IUnknown **);
@@ -114,6 +115,24 @@ static void test_AtlAxAttachControl(void)
DestroyWindow(hwnd);
}
+static void test_ax_win(void)
+{
+ BOOL ret;
+ WNDCLASSEXW wcex;
+ static const WCHAR AtlAxWin[] = {'A','t','l','A','x','W','i','n',0};
+ static HMODULE hinstance = 0;
+
+ ret = AtlAxWinInit();
+ ok(ret, "AtlAxWinInit failed\n");
+
+ hinstance = GetModuleHandleA(NULL);
+ memset(&wcex, 0, sizeof(wcex));
+ wcex.cbSize = sizeof(wcex);
+ ret = GetClassInfoExW(hinstance, AtlAxWin, &wcex);
+ ok(ret, "AtlAxWin has not registered\n");
+ ok(wcex.style == CS_GLOBALCLASS, "wcex.style %08x\n", wcex.style);
+}
+
START_TEST(atl_ax)
{
init_function_pointers();
@@ -128,5 +147,7 @@ START_TEST(atl_ax)
else
win_skip("AtlAxAttachControl is not available\n");
+ test_ax_win();
+
CoUninitialize();
}
More information about the wine-cvs
mailing list