是否可以使用Windows资源来定义一个对话框,该对话框将调用标准FileOpenDialog的 ? 的想法是,以取代代码,如一个粘贴下面(source)与资源文件条目(也许DIALOG或DIALOGEX?)是否可以指定要从资源文件使用的COM对话框?
这可能吗?
/* https://msdn.microsoft.com/en-us/library/windows/desktop/ff485843(v=vs.85).aspx */
#include <windows.h>
#include <shobjidl.h>
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |
COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
IFileOpenDialog *pFileOpen;
// Create the FileOpenDialog object.
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL,
IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));
if (SUCCEEDED(hr))
{
// Show the Open dialog box.
hr = pFileOpen->Show(NULL);
// Get the file name from the dialog box.
if (SUCCEEDED(hr))
{
IShellItem *pItem;
hr = pFileOpen->GetResult(&pItem);
if (SUCCEEDED(hr))
{
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
// Display the file name to the user.
if (SUCCEEDED(hr))
{
MessageBox(NULL, pszFilePath, L"File Path", MB_OK);
CoTaskMemFree(pszFilePath);
}
pItem->Release();
}
}
pFileOpen->Release();
}
CoUninitialize();
}
return 0;
}
背景的问题
我从MSDEV center 和也是继MSDN的教程在其他地方的例子,显示有“RC”,资源编译器编译的Windows资源文件。
最近我看到其中一个资源文件中指定了整个“关于”对话框,并在使用“对话框(的hInstance,MAKEINTRESOURCE(IDD_ABOUTDIALOG)的hWnd,& AboutDialogProc)” (link)
IDD_ABOUTDIALOG DIALOGEX 0, 0, 147, 67
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
ICON IDI_APPICON,IDC_STATIC,7,7,20,20
LTEXT "Win32 Test application.",IDC_STATIC,34,7,86,8
LTEXT "©2013 Transmission Zero",IDC_STATIC,34,17,86,8
DEFPUSHBUTTON "OK",IDOK,90,46,50,14,WS_GROUP
END
Windows程序中引用的例子
感谢您的阅读!
对话框资源不是代码生成工具。他们描述了如何创建窗口并定位它们,就这些。 –
对话框编辑器就像穷人的UI设计师。点击设计非常方便,但您仍然需要使用代码才能使用它。最小的程序[在这里](https://stackoverflow.com/a/10233086/17034)。 –
标准对话框出于某种原因。请不要试图通过实现您自己的文件对话框来重新发明轮子,它将缺少功能,并且在将新功能和/或设计添加到标准对话框后的几年之后,它们将会看起来像“oldschool”。只需在'IFileOpenDialog' /'IFileSaveDialog'周围写一点小包装函数,这样每次需要调用文件对话框时都不必重复自己。 – zett42