|  | 
 
| VC++在绑定  CEdit  控件时控制是否允许拖放文件或文件夹 为了在绑定  `CEdit`  控件时控制是否允许拖放文件或文件夹,你可以在类中添加一个成员变量来指示允许的类型,并在  `OnDropFiles`  方法中根据这个变量来处理拖放的内容。以下是改进后的示例代码:
 ### 改进后的示例代码
 #### 1. 添加成员变量
 在你的对话框类中,添加一个成员变量来指示是否允许文件或文件夹:
 
 复制代码class CYourDialog : public CDialogEx {
    // 其他成员...
public:
    enum DragDropType { AllowFiles, AllowFolders, AllowBoth };
    DragDropType m_dragDropType; // 拖放类型
    // 其他成员...
};
 #### 2. 在初始化时设置拖放类型
 在  `OnInitDialog`  方法中,你可以设置  `m_dragDropType`  的值:
 
 复制代码BOOL CYourDialog::OnInitDialog() {
    CDialogEx::OnInitDialog();
     // 启用编辑控件的拖放功能
    m_yourEditControl.DragAcceptFiles(TRUE);
     // 设置允许的拖放类型
    m_dragDropType = AllowBoth; // 允许文件和文件夹
     return TRUE;
}
 #### 3. 修改  `OnDropFiles`  方法
 在  `OnDropFiles`  方法中,根据  `m_dragDropType`  的值来决定是否处理文件或文件夹:
 
 复制代码void CYourDialog::OnDropFiles(HDROP hDropInfo) {
    // 获取拖放的文件数量
    UINT fileCount = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
     for (UINT i = 0; i < fileCount; i++) {
        char filePath[MAX_PATH];
        // 获取文件名
        DragQueryFile(hDropInfo, i, filePath, sizeof(filePath));
         // 检查它是目录还是文件
        DWORD attributes = GetFileAttributes(filePath);
        if (attributes != INVALID_FILE_ATTRIBUTES) {
            bool isDirectory = (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
             // 根据拖放类型来决定是否处理
            if ((m_dragDropType == AllowFiles && !isDirectory) || 
                (m_dragDropType == AllowFolders && isDirectory) || 
                (m_dragDropType == AllowBoth)) {
                 CString path(filePath);
                m_yourEditControl.SetWindowText(path); // 显示路径
            }
        }
    }
     // 清理
    DragFinish(hDropInfo);
}
 ### 总结
 通过这种方式,你可以在绑定控件时控制允许拖放的类型(文件、文件夹或两者)。在  `OnDropFiles`  方法中,根据设置的拖放类型来决定是否处理拖放的内容。这样可以更灵活地满足不同的需求。根据实际需要,你可以在程序的其他部分动态更改  `m_dragDropType`  的值,以便在运行时控制允许的拖放类型。
 
 
 | 
 |