Huw Davies : oledlg:
Load the correct dialog template and add a skeleton dialog proc.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Oct 20 04:45:52 CDT 2006
Module: wine
Branch: master
Commit: 3d6d9b210a25fbe05ecfca446a84aeeafc4efe0e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d6d9b210a25fbe05ecfca446a84aeeafc4efe0e
Author: Huw Davies <huw at codeweavers.com>
Date: Wed Oct 18 17:42:54 2006 +0100
oledlg: Load the correct dialog template and add a skeleton dialog proc.
---
dlls/oledlg/oledlg_private.h | 2 +
dlls/oledlg/pastespl.c | 44 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/dlls/oledlg/oledlg_private.h b/dlls/oledlg/oledlg_private.h
index 671eb3e..c0b16e5 100644
--- a/dlls/oledlg/oledlg_private.h
+++ b/dlls/oledlg/oledlg_private.h
@@ -21,6 +21,8 @@
#ifndef __OLEDLG_PRIVATE_H__
#define __OLEDLG_PRIVATE_H__
+extern HINSTANCE OLEDLG_hInstance;
+
extern UINT cf_embed_source;
extern UINT cf_embedded_object;
extern UINT cf_link_source;
diff --git a/dlls/oledlg/pastespl.c b/dlls/oledlg/pastespl.c
index f255486..56bcbb1 100644
--- a/dlls/oledlg/pastespl.c
+++ b/dlls/oledlg/pastespl.c
@@ -28,6 +28,9 @@ #include "wingdi.h"
#include "winuser.h"
#include "winnls.h"
#include "oledlg.h"
+
+#include "oledlg_private.h"
+
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -107,6 +110,30 @@ static inline WCHAR *strdupAtoW(const ch
return ret;
}
+static INT_PTR CALLBACK ps_dlg_proc(HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
+{
+ TRACE("(%p, %04x, %08x, %08lx)\n", hdlg, msg, wp, lp);
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+
+ return TRUE; /* use default focus */
+
+ case WM_COMMAND:
+ switch(LOWORD(wp))
+ {
+ case IDOK:
+ case IDCANCEL:
+ EndDialog(hdlg, wp);
+ return TRUE;
+ }
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+}
+
/***********************************************************************
* OleUIPasteSpecialA (OLEDLG.4)
*/
@@ -170,10 +197,27 @@ UINT WINAPI OleUIPasteSpecialA(LPOLEUIPA
*/
UINT WINAPI OleUIPasteSpecialW(LPOLEUIPASTESPECIALW ps)
{
+ LPCDLGTEMPLATEW dlg_templ = (LPCDLGTEMPLATEW)ps->hResource;
+
TRACE("(%p)\n", ps);
if(TRACE_ON(ole)) dump_pastespecial(ps);
+ if(ps->hInstance || !ps->hResource)
+ {
+ HINSTANCE hInst = ps->hInstance ? ps->hInstance : OLEDLG_hInstance;
+ const WCHAR *name = ps->hInstance ? ps->lpszTemplate : MAKEINTRESOURCEW(IDD_PASTESPECIAL4);
+ HRSRC hrsrc;
+
+ if(name == NULL) return OLEUI_ERR_LPSZTEMPLATEINVALID;
+ hrsrc = FindResourceW(hInst, name, MAKEINTRESOURCEW(RT_DIALOG));
+ if(!hrsrc) return OLEUI_ERR_FINDTEMPLATEFAILURE;
+ dlg_templ = LoadResource(hInst, hrsrc);
+ if(!dlg_templ) return OLEUI_ERR_LOADTEMPLATEFAILURE;
+ }
+
+ DialogBoxIndirectParamW(OLEDLG_hInstance, dlg_templ, ps->hWndOwner, ps_dlg_proc, (LPARAM)ps);
+
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return OLEUI_FALSE;
}
More information about the wine-cvs
mailing list