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 #include "oledlg_private.h"
25 WINE_DEFAULT_DEBUG_CHANNEL(oledlg
);
30 BOOL bObjListInit
; /* Object list has been initialized */
31 LPOLEUIINSERTOBJECTA lpOleUIInsertObject
;
37 HWND hwndCreateCtrlCB
;
39 HWND hwndCreateFromFileCB
;
40 HWND hwndDisplayIconCB
;
45 } InsertObjectDlgInfo
;
47 static INT_PTR CALLBACK
UIInsertObjectDlgProc(HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
48 static LRESULT
UIINSOBJDLG_OnWMCommand(HWND hwnd
, WPARAM wParam
, LPARAM lParam
);
49 static void UIINSERTOBJECTDLG_InitDialog(InsertObjectDlgInfo
* pdlgInfo
);
50 static void UIINSERTOBJECTDLG_SelectCreateCtrl(InsertObjectDlgInfo
* pdlgInfo
);
51 static void UIINSERTOBJECTDLG_SelectCreateFromFile(InsertObjectDlgInfo
* pdlgInfo
);
52 static void UIINSERTOBJECTDLG_SelectCreateNew(InsertObjectDlgInfo
* pdlgInfo
);
53 static BOOL
UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo
* pdlgInfo
);
54 static void UIINSERTOBJECTDLG_FreeObjectTypes(InsertObjectDlgInfo
* pdlgInfo
);
55 static void UIINSERTOBJECTDLG_SelChange(InsertObjectDlgInfo
* pdlgInfo
);
56 static BOOL
UIINSERTOBJECTDLG_OnOpen(InsertObjectDlgInfo
* pdlgInfo
);
57 static void UIINSERTOBJECTDLG_BrowseFile(InsertObjectDlgInfo
* pdlgInfo
);
58 static void UIINSERTOBJECTDLG_AddControl(InsertObjectDlgInfo
* pdlgInfo
);
60 typedef HRESULT (*DLLREGISTER
) (void);
62 extern HINSTANCE OLEDLG_hInstance
;
63 static const WCHAR OleUIInsertObjectInfoStr
[] = {'O','l','e','U','I','I','n','s','e','r','t','O','b','j','e','c','t',
64 'I','n','f','o','S','t','r',0};
66 /***********************************************************************
67 * OleUIInsertObjectA (OLEDLG.3)
69 UINT WINAPI
OleUIInsertObjectA(LPOLEUIINSERTOBJECTA lpOleUIInsertObject
)
74 InsertObjectDlgInfo dlgInfo
;
77 if (lpOleUIInsertObject
->lpszTemplate
|| lpOleUIInsertObject
->hResource
)
78 FIXME("Customized template not supported\n");
80 /* Create the dialog from a template */
81 if(!(hRes
= FindResourceA(OLEDLG_hInstance
,MAKEINTRESOURCEA(UIINSERTOBJECT
),
84 return OLEUI_ERR_FINDTEMPLATEFAILURE
;
87 if (!(hDlgTmpl
= LoadResource(OLEDLG_hInstance
, hRes
)) ||
88 !(template = LockResource( hDlgTmpl
)))
90 return OLEUI_ERR_LOADTEMPLATEFAILURE
;
93 /* Initialize InsertObjectDlgInfo structure */
94 dlgInfo
.lpOleUIInsertObject
= lpOleUIInsertObject
;
95 dlgInfo
.bObjListInit
= FALSE
;
97 lRes
= DialogBoxIndirectParamA(OLEDLG_hInstance
, (const DLGTEMPLATE
*) template,
98 lpOleUIInsertObject
->hWndOwner
, UIInsertObjectDlgProc
,
101 /* Unable to create the dialog */
103 return OLEUI_ERR_DIALOGFAILURE
;
109 /***********************************************************************
110 * UIInsertObjectDlgProc
112 * OLE UI Insert Object dialog procedure
114 INT_PTR CALLBACK
UIInsertObjectDlgProc(HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
116 InsertObjectDlgInfo
* pdlgInfo
= GetPropW(hwnd
, OleUIInsertObjectInfoStr
);
122 InsertObjectDlgInfo
* pdlgInfo
= (InsertObjectDlgInfo
*)lParam
;
124 pdlgInfo
->hwndSelf
= hwnd
;
126 SetPropW(hwnd
, OleUIInsertObjectInfoStr
, pdlgInfo
);
128 UIINSERTOBJECTDLG_InitDialog(pdlgInfo
);
134 return UIINSOBJDLG_OnWMCommand(hwnd
, wParam
, lParam
);
138 UIINSERTOBJECTDLG_FreeObjectTypes(pdlgInfo
);
139 RemovePropW(hwnd
, OleUIInsertObjectInfoStr
);
148 /***********************************************************************
149 * UIINSOBJDLG_OnWMCommand
151 * WM_COMMAND message handler
153 static LRESULT
UIINSOBJDLG_OnWMCommand(HWND hwnd
, WPARAM wParam
, LPARAM lParam
)
155 InsertObjectDlgInfo
* pdlgInfo
= GetPropW(hwnd
, OleUIInsertObjectInfoStr
);
156 WORD wNotifyCode
= HIWORD(wParam
);
157 WORD wID
= LOWORD(wParam
);
162 EndDialog(hwnd
, UIINSERTOBJECTDLG_OnOpen(pdlgInfo
));
166 EndDialog(hwnd
, FALSE
);
169 case IDC_CREATECONTROL
:
170 UIINSERTOBJECTDLG_SelectCreateCtrl(pdlgInfo
);
174 UIINSERTOBJECTDLG_SelectCreateNew(pdlgInfo
);
177 case IDC_CREATEFROMFILE
:
178 UIINSERTOBJECTDLG_SelectCreateFromFile(pdlgInfo
);
182 UIINSERTOBJECTDLG_BrowseFile(pdlgInfo
);
186 UIINSERTOBJECTDLG_AddControl(pdlgInfo
);
189 case IDC_OBJTYPELIST
:
190 if (wNotifyCode
== LBN_SELCHANGE
)
191 UIINSERTOBJECTDLG_SelChange(pdlgInfo
);
198 /***********************************************************************
199 * UIINSERTOBJECTDLG_InitDialog
201 * Initialize dialog display
203 static void UIINSERTOBJECTDLG_InitDialog(InsertObjectDlgInfo
* pdlgInfo
)
205 /* Initialize InsertObjectDlgInfo data structure */
206 pdlgInfo
->hwndObjTypeLB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_OBJTYPELIST
);
207 pdlgInfo
->hwndObjTypeLBL
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_OBJTYPELBL
);
208 pdlgInfo
->hwndFileLBL
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_FILELBL
);
209 pdlgInfo
->hwndFileTB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_FILE
);
210 pdlgInfo
->hwndCreateCtrlCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_CREATECONTROL
);
211 pdlgInfo
->hwndCreateNewCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_CREATENEW
);
212 pdlgInfo
->hwndCreateFromFileCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_CREATEFROMFILE
);
213 pdlgInfo
->hwndDisplayIconCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_ASICON
);
214 pdlgInfo
->hwndAddCtrlBTN
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_ADDCONTROL
);
215 pdlgInfo
->hwndBrowseBTN
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_BROWSE
);
216 pdlgInfo
->hwndResultDesc
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_RESULTDESC
);
218 /* Setup dialog controls based on flags */
219 if (pdlgInfo
->lpOleUIInsertObject
->lpszCaption
)
220 SetWindowTextA(pdlgInfo
->hwndSelf
, pdlgInfo
->lpOleUIInsertObject
->lpszCaption
);
222 ShowWindow(pdlgInfo
->hwndCreateCtrlCB
, (pdlgInfo
->lpOleUIInsertObject
->dwFlags
&
223 IOF_SHOWINSERTCONTROL
) ? SW_SHOW
: SW_HIDE
);
224 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, (pdlgInfo
->lpOleUIInsertObject
->dwFlags
&
225 IOF_CHECKDISPLAYASICON
) ? SW_SHOW
: SW_HIDE
);
226 EnableWindow(pdlgInfo
->hwndDisplayIconCB
, !(pdlgInfo
->lpOleUIInsertObject
->dwFlags
&
227 IOF_DISABLEDISPLAYASICON
));
229 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_SELECTCREATECONTROL
)
230 UIINSERTOBJECTDLG_SelectCreateCtrl(pdlgInfo
);
231 else if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_SELECTCREATEFROMFILE
)
232 UIINSERTOBJECTDLG_SelectCreateFromFile(pdlgInfo
);
233 else /* (pdlgInfo->lpOleUIInsertObject->dwFlags & IOF_SELECTCREATENEW) */
234 UIINSERTOBJECTDLG_SelectCreateNew(pdlgInfo
);
238 /***********************************************************************
239 * UIINSERTOBJECTDLG_SelectCreateCtrl
241 * Select Create Control Radio Button
243 static void UIINSERTOBJECTDLG_SelectCreateCtrl(InsertObjectDlgInfo
* pdlgInfo
)
245 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, SW_HIDE
);
246 ShowWindow(pdlgInfo
->hwndFileLBL
, SW_HIDE
);
247 ShowWindow(pdlgInfo
->hwndFileTB
, SW_HIDE
);
248 ShowWindow(pdlgInfo
->hwndBrowseBTN
, SW_HIDE
);
250 ShowWindow(pdlgInfo
->hwndObjTypeLBL
, SW_SHOW
);
251 ShowWindow(pdlgInfo
->hwndObjTypeLB
, SW_SHOW
);
252 ShowWindow(pdlgInfo
->hwndAddCtrlBTN
, SW_SHOW
);
254 SendMessageA(pdlgInfo
->hwndCreateCtrlCB
, BM_SETCHECK
, BST_CHECKED
, 0);
256 /* Populate object type listbox */
257 if (!pdlgInfo
->bObjListInit
)
258 UIINSERTOBJECTDLG_PopulateObjectTypes(pdlgInfo
);
262 /***********************************************************************
263 * UIINSERTOBJECTDLG_SelectCreateNew
265 * Select Create New Radio Button
267 static void UIINSERTOBJECTDLG_SelectCreateNew(InsertObjectDlgInfo
* pdlgInfo
)
269 ShowWindow(pdlgInfo
->hwndFileLBL
, SW_HIDE
);
270 ShowWindow(pdlgInfo
->hwndFileTB
, SW_HIDE
);
271 ShowWindow(pdlgInfo
->hwndAddCtrlBTN
, SW_HIDE
);
272 ShowWindow(pdlgInfo
->hwndBrowseBTN
, SW_HIDE
);
274 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CHECKDISPLAYASICON
)
275 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, SW_SHOW
);
277 ShowWindow(pdlgInfo
->hwndObjTypeLBL
, SW_SHOW
);
278 ShowWindow(pdlgInfo
->hwndObjTypeLB
, SW_SHOW
);
280 SendMessageA(pdlgInfo
->hwndCreateNewCB
, BM_SETCHECK
, BST_CHECKED
, 0);
282 if (!pdlgInfo
->bObjListInit
)
283 UIINSERTOBJECTDLG_PopulateObjectTypes(pdlgInfo
);
285 UIINSERTOBJECTDLG_SelChange(pdlgInfo
);
289 /***********************************************************************
290 * UIINSERTOBJECTDLG_SelectCreateFromFile
292 * Select Create From File Radio Button
294 static void UIINSERTOBJECTDLG_SelectCreateFromFile(InsertObjectDlgInfo
* pdlgInfo
)
296 WCHAR resstr
[MAX_PATH
];
298 ShowWindow(pdlgInfo
->hwndAddCtrlBTN
, SW_HIDE
);
299 ShowWindow(pdlgInfo
->hwndObjTypeLBL
, SW_HIDE
);
300 ShowWindow(pdlgInfo
->hwndObjTypeLB
, SW_HIDE
);
302 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CHECKDISPLAYASICON
)
303 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, SW_SHOW
);
305 ShowWindow(pdlgInfo
->hwndFileLBL
, SW_SHOW
);
306 ShowWindow(pdlgInfo
->hwndFileTB
, SW_SHOW
);
307 ShowWindow(pdlgInfo
->hwndBrowseBTN
, SW_SHOW
);
309 SendMessageW(pdlgInfo
->hwndCreateFromFileCB
, BM_SETCHECK
, BST_CHECKED
, 0);
311 if (LoadStringW(OLEDLG_hInstance
, IDS_RESULTFILEOBJDESC
, resstr
, MAX_PATH
))
312 SendMessageW(pdlgInfo
->hwndResultDesc
, WM_SETTEXT
, 0, (LPARAM
)resstr
);
316 /***********************************************************************
317 * UIINSERTOBJECTDLG_PopulateObjectTypes
319 * Populate Object Type listbox
321 static BOOL
UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo
* pdlgInfo
)
323 static const WCHAR szClsid
[] = {'C','L','S','I','D',0};
324 static const WCHAR szInsertable
[] = {'I','n','s','e','r','t','a','b','l','e',0};
325 static const WCHAR szNotInsertable
[] = {'N','o','t','I','n','s','e','r','t','a','b','l','e',0};
332 WCHAR keydesc
[MAX_PATH
];
333 WCHAR keyname
[MAX_PATH
];
337 UIINSERTOBJECTDLG_FreeObjectTypes(pdlgInfo
);
339 RegOpenKeyExW(HKEY_CLASSES_ROOT
, szClsid
, 0, KEY_READ
, &hkclsids
);
341 while (ERROR_SUCCESS
== (ret
= RegEnumKeyW(hkclsids
, index
, szclsid
, sizeof(szclsid
)/sizeof(szclsid
[0]))))
345 RegOpenKeyExW(hkclsids
, szclsid
, 0, KEY_READ
, &hkey
);
347 len
= sizeof(keyname
);
348 if (ERROR_SUCCESS
!= RegQueryValueW(hkey
, szInsertable
, keyname
, &len
))
351 len
= sizeof(keyname
);
352 if (ERROR_SUCCESS
== RegQueryValueW(hkey
, szNotInsertable
, keyname
, &len
))
355 CLSIDFromString(szclsid
, &clsid
);
357 for (i
= 0; i
< pdlgInfo
->lpOleUIInsertObject
->cClsidExclude
; i
++)
358 if (IsEqualGUID(&pdlgInfo
->lpOleUIInsertObject
->lpClsidExclude
[i
], &clsid
))
361 if (i
< pdlgInfo
->lpOleUIInsertObject
->cClsidExclude
)
364 len
= sizeof(keydesc
);
365 if (ERROR_SUCCESS
== RegQueryValueW(hkey
, NULL
, keydesc
, &len
))
367 CLSID
* lpclsid
= HeapAlloc(GetProcessHeap(), 0, sizeof(CLSID
));
370 len
= SendMessageW(pdlgInfo
->hwndObjTypeLB
, LB_ADDSTRING
, 0, (LPARAM
)keydesc
);
371 SendMessageW(pdlgInfo
->hwndObjTypeLB
, LB_SETITEMDATA
, len
, (LPARAM
)lpclsid
);
375 pdlgInfo
->bObjListInit
= (ret
== ERROR_NO_MORE_ITEMS
);
377 return pdlgInfo
->bObjListInit
;
381 /***********************************************************************
382 * UIINSERTOBJECTDLG_FreeObjectTypes
384 * Free Object Types listbox
386 static void UIINSERTOBJECTDLG_FreeObjectTypes(InsertObjectDlgInfo
* pdlgInfo
)
390 count
= SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_GETCOUNT
, 0, 0);
392 for (i
= 0; i
< count
; i
++)
394 CLSID
* lpclsid
= (CLSID
*) SendMessageA(pdlgInfo
->hwndObjTypeLB
,
395 LB_GETITEMDATA
, i
, 0);
396 HeapFree(GetProcessHeap(), 0, lpclsid
);
401 /***********************************************************************
402 * UIINSERTOBJECTDLG_SelChange
404 * Handle object type selection change
406 static void UIINSERTOBJECTDLG_SelChange(InsertObjectDlgInfo
* pdlgInfo
)
409 WCHAR objname
[MAX_PATH
];
410 WCHAR objdesc
[MAX_PATH
];
411 WCHAR resstr
[MAX_PATH
];
415 if (LoadStringW(OLEDLG_hInstance
, IDS_RESULTOBJDESC
, resstr
, MAX_PATH
) &&
416 ((index
= SendMessageW(pdlgInfo
->hwndObjTypeLB
, LB_GETCURSEL
, 0, 0)) >= 0) &&
417 SendMessageW(pdlgInfo
->hwndObjTypeLB
, LB_GETTEXT
, index
, (LPARAM
)objname
))
418 wsprintfW(objdesc
, resstr
, objname
);
422 SendMessageW(pdlgInfo
->hwndResultDesc
, WM_SETTEXT
, 0, (LPARAM
)objdesc
);
426 /***********************************************************************
427 * UIINSERTOBJECTDLG_SelChange
431 static BOOL
UIINSERTOBJECTDLG_OnOpen(InsertObjectDlgInfo
* pdlgInfo
)
435 if (BST_CHECKED
== SendMessageA(pdlgInfo
->hwndCreateCtrlCB
, BM_GETCHECK
, 0, 0) ||
436 BST_CHECKED
== SendMessageA(pdlgInfo
->hwndCreateNewCB
, BM_GETCHECK
, 0, 0))
438 INT index
= SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_GETCURSEL
, 0, 0);
442 CLSID
* clsid
= (CLSID
*) SendMessageA(pdlgInfo
->hwndObjTypeLB
,
443 LB_GETITEMDATA
, index
, 0);
444 pdlgInfo
->lpOleUIInsertObject
->clsid
= *clsid
;
446 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CREATENEWOBJECT
)
448 pdlgInfo
->lpOleUIInsertObject
->sc
= OleCreate(
449 &pdlgInfo
->lpOleUIInsertObject
->clsid
,
450 &pdlgInfo
->lpOleUIInsertObject
->iid
,
451 pdlgInfo
->lpOleUIInsertObject
->oleRender
,
452 pdlgInfo
->lpOleUIInsertObject
->lpFormatEtc
,
453 pdlgInfo
->lpOleUIInsertObject
->lpIOleClientSite
,
454 pdlgInfo
->lpOleUIInsertObject
->lpIStorage
,
455 pdlgInfo
->lpOleUIInsertObject
->ppvObj
);
461 else if (BST_CHECKED
== SendMessageA(pdlgInfo
->hwndCreateFromFileCB
, BM_GETCHECK
, 0, 0))
463 if (pdlgInfo
->lpOleUIInsertObject
->lpszFile
)
466 WCHAR wcsFile
[MAX_PATH
];
468 if (SendMessageW(pdlgInfo
->hwndFileTB
, WM_GETTEXT
, MAX_PATH
, (LPARAM
)wcsFile
))
469 WideCharToMultiByte(CP_ACP
, 0, wcsFile
, -1,
470 pdlgInfo
->lpOleUIInsertObject
->lpszFile
, pdlgInfo
->lpOleUIInsertObject
->cchFile
, NULL
, NULL
);
472 if (SUCCEEDED(hres
= GetClassFile(wcsFile
, &pdlgInfo
->lpOleUIInsertObject
->clsid
)))
474 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CREATEFILEOBJECT
)
476 hres
= OleCreateFromFile(
477 &pdlgInfo
->lpOleUIInsertObject
->clsid
,
479 &pdlgInfo
->lpOleUIInsertObject
->iid
,
480 pdlgInfo
->lpOleUIInsertObject
->oleRender
,
481 pdlgInfo
->lpOleUIInsertObject
->lpFormatEtc
,
482 pdlgInfo
->lpOleUIInsertObject
->lpIOleClientSite
,
483 pdlgInfo
->lpOleUIInsertObject
->lpIStorage
,
484 pdlgInfo
->lpOleUIInsertObject
->ppvObj
);
489 pdlgInfo
->lpOleUIInsertObject
->sc
= hres
;
497 /***********************************************************************
498 * UIINSERTOBJECTDLG_BrowseFile
500 * Browse for the file
502 static void UIINSERTOBJECTDLG_BrowseFile(InsertObjectDlgInfo
* pdlgInfo
)
505 char fname
[MAX_PATH
];
508 fn
.lStructSize
= sizeof(OPENFILENAMEA
);
509 fn
.hwndOwner
= pdlgInfo
->hwndSelf
;
511 fn
.lpstrFilter
= "All Files\0*.*\0\0";
512 fn
.lpstrCustomFilter
= NULL
;
513 fn
.nMaxCustFilter
= 0;
516 SendMessageA(pdlgInfo
->hwndFileTB
, WM_GETTEXT
, MAX_PATH
, (LPARAM
)fname
);
517 fn
.lpstrFile
= fname
;
518 fn
.nMaxFile
= MAX_PATH
;
520 fn
.lpstrFileTitle
= NULL
;
521 fn
.nMaxFileTitle
= 0;
522 fn
.lpstrInitialDir
= NULL
;
524 LoadStringA(OLEDLG_hInstance
, IDS_BROWSE
, title
, 32);
525 fn
.lpstrTitle
= title
;
527 fn
.Flags
= OFN_EXPLORER
| OFN_FILEMUSTEXIST
|
528 OFN_HIDEREADONLY
| OFN_LONGNAMES
;
530 fn
.nFileExtension
= 0;
531 fn
.lpstrDefExt
= NULL
;
534 fn
.lpTemplateName
= NULL
;
536 if (GetOpenFileNameA(&fn
))
537 SendMessageA(pdlgInfo
->hwndFileTB
, WM_SETTEXT
, 0, (LPARAM
)fn
.lpstrFile
);
541 /***********************************************************************
542 * UIINSERTOBJECTDLG_AddControl
544 * Add control to Object Type
546 static void UIINSERTOBJECTDLG_AddControl(InsertObjectDlgInfo
* pdlgInfo
)
549 char fname
[MAX_PATH
];
552 fn
.lStructSize
= sizeof(OPENFILENAMEA
);
553 fn
.hwndOwner
= pdlgInfo
->hwndSelf
;
555 fn
.lpstrFilter
= "OLE Controls\0*.ocx\0Libraries\0*.dll\0All Files\0*.*\0\0";
556 fn
.lpstrCustomFilter
= NULL
;
557 fn
.nMaxCustFilter
= 0;
561 fn
.lpstrFile
= fname
;
562 fn
.nMaxFile
= MAX_PATH
;
564 fn
.lpstrFileTitle
= NULL
;
565 fn
.nMaxFileTitle
= 0;
566 fn
.lpstrInitialDir
= NULL
;
568 LoadStringA(OLEDLG_hInstance
, IDS_BROWSE
, title
, 32);
569 fn
.lpstrTitle
= title
;
571 fn
.Flags
= OFN_EXPLORER
| OFN_FILEMUSTEXIST
|
572 OFN_HIDEREADONLY
| OFN_LONGNAMES
;
574 fn
.nFileExtension
= 0;
575 fn
.lpstrDefExt
= NULL
;
578 fn
.lpTemplateName
= NULL
;
580 if (GetOpenFileNameA(&fn
))
585 hMod
= LoadLibraryA(fn
.lpstrFile
);
591 regproc
= (DLLREGISTER
) GetProcAddress(hMod
, "DllRegisterServer");
594 if (S_OK
== regproc())
596 UIINSERTOBJECTDLG_PopulateObjectTypes(pdlgInfo
);
609 LoadStringW(OLEDLG_hInstance
, IDS_NOTOLEMODCAPTION
, title
, 32);
610 LoadStringW(OLEDLG_hInstance
, IDS_NOTOLEMOD
, msg
, 256);
612 MessageBoxW(pdlgInfo
->hwndSelf
, msg
, title
, MB_ICONEXCLAMATION
);