如何使用Windows API自定义对话框模板的资源? 我试图在C++中的OpenFLIN名称结构中使用自定义模板,无法确定我到底做错了什么。以下是我到目前为止的情况: #include <windows.h> #include <iostream> #include "resource.h" void main() { HWND hwnd = NULL;// owner window OPENFILENAME ofn; CHAR File[256]; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwnd; ofn.hInstance = NULL; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.nFilterIndex = 0; ofn.lpstrFile = File; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof(File); ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrInitialDir = NULL; ofn.lpstrTitle = NULL; ofn.Flags = OFN_ENABLETEMPLATE; ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = NULL; ofn.lCustData = 0L; ofn.lpfnHook = NULL; ofn.lpTemplateName = "IDD_DIALOGBAR"; if (GetOpenFileName(&ofn)==TRUE) { //do something with filename } std::cout << CommDlgExtendedError(); } #包括 #包括 #包括“resource.h” void main(){ HWND HWND=NULL;//所有者窗口 OpenN; 字符文件[256]; 零内存(&ofn,sizeof(OPENFILENAME)); ofn.lStructSize=sizeof(OPENFILENAME); ofn.hwndOwner=hwnd; ofn.hInstance=NULL; ofn.lpstrCustomFilter=NULL; ofn.nmaxustfilter=0; ofn.nFilterIndex=0; ofn.lpstrFile=文件; ofn.lpstrFile[0]='\0'; ofn.nMaxFile=sizeof(文件); ofn.lpstrFileTitle=NULL; ofn.nMaxFileTitle=最大路径; ofn.lpstrInitialDir=NULL; ofn.lpstrTitle=NULL; ofn.Flags=ofn_启用模板; ofn.nFileOffset=0; ofn.nFileExtension=0; ofn.lpstrDefExt=NULL; ofn.lCustData=0L; ofn.lpfnHook=NULL; ofn.lpTemplateName=“IDD_DIALOGBAR”; if(GetOpenFileName(&ofn)==TRUE) { //对文件名做些什么 } std::cout“Resource”。然后,我从可用资源列表中选择了“IDD_DIALOGBAR”。这为项目添加了一个新资源,当我在Visual Studio中切换到“Resource View”时可以查看该资源

如何使用Windows API自定义对话框模板的资源? 我试图在C++中的OpenFLIN名称结构中使用自定义模板,无法确定我到底做错了什么。以下是我到目前为止的情况: #include <windows.h> #include <iostream> #include "resource.h" void main() { HWND hwnd = NULL;// owner window OPENFILENAME ofn; CHAR File[256]; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwnd; ofn.hInstance = NULL; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.nFilterIndex = 0; ofn.lpstrFile = File; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof(File); ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrInitialDir = NULL; ofn.lpstrTitle = NULL; ofn.Flags = OFN_ENABLETEMPLATE; ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = NULL; ofn.lCustData = 0L; ofn.lpfnHook = NULL; ofn.lpTemplateName = "IDD_DIALOGBAR"; if (GetOpenFileName(&ofn)==TRUE) { //do something with filename } std::cout << CommDlgExtendedError(); } #包括 #包括 #包括“resource.h” void main(){ HWND HWND=NULL;//所有者窗口 OpenN; 字符文件[256]; 零内存(&ofn,sizeof(OPENFILENAME)); ofn.lStructSize=sizeof(OPENFILENAME); ofn.hwndOwner=hwnd; ofn.hInstance=NULL; ofn.lpstrCustomFilter=NULL; ofn.nmaxustfilter=0; ofn.nFilterIndex=0; ofn.lpstrFile=文件; ofn.lpstrFile[0]='\0'; ofn.nMaxFile=sizeof(文件); ofn.lpstrFileTitle=NULL; ofn.nMaxFileTitle=最大路径; ofn.lpstrInitialDir=NULL; ofn.lpstrTitle=NULL; ofn.Flags=ofn_启用模板; ofn.nFileOffset=0; ofn.nFileExtension=0; ofn.lpstrDefExt=NULL; ofn.lCustData=0L; ofn.lpfnHook=NULL; ofn.lpTemplateName=“IDD_DIALOGBAR”; if(GetOpenFileName(&ofn)==TRUE) { //对文件名做些什么 } std::cout“Resource”。然后,我从可用资源列表中选择了“IDD_DIALOGBAR”。这为项目添加了一个新资源,当我在Visual Studio中切换到“Resource View”时可以查看该资源,c++,controltemplate,getopenfilename,C++,Controltemplate,Getopenfilename,当我运行程序时,对话框根本不出现。commdlgextenderror()的结果是CDERR\u FINDRESFAILURE:common dialog box函数无法找到指定的资源 我也尝试过改变 ofn.lpTemplateName=“IDD\u DIALOGBAR” 到 ofn.lpTemplateName=MAKEINTRESOURCE(IDD\U对话框栏) 但这导致了不同的错误消息: CDERR\u DIALOGFAILURE:无法创建对话框。公用对话框函数对DialogBox函数的

当我运行程序时,对话框根本不出现。
commdlgextenderror()
的结果是
CDERR\u FINDRESFAILURE:common dialog box函数无法找到指定的资源

我也尝试过改变

ofn.lpTemplateName=“IDD\u DIALOGBAR”

ofn.lpTemplateName=MAKEINTRESOURCE(IDD\U对话框栏)

但这导致了不同的错误消息:

CDERR\u DIALOGFAILURE:无法创建对话框。公用对话框函数对DialogBox函数的调用失败。例如,如果公用对话框调用指定了无效的窗口句柄,则会发生此错误。


我缺少什么?我没有正确引用资源吗?

of n.hInstance
需要设置为具有对话框模板资源的模块(可执行文件或DLL)的
hInstance

模板可能正在使用您忘记注册的自定义控件