一. 如何实现打开功能
1. 控件如下:
2. 代码如下:【了解即可】
#include <commdlg.h> //头文件不能少
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK:
OPENFILENAME ofn;
char szFile[MAX_PATH]; //定义一个长度为 MAX_PATH 的 char 数组
ZeroMemory(&ofn,sizeof(ofn));
ofn.lStructSize = sizeof(ofn); //szFile 是一个字符数组,那么 szFile 这个名字就代表这个字符数组的首地址
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = TEXT('\0');
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0"); //文件类型过滤器
ofn.nFilterIndex = 1; //ofn.nFilterIndex = 2;默认选择第几个过滤器,是 1 开始的,不是 0. 这也是试验出来的。
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.hwndOwner = hwnd;
ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn)) //用户关闭对话框,GetOpenFileName 函数返回,返回值是 BOOL,等于TRUE 表示用户选择了文件,如果等于 FALSE 就表示用户选择了【取消】按钮
{
MessageBox(NULL,szFile,"",MB_OK);
}
break;
default:
break;
}
}
3. 运行结果:
二. 音乐播放器
1. 控件如下:
2. 代码如下:
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
#include <stdlib.h>
#include <stdio.h>
#include <commdlg.h>
#include <mmsystem.h>
#pragma comment(lib, "WINMM.LIB")
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK:
{
OPENFILENAME ofn;
char szFile[MAX_PATH]; //定义一个长度为 MAX_PATH 的 char 数组
ZeroMemory(&ofn,sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = TEXT('\0');
ofn.nMaxFile = sizeof(szFile); //szFile 是一个字符数组,那么 szFile 这个名字就代表这个字符数组的首地址
ofn.lpstrFilter = TEXT("ALL\0*.*\0mp3\0*.mp3\0"); //文件类型过滤器
ofn.nFilterIndex = 1; //ofn.nFilterIndex = 2;默认选择第几个过滤器,是 1 开始的,不是 0.这也是试验出来的。
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.hwndOwner = hwnd;
ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn)) //用户关闭对话框,GetOpenFileName 函数返回,返回值是 BOOL,等于TRUE 表示用户选择了文件,如果等于 FALSE 就表示用户选择了【取消】按钮
{
TCHAR shortPath[MAX_PATH];
GetShortPathName(szFile, shortPath, sizeof(shortPath));
TCHAR cmd[MAX_PATH+10];
wsprintf(cmd, "play %s", shortPath);
//MessageBox(hwnd, shortPath, shortPath, MB_OK);
mciSendString(cmd,"", 0, NULL);
}
}
break;
default:
break;
}
}
注意:
要正常运行程序需加头文件#pragma comment(lib, "winmm.lib")
3. 运行结果:
4. 可过滤文件
有点小问题就是:同时播放多个音乐,并不是选一首放一首
Mcisendstring 更多用法(暂停、继续、录音、播放进度控制)请参考
https://baike.baidu.com/item/mciSendString?fr=ala0_1
更多控件用法:
https://docs.microsoft.com/zh-cn/windows/win32/controls/individual-control-info?redirectedfrom=MSDN
音乐播放器成品:
http://pan-yz.chaoxing.com/share/info/908c992dbd2dfd59