📄 browsedir.cpp
字号:
#include "stdafx.h"
#include "BrowseDir.h"
LRESULT CALLBACK Browse_WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
CBrowseDir::struct_browsedir * lpDir;
lpDir=(CBrowseDir::struct_browsedir *)GetWindowLong(hWnd,GWL_USERDATA);
//窗口快要摧毁了,看看有没有选择"包含子文件夹"
if (uMsg==WM_DESTROY )
{
lpDir->bIncludeSubDir=SendDlgItemMessage(hWnd,1000,BM_GETCHECK,0,0);
}
return ::CallWindowProc(lpDir->proc,hWnd,uMsg,wParam,lParam);
}
int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
{
if (uMsg==BFFM_INITIALIZED)
{
CBrowseDir::struct_browsedir * lpDir;
lpDir=(CBrowseDir::struct_browsedir*)lpData;
//设置初始目录
if (lpDir->lpszInitDir)
SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)lpDir->lpszInitDir);
//是否 支持包含子目录
if (lpDir->bIncludeSubDir)
{
//创建一个Check按钮
CreateWindowEx(0,"button","包含子文件夹",
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
5,5,100,20,hwnd,(HMENU)1000,::GetModuleHandle(0),0);
//用默认的GUI字体
SendDlgItemMessage(hwnd,1000,WM_SETFONT ,
(WPARAM)GetStockObject(DEFAULT_GUI_FONT),TRUE );
SendDlgItemMessage(hwnd,1000,BM_SETCHECK,BST_CHECKED,0);
//由于默认的回调函数不能处理标准的消息,
//所以必须改变窗体的回调函数
lpDir->proc=(WNDPROC)SetWindowLong(hwnd,GWL_WNDPROC,(LONG)Browse_WndProc);
//OOP时代据说不兴用全局变量...
SetWindowLong(hwnd,GWL_USERDATA,(LONG)lpDir);
}
}
return TRUE;
}
int CBrowseDir::DoModal()
{
BROWSEINFO bi;
RtlZeroMemory(&bi,sizeof(BROWSEINFO));
bi.hwndOwner=m_dir.hOwnerWnd;
bi.ulFlags=m_dir.uFlag;
bi.pszDisplayName = m_dir.szDisplayName;
bi.lpszTitle=m_dir.lpszTitle;
if (m_dir.lpszInitDir || m_dir.bIncludeSubDir)
{
bi.lParam=(LPARAM)&m_dir;
bi.lpfn=BrowseCallbackProc;
}
//调用目录
ITEMIDLIST *pIDList = SHBrowseForFolder(&bi);
//确定选择的路径
if(pIDList)
{
SHGetPathFromIDList(pIDList, m_dir.szPath);
LPMALLOC pMalloc=NULL;
if (SUCCEEDED(SHGetMalloc(&pMalloc)))
{
pMalloc->Free(pIDList);
pMalloc->Release();
return IDOK;
}
}
return IDCANCEL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -