研发流程:
定义问题(清晰定义问题的范围,边界,约束)->提出假设(基于数据和认知,提出解决问题的假设(头脑风暴))->方案设计(针对每个假设,设计验证方案,编制执行计划)->分析评估(对验证方案的结果进行分析,评估方案有效性)->总结复盘(检视目标差距,分析优势与不足,总结方法论(复盘方法论))
浏览目录使用:
#include <shlobj.h>
#include <windows.h>
#include <stdio.h>
using namespace std;
string chooseFile(void) {
//用户选择的路径,可以是TCHAR szBuffer[MAX_PATH] = {0};然后再使用TCHAR 转char字符串,此处可以直接使用char数组类型
char dir[MAX_PATH];
BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));
ITEMIDLIST *ppidl;
//设置根目录
SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &ppidl);
//常用有CSIDL_DESKTOP(桌面)CSIDL_PROGRAMS(开始菜单)CSIDL_MYMUSIC(我的音乐)CSIDL_DRIVES(盘符)
bi.hwndOwner = NULL; //父窗口句柄,通常通过AfxGetMainWnd()->GetSafeHwnd()函数获取安全的句柄。
bi.pidlRoot = ppidl; //文件夹的根目录,此处为桌面CSIDL_DESKTOP;
// pidlRoot:显示的文件目录对话框的根(Root),一般设置为NULL
bi.pszDisplayName = dir; //保存被选取的文件夹路径的缓冲区
bi.lpszTitle = NULL; //显示位于对话框左上部的标题。
bi.ulFlags = BIF_BROWSEINCLUDEFILES | BIF_EDITBOX ;//指定对话框的外观和功能的标志
// bi.ulFlags= BIF_NEWDIALOGSTYLE;
//获取程序路径
string defaultPath = "";
if ("" != beforeChooseFilePath) {
defaultPath = beforeChooseFilePath;
} else {
char buffer[MAX_PATH];
GetModuleFileName( NULL, buffer, MAX_PATH);
defaultPath = buffer;
if (defaultPath.find("\\") != string::npos) {
int lastIndex = defaultPath.find_last_of("\\");
defaultPath = defaultPath.substr(0, lastIndex);
}
}
//回调函数,设置默认打开文件夹路径
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LPARAM) (defaultPath.data());
LPITEMIDLIST idl = SHBrowseForFolder(&bi);
SHGetPathFromIDList(idl, dir);
if (idl && SHGetPathFromIDList(idl, dir)) {
string strDir = dir;
return strDir;
}
return "";
}
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM /*lParam*/,
LPARAM lpData) {
if (uMsg == BFFM_INITIALIZED) {
//(LPARAM)"D:\\remote"--指定初始目录 BFFM_SETSELECTION(指向目录)
SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM) TRUE, (LPARAM) lpData);
}
return 0;
}