4 * Copyright 2003 Ulrich Czekalla for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #define WIN32_NO_STATUS
23 #define COM_NO_WINDOWS_H
31 //#include "winternl.h"
32 //#include "winerror.h"
35 #include <wine/debug.h>
36 #include <wine/unicode.h>
41 WINE_DEFAULT_DEBUG_CHANNEL(oledlg
);
46 BOOL bObjListInit
; /* Object list has been initialized */
47 LPOLEUIINSERTOBJECTA lpOleUIInsertObject
;
53 HWND hwndCreateCtrlCB
;
55 HWND hwndCreateFromFileCB
;
56 HWND hwndDisplayIconCB
;
61 } InsertObjectDlgInfo
;
63 static INT_PTR CALLBACK
UIInsertObjectDlgProc(HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
64 static LRESULT
UIINSOBJDLG_OnWMCommand(HWND hwnd
, WPARAM wParam
, LPARAM lParam
);
65 static void UIINSERTOBJECTDLG_InitDialog(InsertObjectDlgInfo
* pdlgInfo
);
66 static void UIINSERTOBJECTDLG_SelectCreateCtrl(InsertObjectDlgInfo
* pdlgInfo
);
67 static void UIINSERTOBJECTDLG_SelectCreateFromFile(InsertObjectDlgInfo
* pdlgInfo
);
68 static void UIINSERTOBJECTDLG_SelectCreateNew(InsertObjectDlgInfo
* pdlgInfo
);
69 static BOOL
UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo
* pdlgInfo
);
70 static void UIINSERTOBJECTDLG_FreeObjectTypes(InsertObjectDlgInfo
* pdlgInfo
);
71 static void UIINSERTOBJECTDLG_SelChange(InsertObjectDlgInfo
* pdlgInfo
);
72 static BOOL
UIINSERTOBJECTDLG_OnOpen(InsertObjectDlgInfo
* pdlgInfo
);
73 static void UIINSERTOBJECTDLG_BrowseFile(InsertObjectDlgInfo
* pdlgInfo
);
74 static void UIINSERTOBJECTDLG_AddControl(InsertObjectDlgInfo
* pdlgInfo
);
76 typedef HRESULT (*DLLREGISTER
) (void);
78 extern HINSTANCE OLEDLG_hInstance
;
79 static const char OleUIInsertObjectInfoStr
[] = "OleUIInsertObjectInfoStr";
81 /***********************************************************************
82 * OleUIInsertObjectA (OLEDLG.3)
84 UINT WINAPI
OleUIInsertObjectA(LPOLEUIINSERTOBJECTA lpOleUIInsertObject
)
89 InsertObjectDlgInfo dlgInfo
;
92 if (lpOleUIInsertObject
->lpszTemplate
|| lpOleUIInsertObject
->hResource
)
93 FIXME("Customized template not supported\n");
95 /* Create the dialog from a template */
96 if(!(hRes
= FindResourceA(OLEDLG_hInstance
,MAKEINTRESOURCEA(UIINSERTOBJECT
),
99 return OLEUI_ERR_FINDTEMPLATEFAILURE
;
102 if (!(hDlgTmpl
= LoadResource(OLEDLG_hInstance
, hRes
)) ||
103 !(template = LockResource( hDlgTmpl
)))
105 return OLEUI_ERR_LOADTEMPLATEFAILURE
;
108 /* Initialize InsertObjectDlgInfo structure */
109 dlgInfo
.lpOleUIInsertObject
= lpOleUIInsertObject
;
110 dlgInfo
.bObjListInit
= FALSE
;
112 lRes
= DialogBoxIndirectParamA(OLEDLG_hInstance
, (const DLGTEMPLATE
*) template,
113 lpOleUIInsertObject
->hWndOwner
, UIInsertObjectDlgProc
,
116 /* Unable to create the dialog */
118 return OLEUI_ERR_DIALOGFAILURE
;
124 /***********************************************************************
125 * UIInsertObjectDlgProc
127 * OLE UI Insert Object dialog procedure
129 INT_PTR CALLBACK
UIInsertObjectDlgProc(HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
131 InsertObjectDlgInfo
* pdlgInfo
= GetPropA(hwnd
,OleUIInsertObjectInfoStr
);
137 InsertObjectDlgInfo
* pdlgInfo
= (InsertObjectDlgInfo
*)lParam
;
139 pdlgInfo
->hwndSelf
= hwnd
;
141 SetPropA(hwnd
, OleUIInsertObjectInfoStr
, pdlgInfo
);
143 UIINSERTOBJECTDLG_InitDialog(pdlgInfo
);
149 return UIINSOBJDLG_OnWMCommand(hwnd
, wParam
, lParam
);
153 UIINSERTOBJECTDLG_FreeObjectTypes(pdlgInfo
);
154 RemovePropA(hwnd
, OleUIInsertObjectInfoStr
);
163 /***********************************************************************
164 * UIINSOBJDLG_OnWMCommand
166 * WM_COMMAND message handler
168 static LRESULT
UIINSOBJDLG_OnWMCommand(HWND hwnd
, WPARAM wParam
, LPARAM lParam
)
170 WORD wNotifyCode
= HIWORD(wParam
);
171 WORD wID
= LOWORD(wParam
);
172 InsertObjectDlgInfo
* pdlgInfo
= GetPropA(hwnd
,OleUIInsertObjectInfoStr
);
177 EndDialog(hwnd
, UIINSERTOBJECTDLG_OnOpen(pdlgInfo
));
181 EndDialog(hwnd
, FALSE
);
184 case IDC_CREATECONTROL
:
185 UIINSERTOBJECTDLG_SelectCreateCtrl(pdlgInfo
);
189 UIINSERTOBJECTDLG_SelectCreateNew(pdlgInfo
);
192 case IDC_CREATEFROMFILE
:
193 UIINSERTOBJECTDLG_SelectCreateFromFile(pdlgInfo
);
197 UIINSERTOBJECTDLG_BrowseFile(pdlgInfo
);
201 UIINSERTOBJECTDLG_AddControl(pdlgInfo
);
203 case IDC_OBJTYPELIST
:
205 if (wNotifyCode
== LBN_SELCHANGE
)
206 UIINSERTOBJECTDLG_SelChange(pdlgInfo
);
214 /***********************************************************************
215 * UIINSERTOBJECTDLG_InitDialog
217 * Initialize dialog display
219 static void UIINSERTOBJECTDLG_InitDialog(InsertObjectDlgInfo
* pdlgInfo
)
221 /* Initialize InsertObjectDlgInfo data structure */
222 pdlgInfo
->hwndObjTypeLB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_OBJTYPELIST
);
223 pdlgInfo
->hwndObjTypeLBL
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_OBJTYPELBL
);
224 pdlgInfo
->hwndFileLBL
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_FILELBL
);
225 pdlgInfo
->hwndFileTB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_FILE
);
226 pdlgInfo
->hwndCreateCtrlCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_CREATECONTROL
);
227 pdlgInfo
->hwndCreateNewCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_CREATENEW
);
228 pdlgInfo
->hwndCreateFromFileCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_CREATEFROMFILE
);
229 pdlgInfo
->hwndDisplayIconCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_ASICON
);
230 pdlgInfo
->hwndAddCtrlBTN
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_ADDCONTROL
);
231 pdlgInfo
->hwndBrowseBTN
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_BROWSE
);
232 pdlgInfo
->hwndResultDesc
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_RESULTDESC
);
234 /* Setup dialog controls based on flags */
235 if (pdlgInfo
->lpOleUIInsertObject
->lpszCaption
)
236 SetWindowTextA(pdlgInfo
->hwndSelf
, pdlgInfo
->lpOleUIInsertObject
->lpszCaption
);
238 ShowWindow(pdlgInfo
->hwndCreateCtrlCB
, (pdlgInfo
->lpOleUIInsertObject
->dwFlags
&
239 IOF_SHOWINSERTCONTROL
) ? SW_SHOW
: SW_HIDE
);
240 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, (pdlgInfo
->lpOleUIInsertObject
->dwFlags
&
241 IOF_CHECKDISPLAYASICON
) ? SW_SHOW
: SW_HIDE
);
242 EnableWindow(pdlgInfo
->hwndDisplayIconCB
, (pdlgInfo
->lpOleUIInsertObject
->dwFlags
&
243 IOF_DISABLEDISPLAYASICON
) ? FALSE
: TRUE
);
245 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_SELECTCREATECONTROL
)
246 UIINSERTOBJECTDLG_SelectCreateCtrl(pdlgInfo
);
247 else if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_SELECTCREATEFROMFILE
)
248 UIINSERTOBJECTDLG_SelectCreateFromFile(pdlgInfo
);
249 else /* (pdlgInfo->lpOleUIInsertObject->dwFlags & IOF_SELECTCREATENEW) */
250 UIINSERTOBJECTDLG_SelectCreateNew(pdlgInfo
);
254 /***********************************************************************
255 * UIINSERTOBJECTDLG_SelectCreateCtrl
257 * Select Create Control Radio Button
259 static void UIINSERTOBJECTDLG_SelectCreateCtrl(InsertObjectDlgInfo
* pdlgInfo
)
261 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, SW_HIDE
);
262 ShowWindow(pdlgInfo
->hwndFileLBL
, SW_HIDE
);
263 ShowWindow(pdlgInfo
->hwndFileTB
, SW_HIDE
);
264 ShowWindow(pdlgInfo
->hwndBrowseBTN
, SW_HIDE
);
266 ShowWindow(pdlgInfo
->hwndObjTypeLBL
, SW_SHOW
);
267 ShowWindow(pdlgInfo
->hwndObjTypeLB
, SW_SHOW
);
268 ShowWindow(pdlgInfo
->hwndAddCtrlBTN
, SW_SHOW
);
270 SendMessageA(pdlgInfo
->hwndCreateCtrlCB
, BM_SETCHECK
, BST_CHECKED
, 0);
272 /* Populate object type listbox */
273 if (!pdlgInfo
->bObjListInit
)
274 UIINSERTOBJECTDLG_PopulateObjectTypes(pdlgInfo
);
278 /***********************************************************************
279 * UIINSERTOBJECTDLG_SelectCreateNew
281 * Select Create New Radio Button
283 static void UIINSERTOBJECTDLG_SelectCreateNew(InsertObjectDlgInfo
* pdlgInfo
)
285 ShowWindow(pdlgInfo
->hwndFileLBL
, SW_HIDE
);
286 ShowWindow(pdlgInfo
->hwndFileTB
, SW_HIDE
);
287 ShowWindow(pdlgInfo
->hwndAddCtrlBTN
, SW_HIDE
);
288 ShowWindow(pdlgInfo
->hwndBrowseBTN
, SW_HIDE
);
290 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CHECKDISPLAYASICON
)
291 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, SW_SHOW
);
293 ShowWindow(pdlgInfo
->hwndObjTypeLBL
, SW_SHOW
);
294 ShowWindow(pdlgInfo
->hwndObjTypeLB
, SW_SHOW
);
296 SendMessageA(pdlgInfo
->hwndCreateNewCB
, BM_SETCHECK
, BST_CHECKED
, 0);
298 if (!pdlgInfo
->bObjListInit
)
299 UIINSERTOBJECTDLG_PopulateObjectTypes(pdlgInfo
);
301 UIINSERTOBJECTDLG_SelChange(pdlgInfo
);
305 /***********************************************************************
306 * UIINSERTOBJECTDLG_SelectCreateFromFile
308 * Select Create From File Radio Button
310 static void UIINSERTOBJECTDLG_SelectCreateFromFile(InsertObjectDlgInfo
* pdlgInfo
)
312 WCHAR resstr
[MAX_PATH
];
314 ShowWindow(pdlgInfo
->hwndAddCtrlBTN
, SW_HIDE
);
315 ShowWindow(pdlgInfo
->hwndObjTypeLBL
, SW_HIDE
);
316 ShowWindow(pdlgInfo
->hwndObjTypeLB
, SW_HIDE
);
318 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CHECKDISPLAYASICON
)
319 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, SW_SHOW
);
321 ShowWindow(pdlgInfo
->hwndFileLBL
, SW_SHOW
);
322 ShowWindow(pdlgInfo
->hwndFileTB
, SW_SHOW
);
323 ShowWindow(pdlgInfo
->hwndBrowseBTN
, SW_SHOW
);
325 SendMessageW(pdlgInfo
->hwndCreateFromFileCB
, BM_SETCHECK
, BST_CHECKED
, 0);
327 if (LoadStringW(OLEDLG_hInstance
, IDS_RESULTFILEOBJDESC
, resstr
, MAX_PATH
))
328 SendMessageW(pdlgInfo
->hwndResultDesc
, WM_SETTEXT
, 0, (LPARAM
)resstr
);
332 /***********************************************************************
333 * UIINSERTOBJECTDLG_PopulateObjectTypes
335 * Populate Object Type listbox
337 static BOOL
UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo
* pdlgInfo
)
339 static const WCHAR szClsid
[] = {'C','L','S','I','D',0};
340 static const WCHAR szInsertable
[] = {'I','n','s','e','r','t','a','b','l','e',0};
341 static const WCHAR szNotInsertable
[] = {'N','o','t','I','n','s','e','r','t','a','b','l','e',0};
348 WCHAR keydesc
[MAX_PATH
];
349 WCHAR keyname
[MAX_PATH
];
353 UIINSERTOBJECTDLG_FreeObjectTypes(pdlgInfo
);
355 RegOpenKeyExW(HKEY_CLASSES_ROOT
, szClsid
, 0, KEY_READ
, &hkclsids
);
357 while (ERROR_SUCCESS
== (ret
= RegEnumKeyW(hkclsids
, index
, szclsid
, sizeof(szclsid
)/sizeof(szclsid
[0]))))
361 RegOpenKeyExW(hkclsids
, szclsid
, 0, KEY_READ
, &hkey
);
363 len
= sizeof(keyname
);
364 if (ERROR_SUCCESS
!= RegQueryValueW(hkey
, szInsertable
, keyname
, &len
))
367 len
= sizeof(keyname
);
368 if (ERROR_SUCCESS
== RegQueryValueW(hkey
, szNotInsertable
, keyname
, &len
))
371 CLSIDFromString(szclsid
, &clsid
);
373 for (i
= 0; i
< pdlgInfo
->lpOleUIInsertObject
->cClsidExclude
; i
++)
374 if (IsEqualGUID(&pdlgInfo
->lpOleUIInsertObject
->lpClsidExclude
[i
], &clsid
))
377 if (i
< pdlgInfo
->lpOleUIInsertObject
->cClsidExclude
)
380 len
= sizeof(keydesc
);
381 if (ERROR_SUCCESS
== RegQueryValueW(hkey
, NULL
, keydesc
, &len
))
383 CLSID
* lpclsid
= HeapAlloc(GetProcessHeap(), 0, sizeof(CLSID
));
386 len
= SendMessageW(pdlgInfo
->hwndObjTypeLB
, LB_ADDSTRING
, 0, (LPARAM
)keydesc
);
387 SendMessageW(pdlgInfo
->hwndObjTypeLB
, LB_SETITEMDATA
, len
, (LPARAM
)lpclsid
);
391 pdlgInfo
->bObjListInit
= (ret
== ERROR_NO_MORE_ITEMS
);
393 return pdlgInfo
->bObjListInit
;
397 /***********************************************************************
398 * UIINSERTOBJECTDLG_FreeObjectTypes
400 * Free Object Types listbox
402 static void UIINSERTOBJECTDLG_FreeObjectTypes(InsertObjectDlgInfo
* pdlgInfo
)
406 count
= SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_GETCOUNT
, 0, 0);
408 for (i
= 0; i
< count
; i
++)
410 CLSID
* lpclsid
= (CLSID
*) SendMessageA(pdlgInfo
->hwndObjTypeLB
,
411 LB_GETITEMDATA
, i
, 0);
412 HeapFree(GetProcessHeap(), 0, lpclsid
);
417 /***********************************************************************
418 * UIINSERTOBJECTDLG_SelChange
420 * Handle object type selection change
422 static void UIINSERTOBJECTDLG_SelChange(InsertObjectDlgInfo
* pdlgInfo
)
425 WCHAR objname
[MAX_PATH
];
426 WCHAR objdesc
[MAX_PATH
];
427 WCHAR resstr
[MAX_PATH
];
431 if (LoadStringW(OLEDLG_hInstance
, IDS_RESULTOBJDESC
, resstr
, MAX_PATH
) &&
432 ((index
= SendMessageW(pdlgInfo
->hwndObjTypeLB
, LB_GETCURSEL
, 0, 0)) >= 0) &&
433 SendMessageW(pdlgInfo
->hwndObjTypeLB
, LB_GETTEXT
, index
, (LPARAM
)objname
))
434 wsprintfW(objdesc
, resstr
, objname
);
438 SendMessageW(pdlgInfo
->hwndResultDesc
, WM_SETTEXT
, 0, (LPARAM
)objdesc
);
442 /***********************************************************************
443 * UIINSERTOBJECTDLG_SelChange
447 static BOOL
UIINSERTOBJECTDLG_OnOpen(InsertObjectDlgInfo
* pdlgInfo
)
451 if (BST_CHECKED
== SendMessageA(pdlgInfo
->hwndCreateCtrlCB
, BM_GETCHECK
, 0, 0) ||
452 BST_CHECKED
== SendMessageA(pdlgInfo
->hwndCreateNewCB
, BM_GETCHECK
, 0, 0))
454 INT index
= SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_GETCURSEL
, 0, 0);
458 CLSID
* clsid
= (CLSID
*) SendMessageA(pdlgInfo
->hwndObjTypeLB
,
459 LB_GETITEMDATA
, index
, 0);
460 pdlgInfo
->lpOleUIInsertObject
->clsid
= *clsid
;
462 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CREATENEWOBJECT
)
464 pdlgInfo
->lpOleUIInsertObject
->sc
= OleCreate(
465 &pdlgInfo
->lpOleUIInsertObject
->clsid
,
466 &pdlgInfo
->lpOleUIInsertObject
->iid
,
467 pdlgInfo
->lpOleUIInsertObject
->oleRender
,
468 pdlgInfo
->lpOleUIInsertObject
->lpFormatEtc
,
469 pdlgInfo
->lpOleUIInsertObject
->lpIOleClientSite
,
470 pdlgInfo
->lpOleUIInsertObject
->lpIStorage
,
471 pdlgInfo
->lpOleUIInsertObject
->ppvObj
);
477 else if (BST_CHECKED
== SendMessageA(pdlgInfo
->hwndCreateFromFileCB
, BM_GETCHECK
, 0, 0))
479 if (pdlgInfo
->lpOleUIInsertObject
->lpszFile
)
482 WCHAR wcsFile
[MAX_PATH
];
484 if (SendMessageW(pdlgInfo
->hwndFileTB
, WM_GETTEXT
, MAX_PATH
, (LPARAM
)wcsFile
))
485 WideCharToMultiByte(CP_ACP
, 0, wcsFile
, -1,
486 pdlgInfo
->lpOleUIInsertObject
->lpszFile
, pdlgInfo
->lpOleUIInsertObject
->cchFile
, NULL
, NULL
);
488 if (ERROR_SUCCESS
== (hres
= GetClassFile(wcsFile
, &pdlgInfo
->lpOleUIInsertObject
->clsid
)))
490 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CREATEFILEOBJECT
)
492 hres
= OleCreateFromFile(
493 &pdlgInfo
->lpOleUIInsertObject
->clsid
,
495 &pdlgInfo
->lpOleUIInsertObject
->iid
,
496 pdlgInfo
->lpOleUIInsertObject
->oleRender
,
497 pdlgInfo
->lpOleUIInsertObject
->lpFormatEtc
,
498 pdlgInfo
->lpOleUIInsertObject
->lpIOleClientSite
,
499 pdlgInfo
->lpOleUIInsertObject
->lpIStorage
,
500 pdlgInfo
->lpOleUIInsertObject
->ppvObj
);
505 pdlgInfo
->lpOleUIInsertObject
->sc
= hres
;
513 /***********************************************************************
514 * UIINSERTOBJECTDLG_BrowseFile
516 * Browse for the file
518 static void UIINSERTOBJECTDLG_BrowseFile(InsertObjectDlgInfo
* pdlgInfo
)
521 char fname
[MAX_PATH
];
524 fn
.lStructSize
= sizeof(OPENFILENAMEA
);
525 fn
.hwndOwner
= pdlgInfo
->hwndSelf
;
527 fn
.lpstrFilter
= "All Files\0*.*\0\0";
528 fn
.lpstrCustomFilter
= NULL
;
529 fn
.nMaxCustFilter
= 0;
532 SendMessageA(pdlgInfo
->hwndFileTB
, WM_GETTEXT
, MAX_PATH
, (LPARAM
)fname
);
533 fn
.lpstrFile
= fname
;
534 fn
.nMaxFile
= MAX_PATH
;
536 fn
.lpstrFileTitle
= NULL
;
537 fn
.nMaxFileTitle
= 0;
538 fn
.lpstrInitialDir
= NULL
;
540 LoadStringA(OLEDLG_hInstance
, IDS_BROWSE
, title
, 32);
541 fn
.lpstrTitle
= title
;
543 fn
.Flags
= OFN_EXPLORER
| OFN_FILEMUSTEXIST
|
544 OFN_HIDEREADONLY
| OFN_LONGNAMES
;
546 fn
.nFileExtension
= 0;
547 fn
.lpstrDefExt
= NULL
;
550 fn
.lpTemplateName
= NULL
;
552 if (GetOpenFileNameA(&fn
))
553 SendMessageA(pdlgInfo
->hwndFileTB
, WM_SETTEXT
, 0, (LPARAM
)fn
.lpstrFile
);
557 /***********************************************************************
558 * UIINSERTOBJECTDLG_AddControl
560 * Add control to Object Type
562 static void UIINSERTOBJECTDLG_AddControl(InsertObjectDlgInfo
* pdlgInfo
)
565 char fname
[MAX_PATH
];
568 fn
.lStructSize
= sizeof(OPENFILENAMEA
);
569 fn
.hwndOwner
= pdlgInfo
->hwndSelf
;
571 fn
.lpstrFilter
= "OLE Controls\0*.ocx\0Libraries\0*.dll\0All Files\0*.*\0\0";
572 fn
.lpstrCustomFilter
= NULL
;
573 fn
.nMaxCustFilter
= 0;
577 fn
.lpstrFile
= fname
;
578 fn
.nMaxFile
= MAX_PATH
;
580 fn
.lpstrFileTitle
= NULL
;
581 fn
.nMaxFileTitle
= 0;
582 fn
.lpstrInitialDir
= NULL
;
584 LoadStringA(OLEDLG_hInstance
, IDS_BROWSE
, title
, 32);
585 fn
.lpstrTitle
= title
;
587 fn
.Flags
= OFN_EXPLORER
| OFN_FILEMUSTEXIST
|
588 OFN_HIDEREADONLY
| OFN_LONGNAMES
;
590 fn
.nFileExtension
= 0;
591 fn
.lpstrDefExt
= NULL
;
594 fn
.lpTemplateName
= NULL
;
596 if (GetOpenFileNameA(&fn
))
601 hMod
= LoadLibraryA(fn
.lpstrFile
);
607 regproc
= (DLLREGISTER
) GetProcAddress(hMod
, "DllRegisterServer");
610 if (S_OK
== regproc())
612 UIINSERTOBJECTDLG_PopulateObjectTypes(pdlgInfo
);
625 LoadStringW(OLEDLG_hInstance
, IDS_NOTOLEMODCAPTION
, title
, 32);
626 LoadStringW(OLEDLG_hInstance
, IDS_NOTOLEMOD
, msg
, 256);
628 MessageBoxW(pdlgInfo
->hwndSelf
, msg
, title
, MB_ICONEXCLAMATION
);