[2/2] msvideo: Add support for 16-bit MCIWndProc.

Dmitry Timoshkov dmitry at baikal.ru
Thu Sep 10 23:27:54 CDT 2015


For bug 29646.
---
 dlls/msvideo.dll16/Makefile.in |  2 +-
 dlls/msvideo.dll16/msvideo16.c | 26 +++++++++++++++++++++++---
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/dlls/msvideo.dll16/Makefile.in b/dlls/msvideo.dll16/Makefile.in
index e08205e..5f7a9a4 100644
--- a/dlls/msvideo.dll16/Makefile.in
+++ b/dlls/msvideo.dll16/Makefile.in
@@ -1,5 +1,5 @@
 MODULE    = msvideo.dll16
-IMPORTS   = msvfw32 version advapi32
+IMPORTS   = msvfw32 version advapi32 user32
 
 EXTRADLLFLAGS = -m16 -Wb,--main-module,msvfw32.dll
 
diff --git a/dlls/msvideo.dll16/msvideo16.c b/dlls/msvideo.dll16/msvideo16.c
index e6c6c1e..1b715e4 100644
--- a/dlls/msvideo.dll16/msvideo16.c
+++ b/dlls/msvideo.dll16/msvideo16.c
@@ -981,11 +981,31 @@ BOOL CDECL MCIWndRegisterClass16(void)
     return MCIWndRegisterClass();
 }
 
+static LRESULT (WINAPI *pMCIWndProc)(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
+
+static LRESULT WINAPI MCIWndProc16(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+    switch (msg)
+    {
+    case MCIWNDM_SENDSTRINGA:
+        lparam = (ULONG_PTR)MapSL(lparam);
+        break;
+
+    default:
+        break;
+    }
+
+    return CallWindowProcA(pMCIWndProc, hwnd, msg, wparam, lparam);
+}
+
 /***********************************************************************
  *                      MCIWndCreate(MSVIDEO.250)
  */
-HWND16 CDECL MCIWndCreate16(HWND16 hwnd, HINSTANCE16 hinst16,
-                              DWORD style, LPSTR file)
+HWND16 CDECL MCIWndCreate16(HWND16 parent, HINSTANCE16 hinst16,
+                            DWORD style, LPSTR file)
 {
-    return HWND_16(MCIWndCreateA(HWND_32(hwnd), 0, style, file));
+    HWND hwnd = MCIWndCreateA(HWND_32(parent), 0, style, file);
+    if (hwnd)
+        pMCIWndProc = (void *)SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)MCIWndProc16);
+    return HWND_16(hwnd);
 }
-- 
2.4.8




More information about the wine-patches mailing list