⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browsedir.cpp

📁 一个简易的c++的编辑器
💻 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 + -