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
32 #include "wine/debug.h"
33 #include "wine/unicode.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(oledlg
);
43 BOOL bObjListInit
; /* Object list has been initialized */
44 LPOLEUIINSERTOBJECTA lpOleUIInsertObject
;
50 HWND hwndCreateCtrlCB
;
52 HWND hwndCreateFromFileCB
;
53 HWND hwndDisplayIconCB
;
58 } InsertObjectDlgInfo
;
60 INT_PTR CALLBACK
UIInsertObjectDlgProc(HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
61 static LRESULT
UIINSOBJDLG_OnWMCommand(HWND hwnd
, WPARAM wParam
, LPARAM lParam
);
62 static void UIINSERTOBJECTDLG_InitDialog(InsertObjectDlgInfo
* pdlgInfo
);
63 static void UIINSERTOBJECTDLG_SelectCreateCtrl(InsertObjectDlgInfo
* pdlgInfo
);
64 static void UIINSERTOBJECTDLG_SelectCreateFromFile(InsertObjectDlgInfo
* pdlgInfo
);
65 static void UIINSERTOBJECTDLG_SelectCreateNew(InsertObjectDlgInfo
* pdlgInfo
);
66 static BOOL
UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo
* pdlgInfo
);
67 static void UIINSERTOBJECTDLG_FreeObjectTypes(InsertObjectDlgInfo
* pdlgInfo
);
68 static void UIINSERTOBJECTDLG_SelChange(InsertObjectDlgInfo
* pdlgInfo
);
69 static BOOL
UIINSERTOBJECTDLG_OnOpen(InsertObjectDlgInfo
* pdlgInfo
);
70 static void UIINSERTOBJECTDLG_BrowseFile(InsertObjectDlgInfo
* pdlgInfo
);
71 static void UIINSERTOBJECTDLG_AddControl(InsertObjectDlgInfo
* pdlgInfo
);
73 typedef HRESULT (*DLLREGISTER
) (void);
75 extern HINSTANCE OLEDLG_hInstance
;
76 static const char OleUIInsertObjectInfoStr
[] = "OleUIInsertObjectInfoStr";
78 /***********************************************************************
79 * OleUIInsertObjectA (OLEDLG.3)
81 UINT WINAPI
OleUIInsertObjectA(LPOLEUIINSERTOBJECTA lpOleUIInsertObject
)
86 InsertObjectDlgInfo dlgInfo
;
89 if (lpOleUIInsertObject
->lpszTemplate
|| lpOleUIInsertObject
->hResource
)
90 FIXME("Customized template not supported\n");
92 /* Create the dialog from a template */
93 if(!(hRes
= FindResourceA(OLEDLG_hInstance
,MAKEINTRESOURCEA(UIINSERTOBJECT
),
96 return OLEUI_ERR_FINDTEMPLATEFAILURE
;
99 if (!(hDlgTmpl
= LoadResource(OLEDLG_hInstance
, hRes
)) ||
100 !(template = LockResource( hDlgTmpl
)))
102 return OLEUI_ERR_LOADTEMPLATEFAILURE
;
105 /* Initialize InsertObjectDlgInfo structure */
106 dlgInfo
.lpOleUIInsertObject
= lpOleUIInsertObject
;
107 dlgInfo
.bObjListInit
= FALSE
;
109 lRes
= DialogBoxIndirectParamA(OLEDLG_hInstance
, (const DLGTEMPLATE
*) template,
110 lpOleUIInsertObject
->hWndOwner
, UIInsertObjectDlgProc
,
113 /* Unable to create the dialog */
115 return OLEUI_ERR_DIALOGFAILURE
;
121 /***********************************************************************
122 * UIInsertObjectDlgProc
124 * OLE UI Insert Object dialog procedure
126 INT_PTR CALLBACK
UIInsertObjectDlgProc(HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
128 InsertObjectDlgInfo
* pdlgInfo
= (InsertObjectDlgInfo
*) GetPropA(hwnd
,OleUIInsertObjectInfoStr
);
134 InsertObjectDlgInfo
* pdlgInfo
= (InsertObjectDlgInfo
*)lParam
;
136 pdlgInfo
->hwndSelf
= hwnd
;
138 SetPropA(hwnd
, OleUIInsertObjectInfoStr
, (HANDLE
) pdlgInfo
);
140 UIINSERTOBJECTDLG_InitDialog(pdlgInfo
);
146 return UIINSOBJDLG_OnWMCommand(hwnd
, wParam
, lParam
);
150 UIINSERTOBJECTDLG_FreeObjectTypes(pdlgInfo
);
151 RemovePropA(hwnd
, OleUIInsertObjectInfoStr
);
160 /***********************************************************************
161 * UIINSOBJDLG_OnWMCommand
163 * WM_COMMAND message handler
165 static LRESULT
UIINSOBJDLG_OnWMCommand(HWND hwnd
, WPARAM wParam
, LPARAM lParam
)
167 WORD wNotifyCode
= HIWORD(wParam
);
168 WORD wID
= LOWORD(wParam
);
169 InsertObjectDlgInfo
* pdlgInfo
= (InsertObjectDlgInfo
*) GetPropA(hwnd
,OleUIInsertObjectInfoStr
);
174 EndDialog(hwnd
, UIINSERTOBJECTDLG_OnOpen(pdlgInfo
));
178 EndDialog(hwnd
, FALSE
);
181 case IDC_CREATECONTROL
:
182 UIINSERTOBJECTDLG_SelectCreateCtrl(pdlgInfo
);
186 UIINSERTOBJECTDLG_SelectCreateNew(pdlgInfo
);
189 case IDC_CREATEFROMFILE
:
190 UIINSERTOBJECTDLG_SelectCreateFromFile(pdlgInfo
);
194 UIINSERTOBJECTDLG_BrowseFile(pdlgInfo
);
198 UIINSERTOBJECTDLG_AddControl(pdlgInfo
);
200 case IDC_OBJTYPELIST
:
202 if (wNotifyCode
== LBN_SELCHANGE
)
203 UIINSERTOBJECTDLG_SelChange(pdlgInfo
);
211 /***********************************************************************
212 * UIINSERTOBJECTDLG_InitDialog
214 * Initialize dialog display
216 static void UIINSERTOBJECTDLG_InitDialog(InsertObjectDlgInfo
* pdlgInfo
)
218 /* Initialize InsertObjectDlgInfo data structure */
219 pdlgInfo
->hwndObjTypeLB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_OBJTYPELIST
);
220 pdlgInfo
->hwndObjTypeLBL
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_OBJTYPELBL
);
221 pdlgInfo
->hwndFileLBL
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_FILELBL
);
222 pdlgInfo
->hwndFileTB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_FILE
);
223 pdlgInfo
->hwndCreateCtrlCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_CREATECONTROL
);
224 pdlgInfo
->hwndCreateNewCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_CREATENEW
);
225 pdlgInfo
->hwndCreateFromFileCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_CREATEFROMFILE
);
226 pdlgInfo
->hwndDisplayIconCB
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_ASICON
);
227 pdlgInfo
->hwndAddCtrlBTN
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_ADDCONTROL
);
228 pdlgInfo
->hwndBrowseBTN
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_BROWSE
);
229 pdlgInfo
->hwndResultDesc
= GetDlgItem(pdlgInfo
->hwndSelf
, IDC_RESULTDESC
);
231 /* Setup dialog controls based on flags */
232 if (pdlgInfo
->lpOleUIInsertObject
->lpszCaption
)
233 SetWindowTextA(pdlgInfo
->hwndSelf
, pdlgInfo
->lpOleUIInsertObject
->lpszCaption
);
235 ShowWindow(pdlgInfo
->hwndCreateCtrlCB
, (pdlgInfo
->lpOleUIInsertObject
->dwFlags
&
236 IOF_SHOWINSERTCONTROL
) ? SW_SHOW
: SW_HIDE
);
237 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, (pdlgInfo
->lpOleUIInsertObject
->dwFlags
&
238 IOF_CHECKDISPLAYASICON
) ? SW_SHOW
: SW_HIDE
);
239 EnableWindow(pdlgInfo
->hwndDisplayIconCB
, (pdlgInfo
->lpOleUIInsertObject
->dwFlags
&
240 IOF_DISABLEDISPLAYASICON
) ? FALSE
: TRUE
);
242 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_SELECTCREATECONTROL
)
243 UIINSERTOBJECTDLG_SelectCreateCtrl(pdlgInfo
);
244 else if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_SELECTCREATEFROMFILE
)
245 UIINSERTOBJECTDLG_SelectCreateFromFile(pdlgInfo
);
246 else /* (pdlgInfo->lpOleUIInsertObject->dwFlags & IOF_SELECTCREATENEW) */
247 UIINSERTOBJECTDLG_SelectCreateNew(pdlgInfo
);
251 /***********************************************************************
252 * UIINSERTOBJECTDLG_SelectCreateCtrl
254 * Select Create Control Radio Button
256 static void UIINSERTOBJECTDLG_SelectCreateCtrl(InsertObjectDlgInfo
* pdlgInfo
)
258 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, SW_HIDE
);
259 ShowWindow(pdlgInfo
->hwndFileLBL
, SW_HIDE
);
260 ShowWindow(pdlgInfo
->hwndFileTB
, SW_HIDE
);
261 ShowWindow(pdlgInfo
->hwndBrowseBTN
, SW_HIDE
);
263 ShowWindow(pdlgInfo
->hwndObjTypeLBL
, SW_SHOW
);
264 ShowWindow(pdlgInfo
->hwndObjTypeLB
, SW_SHOW
);
265 ShowWindow(pdlgInfo
->hwndAddCtrlBTN
, SW_SHOW
);
267 SendMessageA(pdlgInfo
->hwndCreateCtrlCB
, BM_SETCHECK
, BST_CHECKED
, 0);
269 /* Populate object type listbox */
270 if (!pdlgInfo
->bObjListInit
)
271 UIINSERTOBJECTDLG_PopulateObjectTypes(pdlgInfo
);
275 /***********************************************************************
276 * UIINSERTOBJECTDLG_SelectCreateNew
278 * Select Create New Radio Button
280 static void UIINSERTOBJECTDLG_SelectCreateNew(InsertObjectDlgInfo
* pdlgInfo
)
282 ShowWindow(pdlgInfo
->hwndFileLBL
, SW_HIDE
);
283 ShowWindow(pdlgInfo
->hwndFileTB
, SW_HIDE
);
284 ShowWindow(pdlgInfo
->hwndAddCtrlBTN
, SW_HIDE
);
285 ShowWindow(pdlgInfo
->hwndBrowseBTN
, SW_HIDE
);
287 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CHECKDISPLAYASICON
)
288 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, SW_SHOW
);
290 ShowWindow(pdlgInfo
->hwndObjTypeLBL
, SW_SHOW
);
291 ShowWindow(pdlgInfo
->hwndObjTypeLB
, SW_SHOW
);
293 SendMessageA(pdlgInfo
->hwndCreateNewCB
, BM_SETCHECK
, BST_CHECKED
, 0);
295 if (!pdlgInfo
->bObjListInit
)
296 UIINSERTOBJECTDLG_PopulateObjectTypes(pdlgInfo
);
298 UIINSERTOBJECTDLG_SelChange(pdlgInfo
);
302 /***********************************************************************
303 * UIINSERTOBJECTDLG_SelectCreateFromFile
305 * Select Create From File Radio Button
307 static void UIINSERTOBJECTDLG_SelectCreateFromFile(InsertObjectDlgInfo
* pdlgInfo
)
309 char resstr
[MAX_PATH
];
311 ShowWindow(pdlgInfo
->hwndAddCtrlBTN
, SW_HIDE
);
312 ShowWindow(pdlgInfo
->hwndObjTypeLBL
, SW_HIDE
);
313 ShowWindow(pdlgInfo
->hwndObjTypeLB
, SW_HIDE
);
315 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CHECKDISPLAYASICON
)
316 ShowWindow(pdlgInfo
->hwndDisplayIconCB
, SW_SHOW
);
318 ShowWindow(pdlgInfo
->hwndFileLBL
, SW_SHOW
);
319 ShowWindow(pdlgInfo
->hwndFileTB
, SW_SHOW
);
320 ShowWindow(pdlgInfo
->hwndBrowseBTN
, SW_SHOW
);
322 SendMessageA(pdlgInfo
->hwndCreateFromFileCB
, BM_SETCHECK
, BST_CHECKED
, 0);
324 if (LoadStringA(OLEDLG_hInstance
, IDS_RESULTFILEOBJDESC
, resstr
, MAX_PATH
))
325 SendMessageA(pdlgInfo
->hwndResultDesc
, WM_SETTEXT
, 0, (LPARAM
)resstr
);
329 /***********************************************************************
330 * UIINSERTOBJECTDLG_PopulateObjectTypes
332 * Populate Object Type listbox
334 static BOOL
UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo
* pdlgInfo
)
343 CHAR keydesc
[MAX_PATH
];
344 CHAR keyname
[MAX_PATH
];
348 UIINSERTOBJECTDLG_FreeObjectTypes(pdlgInfo
);
350 RegOpenKeyExA(HKEY_CLASSES_ROOT
, "CLSID", 0, KEY_READ
, &hkclsids
);
352 while (ERROR_SUCCESS
== (ret
= RegEnumKeyA(hkclsids
, index
, szclsid
, MAX_PATH
)))
356 RegOpenKeyExA(hkclsids
, szclsid
, 0, KEY_READ
, &hkey
);
359 if (ERROR_SUCCESS
!= RegQueryValueA(hkey
, "Insertable", keyname
, &len
))
363 if (ERROR_SUCCESS
== RegQueryValueA(hkey
, "NotInsertable", keyname
, &len
))
366 RtlMultiByteToUnicodeN(wszclsid
, MAX_PATH
, NULL
, szclsid
, MAX_PATH
);
367 CLSIDFromString(wszclsid
, &clsid
);
369 for (i
= 0; i
< pdlgInfo
->lpOleUIInsertObject
->cClsidExclude
; i
++)
370 if (IsEqualGUID(&pdlgInfo
->lpOleUIInsertObject
->lpClsidExclude
[i
], &clsid
))
373 if (i
< pdlgInfo
->lpOleUIInsertObject
->cClsidExclude
)
377 if (ERROR_SUCCESS
== RegQueryValueA(hkey
, NULL
, keydesc
, &len
))
379 CLSID
* lpclsid
= HeapAlloc(GetProcessHeap(), 0, sizeof(CLSID
));
380 memcpy(lpclsid
, &clsid
, sizeof(CLSID
));
382 len
= SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_ADDSTRING
, 0, (LPARAM
)keydesc
);
383 SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_SETITEMDATA
, (WPARAM
)len
, (LPARAM
)lpclsid
);
387 pdlgInfo
->bObjListInit
= (ret
== ERROR_NO_MORE_ITEMS
);
389 return pdlgInfo
->bObjListInit
;
393 /***********************************************************************
394 * UIINSERTOBJECTDLG_FreeObjectTypes
396 * Free Object Types listbox
398 static void UIINSERTOBJECTDLG_FreeObjectTypes(InsertObjectDlgInfo
* pdlgInfo
)
402 count
= SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_GETCOUNT
, (WPARAM
)0, (LPARAM
)0);
404 for (i
= 0; i
< count
; i
++)
406 CLSID
* lpclsid
= (CLSID
*) SendMessageA(pdlgInfo
->hwndObjTypeLB
,
407 LB_GETITEMDATA
, (WPARAM
)i
, (LPARAM
)0);
408 HeapFree(GetProcessHeap(), 0, lpclsid
);
413 /***********************************************************************
414 * UIINSERTOBJECTDLG_SelChange
416 * Handle object type selection change
418 static void UIINSERTOBJECTDLG_SelChange(InsertObjectDlgInfo
* pdlgInfo
)
421 CHAR objname
[MAX_PATH
];
422 CHAR objdesc
[MAX_PATH
];
423 CHAR resstr
[MAX_PATH
];
427 if (LoadStringA(OLEDLG_hInstance
, IDS_RESULTOBJDESC
, resstr
, MAX_PATH
) &&
428 ((index
= SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_GETCURSEL
, 0, 0)) >= 0) &&
429 SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_GETTEXT
, (WPARAM
)index
, (LPARAM
)objname
))
430 sprintf(objdesc
, resstr
, objname
);
434 SendMessageA(pdlgInfo
->hwndResultDesc
, WM_SETTEXT
, 0, (LPARAM
)objdesc
);
438 /***********************************************************************
439 * UIINSERTOBJECTDLG_SelChange
443 static BOOL
UIINSERTOBJECTDLG_OnOpen(InsertObjectDlgInfo
* pdlgInfo
)
447 if (BST_CHECKED
== SendMessageA(pdlgInfo
->hwndCreateCtrlCB
, BM_GETCHECK
, 0, 0) ||
448 BST_CHECKED
== SendMessageA(pdlgInfo
->hwndCreateNewCB
, BM_GETCHECK
, 0, 0))
450 INT index
= SendMessageA(pdlgInfo
->hwndObjTypeLB
, LB_GETCURSEL
, 0, 0);
454 CLSID
* clsid
= (CLSID
*) SendMessageA(pdlgInfo
->hwndObjTypeLB
,
455 LB_GETITEMDATA
, (WPARAM
)index
, 0);
456 memcpy(&pdlgInfo
->lpOleUIInsertObject
->clsid
, clsid
, sizeof(CLSID
));
458 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CREATENEWOBJECT
)
460 pdlgInfo
->lpOleUIInsertObject
->sc
= OleCreate(
461 &pdlgInfo
->lpOleUIInsertObject
->clsid
,
462 &pdlgInfo
->lpOleUIInsertObject
->iid
,
463 pdlgInfo
->lpOleUIInsertObject
->oleRender
,
464 pdlgInfo
->lpOleUIInsertObject
->lpFormatEtc
,
465 pdlgInfo
->lpOleUIInsertObject
->lpIOleClientSite
,
466 pdlgInfo
->lpOleUIInsertObject
->lpIStorage
,
467 pdlgInfo
->lpOleUIInsertObject
->ppvObj
);
473 else if (BST_CHECKED
== SendMessageA(pdlgInfo
->hwndCreateFromFileCB
, BM_GETCHECK
, 0, 0))
475 char fname
[MAX_PATH
];
477 if (pdlgInfo
->lpOleUIInsertObject
->lpszFile
)
480 WCHAR wcsFile
[MAX_PATH
];
482 SendMessageA(pdlgInfo
->hwndFileTB
, WM_GETTEXT
, (WPARAM
)MAX_PATH
, (LPARAM
)fname
);
483 lstrcpynA(pdlgInfo
->lpOleUIInsertObject
->lpszFile
, fname
, pdlgInfo
->lpOleUIInsertObject
->cchFile
);
485 RtlMultiByteToUnicodeN(wcsFile
, MAX_PATH
, NULL
, fname
, MAX_PATH
);
486 if (ERROR_SUCCESS
== (hres
= GetClassFile(wcsFile
, &pdlgInfo
->lpOleUIInsertObject
->clsid
)))
488 if (pdlgInfo
->lpOleUIInsertObject
->dwFlags
& IOF_CREATEFILEOBJECT
)
490 hres
= OleCreateFromFile(
491 &pdlgInfo
->lpOleUIInsertObject
->clsid
,
493 &pdlgInfo
->lpOleUIInsertObject
->iid
,
494 pdlgInfo
->lpOleUIInsertObject
->oleRender
,
495 pdlgInfo
->lpOleUIInsertObject
->lpFormatEtc
,
496 pdlgInfo
->lpOleUIInsertObject
->lpIOleClientSite
,
497 pdlgInfo
->lpOleUIInsertObject
->lpIStorage
,
498 pdlgInfo
->lpOleUIInsertObject
->ppvObj
);
503 pdlgInfo
->lpOleUIInsertObject
->sc
= hres
;
511 /***********************************************************************
512 * UIINSERTOBJECTDLG_BrowseFile
514 * Browse for the file
516 static void UIINSERTOBJECTDLG_BrowseFile(InsertObjectDlgInfo
* pdlgInfo
)
519 char fname
[MAX_PATH
];
522 fn
.lStructSize
= sizeof(OPENFILENAMEA
);
523 fn
.hwndOwner
= pdlgInfo
->hwndSelf
;
525 fn
.lpstrFilter
= "All Files\0*.*\0\0";
526 fn
.lpstrCustomFilter
= NULL
;
527 fn
.nMaxCustFilter
= 0;
530 SendMessageA(pdlgInfo
->hwndFileTB
, WM_GETTEXT
, (WPARAM
)MAX_PATH
, (LPARAM
)fname
);
531 fn
.lpstrFile
= fname
;
532 fn
.nMaxFile
= MAX_PATH
;
534 fn
.lpstrFileTitle
= NULL
;
535 fn
.nMaxFileTitle
= 0;
536 fn
.lpstrInitialDir
= NULL
;
538 LoadStringA(OLEDLG_hInstance
, IDS_BROWSE
, title
, 32);
539 fn
.lpstrTitle
= title
;
541 fn
.Flags
= OFN_EXPLORER
| OFN_FILEMUSTEXIST
|
542 OFN_HIDEREADONLY
| OFN_LONGNAMES
;
544 fn
.nFileExtension
= 0;
545 fn
.lpstrDefExt
= NULL
;
548 fn
.lpTemplateName
= NULL
;
550 if (GetOpenFileNameA(&fn
))
551 SendMessageA(pdlgInfo
->hwndFileTB
, WM_SETTEXT
, (WPARAM
)0, (LPARAM
)fn
.lpstrFile
);
555 /***********************************************************************
556 * UIINSERTOBJECTDLG_AddControl
558 * Add control to Object Type
560 static void UIINSERTOBJECTDLG_AddControl(InsertObjectDlgInfo
* pdlgInfo
)
563 char fname
[MAX_PATH
];
566 fn
.lStructSize
= sizeof(OPENFILENAMEA
);
567 fn
.hwndOwner
= pdlgInfo
->hwndSelf
;
569 fn
.lpstrFilter
= "OLE Controls\0*.ocx\0Libraries\0*.dll\0All Files\0*.*\0\0";
570 fn
.lpstrCustomFilter
= NULL
;
571 fn
.nMaxCustFilter
= 0;
575 fn
.lpstrFile
= fname
;
576 fn
.nMaxFile
= MAX_PATH
;
578 fn
.lpstrFileTitle
= NULL
;
579 fn
.nMaxFileTitle
= 0;
580 fn
.lpstrInitialDir
= NULL
;
582 LoadStringA(OLEDLG_hInstance
, IDS_BROWSE
, title
, 32);
583 fn
.lpstrTitle
= title
;
585 fn
.Flags
= OFN_EXPLORER
| OFN_FILEMUSTEXIST
|
586 OFN_HIDEREADONLY
| OFN_LONGNAMES
;
588 fn
.nFileExtension
= 0;
589 fn
.lpstrDefExt
= NULL
;
592 fn
.lpTemplateName
= NULL
;
594 if (GetOpenFileNameA(&fn
))
599 hMod
= LoadLibraryA(fn
.lpstrFile
);
605 regproc
= (DLLREGISTER
) GetProcAddress(hMod
, "DllRegisterServer");
608 if (S_OK
== regproc())
610 UIINSERTOBJECTDLG_PopulateObjectTypes(pdlgInfo
);
623 LoadStringA(OLEDLG_hInstance
, IDS_NOTOLEMODCAPTION
, title
, 32);
624 LoadStringA(OLEDLG_hInstance
, IDS_NOTOLEMOD
, msg
, 256);
626 MessageBoxA(pdlgInfo
->hwndSelf
, msg
, title
, MB_ICONEXCLAMATION
);