|
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` 的值,以便在运行时控制允许的拖放类型。
|
|