构建 CD 目录数据库






3.50/5 (6投票s)
2003年10月6日
2分钟阅读

43408

1713
一篇关于构建包含 CD 等目录的数据库的工具的文章。
引言
不久前,我想熟悉 Win32 API。因此,我需要构建一些能够让我使用各种控件和内置函数的东西。我决定编写一个程序来查看任何 HD 或 CD 的目录结构,我可以向其中添加自己的备注,并可以选择将这些信息保存到文件中。我还添加了一个搜索功能。由于我经常使用 CodeProject 上的信息来解决遇到的特定问题,所以与大家分享这个结果似乎是个好主意。
使用代码
我认为使用这个程序非常简单明了。有关详细信息,请参阅演示程序中包含的帮助文件。总结其功能如下:
- 从任何 CD 或 HD 创建目录树;
- 向树中的任何目录或文件添加自己的备注;
- 将结果保存到文件中;
- 在目录树或备注中搜索特定字符串;
- 打印树,包括备注。
我不想详细说明我构建的代码。我想这都是对 API 的直接使用。我更喜欢使用 Hernán di Pietro 在这些页面中描述的消息拆解宏。它允许你将大型回调函数分解成外观简洁的代码片段,例如:
BOOL CALLBACK NewDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { HANDLE_MSG (hwnd, WM_INITDIALOG, NewDlgProc_OnInitDialog); HANDLE_MSG (hwnd, WM_COMMAND, NewDlgProc_OnCommand); case WM_CLOSE: EndDialog(hwnd,0); break; default: return FALSE; } return TRUE; }
和
void NewDlgProc_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case ID_DIRNAME: { if(codeNotify == EN_UPDATE) { HWND hOkButton = GetDlgItem(hwnd, ID_POK); BOOL x = EnableWindow(hOkButton, TRUE); } } break; case ID_DRIVE: NewDlgProc_OnDrive(hwnd, id, hwndCtl, codeNotify); break; case ID_DIRLIST: NewDlgProc_OnDirlist(hwnd, id, hwndCtl, codeNotify); break; case ID_SELDRIVE: NewDlgProc_OnSeldrive(hwnd, id, hwndCtl, codeNotify); break; case ID_POPEN: NewDlgProc_OnOpen(hwnd, id, hwndCtl, codeNotify); break; case ID_POK: NewDlgProc_OnOk(hwnd, id, hwndCtl, codeNotify); break; case ID_PCANCEL: if (!DestroyWindow(hwnd)) MessageBox(NULL, "Window Destruction Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); break; } }
对于其他新手,我推荐 Brook Miles 的教程。我发现 lcc 编译器很有用。它具有不错的 Win32 支持,并包含各种模板。
关注点
我在 GetSaveFileName
函数中遇到一个奇怪的问题。除非我将 OPENFILENAME
结构中的 lpstrDefExt
成员设置为大写字符,否则该函数会失败。在此之前,它什么也不做,甚至不产生错误返回值。
历史
- 这是第一个版本,日期为 2003 年 10 月 2 日