许多程序都有这么一个功能,打开电脑上的一个指定文件然后交给该程序操作
打开文件界面:
在WIN32中实现:
(1)声明OPENFILENAME结构体
static OPENFILENAME openfilename;
(2)过滤文件,效果如下:
static TCHAR szFilter[] = { TEXT("Bitmap Files (*.BMP)\0*.bmp\0")
TEXT("All Files (*.*)\0*.*\0")
};
定义一个TCHAR型数组,每个元素为要打开的类型
static TCHAR szFileName[MAX_PATH], szTitle[MAX_PATH]; //文件名和标题
(3)定义OPENFILENAME结构体:
case WM_CREATE:
{
memset(&openfilename, 0, sizeof(openfilename)); //清空内存
openfilename.lStructSize = sizeof(openfilename);
openfilename.hwndOwner = hWnd; //窗体句柄
openfilename.lpstrFilter = szFilter; //文件过滤
openfilename.lpstrFile = szFileName; //文件名
openfilename.lpstrFileTitle = szTitle; //标题
openfilename.nMaxFile = MAX_PATH; //文件最大容量
openfilename.nMaxFileTitle = MAX_PATH; //标题长度
openfilename.lpstrDefExt = TEXT("bmp"); //默认打开文件
}break;
(4)菜单设置:
在资源视图的菜单中增加指定选项,并设置指令IDM_OPEN
(5)在resource.h头文件中定义指令
(6)在case_command中增加指定指令
switch (message)
{
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_OPEN: //新增的指令
break;
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
(7)打开文件:
case IDM_OPEN:
GetOpenFileName(&openfilename);
/*打开文件*/
break;