用递归方法:
FindFirstFile()和FindNextFile就可搞定.
FindFirstFile()和FindNextFile就可搞定.
解决方案 »
- 求救,怎么用HDC完成双缓冲绘图。。。。
- windows进程异常退出,线程未退出
- IOCP问题:发送大小不等于接收大小
- GetScrollInfo
- 类的声明与类的定义是一个概念吗?
- 结束WAR3.EXE进程!!
- java 中如何实现像jsp中的程序级的变量
- 急:怎样改变静态框(Static Box)中字体的大小
- 有谁知道用 SendMessage 或 PostMessage 发送键盘消息!
- OrgBrush=GetClassWord(hWnd,GCW_hbrBackground);怎么会错,又是提示 'GCW_hbrBackground' : undeclared identifier
- 有没有没睡的?
- 我也想问一下:如何去掉CWebBrowser的滚动条?,用它显示GIF广告的时候,多讨厌啊!
class CAboutDlg : public CDialog
{
public:
static CString m_szRootDir;
CString GetDirectory(CWnd* pParent,LPCSTR lpszRoot,LPCSTR lpszTitle);
/// 省略 }CString CAboutDlg::m_szRootDir;
int CALLBACK BrowseCallbackFunc(HWND hWnd,UINT msg,LPARAM lParam,LPARAM pData)
{
TCHAR szBuffer[MAX_PATH];
switch(msg)
{
// 当对话框初始化时,改变到选中的一个目录处
case BFFM_INITIALIZED:
strcpy(szBuffer,CAboutDlg::m_szRootDir);
::SendMessage(hWnd,BFFM_SETSELECTION,TRUE,(LPARAM)szBuffer);
break;
// 如果选择了BIF_STATUSTEXT,则用户每次选择不同的文件夹都
// 可以在这里设置状态
case BFFM_SELCHANGED:
if(::SHGetPathFromIDList((LPITEMIDLIST)lParam,szBuffer))
::SendMessage(hWnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szBuffer);
break;
} return 0;
};CString CAboutDlg::GetDirectory(CWnd *pParent, LPCSTR lpszRoot, LPCSTR lpszTitle)
{
CString str;
BROWSEINFO bi;
bi.hwndOwner = pParent->m_hWnd; // 创建的对话框的所有者
bi.pidlRoot = 0; // 显示的根路径,为NULL 时显示桌面
bi.pszDisplayName = 0; // 被选中文件夹的显示名称
bi.lpszTitle = lpszTitle; // 对话框窗口标题
bi.lpfn = BrowseCallbackFunc; // 回调函数
bi.lParam = 0; bi.ulFlags = BIF_RETURNONLYFSDIRS // 只允许选中一个目录
| BIF_STATUSTEXT // 创建状态文本传递给回调函数
| BIF_BROWSEFORCOMPUTER // 只允许用户选中一个电脑
| BIF_BROWSEFORPRINTER // 只允许用户选中一个打印机
| BIF_BROWSEINCLUDEFILES// 显示可选取的文件
| BIF_DONTGOBELOWDOMAIN // 当用户浏览"全部网络"时,不允许进入任何域
| 0;
m_szRootDir = lpszRoot; // Save for callback routine LPITEMIDLIST pidl = ::SHBrowseForFolder(&bi); if(pidl)
{
LPTSTR szBuffer = str.GetBuffer(MAX_PATH);
::SHGetPathFromIDList(pidl,szBuffer);
::GlobalFree(pidl);
str.ReleaseBuffer();
} return str;}