visuall c++编程,怎样为按钮添加单击事件,使其能选择文件
不要mfc的内容,就是win32 api编程
大致讲解一下吧 展开
下面是我从网上找到的代码,我改了一下,经过测试可行
我看了一下 大致两个步骤
构建一个OPENFILENAME的数据结构
调用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*型呢,怎么转
对是包含文件名的 如果想去掉,你可以用字符传截取函数去掉最后一个斜杠右边的字符
TCHAR是自适应类型,在UNICODE下是WCHAR在多字符下就是char,根据你的描述推测你是在多字符下将TCHAR换成char即可
应该看一下文档啊,windows的东西那么多标记,不可能按个都解释的清楚啊
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;
}
}
哥们,别光复制别人写的代码行不,给解释一下