windows选择文件对话框

string GetExePath()            //获取exe本地路径

{

//获取应用程序目录

CHAR szapipath[_MAX_PATH];//(D:\Documents\Downloads\TEST.exe)

memset(szapipath, 0, _MAX_PATH);

GetModuleFileNameA(NULL, szapipath, _MAX_PATH);

//获取应用程序名称

char szPath[_MAX_PATH] = "";//(TEST.exe)

char* pbuf = NULL;

char* szLine = strtok_s(szapipath, "\\", &pbuf);

while (NULL != szLine)

{

std::string str = szLine;

if (str.find(".exe") == str.npos)

{

strcat_s(szPath, szLine);

strcat_s(szPath, "\\");

}

szLine = strtok_s(NULL, "\\", &pbuf);

}

return szPath;

}

string GetOpenFileNameZK(void* parent,

const string& caption,

const string& dir,

const string& filter,

string* selectedFilter)

{

OPENFILENAMEA ofn;

char szOpenFileNames[80 * MAX_PATH];

char szPath[MAX_PATH];

char szFileName[80 * MAX_PATH];

char* p;

int nLen = 0;

string strSelectFiles = "";

ZeroMemory(&ofn, sizeof(ofn));

ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT;

ofn.lStructSize = sizeof(ofn);

ofn.lpstrFile = szOpenFileNames;

ofn.nMaxFile = sizeof(szOpenFileNames);

ofn.lpstrFile[0] = 0;

ofn.lpstrFilter = "All Files(*.*)/0*.*/0";

if (GetOpenFileNameA(&ofn))

{

//把第一个文件名前的复制到szPath,即:

//如果只选了一个文件,就复制到最后一个'/'

//如果选了多个文件,就复制到第一个NULL字符

lstrcpynA(szPath, szOpenFileNames, ofn.nFileOffset);

//当只选了一个文件时,下面这个NULL字符是必需的.

//这里不区别对待选了一个和多个文件的情况

szPath[ofn.nFileOffset] = 0;

nLen = lstrlenA(szPath);

if (szPath[nLen - 1] != '//')  //如果选了多个文件,则必须加上'//'

{

lstrcatA(szPath, "//");

}

p = szOpenFileNames + ofn.nFileOffset; //把指针移到第一个文件

ZeroMemory(szFileName, sizeof(szFileName));

while (*p)

{

lstrcatA(szFileName, szPath);  //给文件名加上路径 

lstrcatA(szFileName, p);    //加上文件名 

lstrcatA(szFileName, "/n"); //换行 

p += lstrlenA(p) + 1;    //移至下一个文件

}

strSelectFiles = szFileName;

//MessageBoxA(NULL, szFileName, "MultiSelect", MB_OK);

}

SetCurrentDirectoryA(GetExePath().c_str());

return strSelectFiles;

}


注意粗体部分,这里在选择文件后,程序的默认路径就变成了选择的路径,以后所有的./路径全部变成了当前选择的位置,所以需要再次设置回exe的执行目录,今天在测试程序的时候发现./目录始终写不进去文件,才发现是这个原因导致的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,553评论 0 13
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,475评论 0 35
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,427评论 0 6
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,775评论 0 4
  • 1.哇塞超级棒,显化二个单课,好开心进账感500 2.太棒了,今天扫码送心心相印,进账感50 3.太棒了收到亲爱的...
    磁场爱生活阅读 236评论 0 0