用CFileDialog对话框来选择文件目录, 如C:\windows
先需要实现如果在当前目录下没有要找的目录, 则自己新建一个目录。 如我想等到
C:\Windows\user. 而到C:\Windows下没发现user目录, 希望点一个新建按钮, 在windows下创建user目录。 看见别的软件是这种方式, 不知道怎么实现, 就是在默认的CFileDialog界面上多一个新建按钮, 是否是将CFileDialog的某个参数设置下, 新建按钮就出来了, 还是用的别的控件, 希望得到大家的指导

解决方案 »

  1.   

    那你就重载CFileDialog,自己加个按钮,实现你要的功能
      

  2.   

    MFC有一个目录选择对话框可以实现你的需求
    你可以查阅一下相关资料
    关键字就搜SHBrowseForFolder
      

  3.   

    如果CFileDialog本身有这个功能就好了, 只需设置一个参数即可, 记得在Net中已经有这种控件, MFC不知是否也提供这种功能。 
      

  4.   

    SHBrowseForFolder查了下,好像也是在.net里面才有的
      

  5.   

    其实,其实……在CFileDialogy中,你也可以直接点击右键,选择新建文件夹的·~~算不算是取巧了那
      

  6.   

    struct sockaddr_in pin;
    struct hostent *nlp_host;
    int sd; 
    char host_name[256];
    int port;
     
    //初始化主机名和端口。主机名可以是IP,也可以是可被解析的名称
    strcpy(host_name,"www.linux-wiki.cn");
    port=80;
     
    //解析域名,如果是IP则不用解析,如果出错,显示错误信息
    while ((nlp_host=gethostbyname(host_name))==0){
        printf("Resolve Error!\n");
    }
     
     
    //设置pin变量,包括协议、地址、端口等,此段可直接复制到自己的程序中
    bzero(&pin,sizeof(pin));
    pin.sin_family=AF_INET;                 //AF_INET表示使用IPv4
    pin.sin_addr.s_addr=htonl(INADDR_ANY);  
    pin.sin_addr.s_addr=((struct in_addr *)(nlp_host->h_addr))->s_addr;
    pin.sin_port=htons(port);
     
    //建立socket
    sd=socket(AF_INET,SOCK_STREAM,0);
     
    //建立连接
    while (connect(sd,(struct sockaddr*)&pin,sizeof(pin))==-1){
      printf("Connect Error!\n");
    }服务器端程序
    本段是C++代码。 int serverSocket;
    struct sockaddr_in serverAddr;
    struct sockaddr_in clientAddr;
     
    // 用port保存使用的端口
    int port=8000;
     
    // 建立Socket,并设置
    serverSocket = socket(AF_INET, SOCK_STREAM, 0);
     
    // 设置socket选项,这是可选的,可以避免服务器程序结束后无法快速重新运行
    int val=1;
    setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
     
    // 定义端口和监听的地址
    serverAddr.sin_family      = AF_INET;
    serverAddr.sin_port        = htons(port);
    serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    memset(&(serverAddr.sin_zero), 0, 8);
    int rc = bind(serverSocket, (struct sockaddr*) &serverAddr,
     sizeof(struct sockaddr));
    if (rc == -1) {
    printf("Bad bind\n");
    exit(1);
    }
     
    // 让serverSocket开始监听,客户队列长为5
    rc = listen(serverSocket, 5);
    if (rc == -1) {
    printf("Bad listen\n");
    exit(1);
    }
     
    // 等待客户连接
    int sock;
    int clientAddrSize = sizeof(struct sockaddr_in);
    sock = accept(serverSocket,
    (struct sockaddr*) &clientAddr,
    (socklen_t*) &clientAddrSize);
      

  7.   

    定制自己的CFileDialog对话框
    http://www.vckbase.com/document/viewdoc/?id=417
      

  8.   


    SHBrowseForFolder可以的
    我用的就是这个方法BROWSEINFO browseInfo;
    LPITEMIDLIST pItemID;memset(&browseInfo, 0, sizeof(BROWSEINFO));browseInfo.hwndOwner = m_hWnd;
    browseInfo.pidlRoot = NULL;
    browseInfo.lpszTitle = "设置加密文件保存路径";
    browseInfo.ulFlags = BIF_USENEWUI;//这个位置实现新建文件夹按钮
    browseInfo.lpfn = NULL;
    browseInfo.lParam = NULL;pItemID = SHBrowseForFolder(&browseInfo);
    if(pItemID)
    {
    char   szPath[MAX_PATH];
    if(SHGetPathFromIDList(pItemID, szPath))
    {
    ;//szPath中即为所选路径

    }
      

  9.   

    问题以解决, 非常感谢楼上的帮助, 同时想说明下,BIF_USENEWUI在VC6 里没有定义, 在VS2003才添加上去, 如在VC6上使用, 可以写成
    bi.ulFlags = BIF_EDITBOX|0x0040;
    这种形式, 直接去宏的值。