Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用自定义模板显示GetOpenFileName函数_C_Winapi_Rc - Fatal编程技术网

C 使用自定义模板显示GetOpenFileName函数

C 使用自定义模板显示GetOpenFileName函数,c,winapi,rc,C,Winapi,Rc,我在尝试向“打开文件”对话框添加一些自定义控件时遇到问题。我使用了下面显示的资源文件,但它不工作。我认为某个地方有错误,但我不能改正。 如何在“打开文件”对话框上显示自定义控件 程序c #include "resource.h" int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { OPENFILENAME ofn; CHAR

我在尝试向“打开文件”对话框添加一些自定义控件时遇到问题。我使用了下面显示的资源文件,但它不工作。我认为某个地方有错误,但我不能改正。 如何在“打开文件”对话框上显示自定义控件

程序c

#include "resource.h"

int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow )
{
    OPENFILENAME ofn;
    CHAR szFile[50];

    ZeroMemory( &ofn , sizeof(ofn));

    ofn.lStructSize = sizeof ( ofn );
    ofn.hwndOwner = NULL;
    ofn.hInstance = hInstance;
    ofn.lpstrFile = szFile ;
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = "All\0*.*\0Text\0*.txt\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL ;
    ofn.nMaxFileTitle = 0 ;
    ofn.lpstrInitialDir = NULL ;
    ofn.Flags = OFN_ENABLETEMPLATE | OFN_EXPLORER; 
    ofn.lpfnHook = NULL;
    ofn.lpTemplateName = MAKEINTRESOURCE( MY_DIALOG );

    GetOpenFileName( &ofn );

    return 0;
}
dialog.rc

#include "resource.h"

MY_DIALOG  DIALOG   0, 0, 260, 30
STYLE WS_CHILD | WS_CAPTION
CAPTION "My Dialog"
FONT 8, "MS Sans Serif"
{
   CONTROL "", 1119, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 0, 0, 265, 10 
   CONTROL "Items:", 3221, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 5, 13, 45, 9 
   CONTROL "", 3202, "COMBOBOX", CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 54, 11, 218, 63 
   CONTROL "Current index:", 3221, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 5, 31, 45, 9 
   CONTROL "", 3203, "COMBOBOX", CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 54, 29, 204, 63 
   CONTROL "...", 3204, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 260, 29, 12, 12 
}
资源.h

#ifndef RESOURCE_H
#define RESOURCE_H

#include <windows.h>
#define MY_DIALOG  120

#endif //RESOURCE_H

另外,还将N_ENABLEHOOK的
添加到标志中。请注意,在比XP更新的windows版本上,这种外观很难看。使用
charszfile[MAX_PATH]

–Barmak Shemirani

这是您在XP上的操作方式。但是在Vista和更高版本上有一个不同的界面。使用IFileDialog和IFileDialogCustomize。猜测:对话框本身不是必须可见吗?不猜测:组合
WS_CHILD
WS_CAPTION
没有任何意义,因为您没有创建MDI子窗口;您应该只使用
DS\u控件
而不是
WS\u标题
。还可以将
of n\u ENABLEHOOK
添加到标志中。请注意,在比XP更新的windows版本上,这种外观很难看。使用
charszfile[MAX_PATH]是的,它现在起作用了,我忘记了OFN_ENABLEHOOK标志。谢谢你们。你们注意到对话看起来有多奇怪吗?与其他程序的对话框进行比较。你不想要那个对话吗?
build:
    windres -i dialog.rc -o dialog.o
    gcc -c program.c -o program.o
    gcc -o program.exe dialog.o program.o -lcomdlg32 -lgdi32