visuall c++编程,怎样为按钮添加单击事件,使其能选择文件

单击按钮后能弹出选择文件对话框,然后选择一个文件确定后能返回这个文件的完整路径名不要mfc的内容,就是win32api编程大致讲解一下吧... 单击按钮后能弹出选择文件对话框,然后选择一个文件确定后能返回这个文件的完整路径名
不要mfc的内容,就是win32 api编程
大致讲解一下吧
展开
 我来答
zoomscence
2014-08-26 · 超过22用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:31.5万
展开全部

下面是我从网上找到的代码,我改了一下,经过测试可行

我看了一下 大致两个步骤

  1. 构建一个OPENFILENAME的数据结构

  2. 调用GetOpenFileName

给你加一下注释,不过我感觉都很明了


#include "stdafx.h"

#include "windows.h"


int _tmain(int argc, _TCHAR* argv[])

{

OPENFILENAME ofn;      // 公共对话框结构。

TCHAR szFile[MAX_PATH]; // 保存获取文件名称的缓冲区。

// 初始化选择文件对话框。

ZeroMemory(&ofn, sizeof(ofn));

ofn.lStructSize = sizeof(ofn);

ofn.hwndOwner = NULL;//父窗口

ofn.lpstrFile = szFile;//用户选择的路径

//

//

ofn.lpstrFile[0] = _T('\0');

ofn.nMaxFile = sizeof(szFile);

ofn.lpstrFilter = _T("Word File\0*.doc\0");//文件后缀过滤

ofn.nFilterIndex = 1;

ofn.lpstrFileTitle = NULL;

ofn.nMaxFileTitle = 0;

ofn.lpstrInitialDir = _T("Record\\");

ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// 显示打开选择文件对话框。

if ( GetOpenFileName(&ofn) )

{

////显示选择的文件。

MessageBox(NULL,szFile,L"File Selected",MB_OK);

//SetDlgItemText(hwnd,IDC_EDIT1,szFile);//写到IDC_EDIT1

}

return 0;

}

追问
你那szFile路径名是所选文件的文件夹路径还是包含文件名的路径?

还有szFile是 TCHAR*型的,如果我想把他转化成char*型呢,怎么转
追答
  1. 对是包含文件名的 如果想去掉,你可以用字符传截取函数去掉最后一个斜杠右边的字符

  2. TCHAR是自适应类型,在UNICODE下是WCHAR在多字符下就是char,根据你的描述推测你是在多字符下将TCHAR换成char即可

  3. 应该看一下文档啊,windows的东西那么多标记,不可能按个都解释的清楚啊

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
曹英毅048
2014-08-26 · 超过48用户采纳过TA的回答
知道答主
回答量:107
采纳率:100%
帮助的人:95.1万
展开全部
BOOL OpenFile(HWND hwnd) {
OPENFILENAME ofn;
static char szFile[256];
static char szFileTitle[256];
memset(&ofn,0,sizeof(ofn));
ofn.lStructSize=sizeof(ofn);
ofn.hwndOwner=hwnd;
//ofn.lpstrFilter="Picture File(*.bmp,*.jpg)\0*.bmp;*.jpg;\0\0";
ofn.lpstrFilter="File(*.ctg,*.txt,*.lst)\0*.ctg;*.txt;*.lst;\0\0";
ofn.nFilterIndex=1;
ofn.lpstrFile=szFile;
ofn.nMaxFile=sizeof(szFile);
ofn.lpstrFileTitle=szFileTitle;
ofn.nMaxFileTitle=sizeof(szFileTitle);
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER;
if(GetOpenFileName(&ofn))
{
string name = szFileTitle;
int i = 0;
int index = -1;
while(true) {
char c = szFileTitle[i];
if (c == '\0') {
break;
}
if (c == '.') {
index = i;
}
i++;
}
if (index != -1){
// 有.
string ext = name.substr(index + 1);
if (ext == "ctg") {
FunOne(hwnd, szFile);
} else {
FunTwo(hwnd, szFile);
}
} else {
// 文件名中没有.
}
} else {
// 点击了取消或者叉叉
MessageBox(hwnd,"You click Cancel!","test",MB_OK);
return FALSE;
}
}
追问
哥们,别光复制别人写的代码行不,给解释一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式