gms 发表于 2020-11-9 18:11

C语言也能干大事part~7

本帖最后由 gms 于 2020-11-10 13:22 编辑

## 一. 如何实现打开功能

> **1. 控件如下:**



**2. 代码如下:【了解即可】**

```c
#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 的 char 数组

ZeroMemory(&ofn,sizeof(ofn));

ofn.lStructSize = sizeof(ofn); //szFile 是一个字符数组,那么 szFile 这个名字就代表这个字符数组的首地址

ofn.lpstrFile = szFile;

ofn.lpstrFile = 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. 代码如下:**

```c
#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 的 char 数组

   ZeroMemory(&ofn,sizeof(ofn));

   ofn.lStructSize = sizeof(ofn);

   ofn.lpstrFile = szFile;

   ofn.lpstrFile = 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;
    GetShortPathName(szFile, shortPath, sizeof(shortPath));
   
    TCHAR cmd;
    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

TXWD东方不败 发表于 2020-11-21 11:14

很好,不错,我也学c语言{:301_993:}

drophair 发表于 2020-11-9 19:24

可以用bits/stdc++.h代替吗   /滑稽

祈愿啊 发表于 2020-11-9 20:57

能弄个其他的语言的吗,比喻java?

茫茫狐 发表于 2020-11-9 21:23

不知为何,我用那下载的成品播放器,播放不了mp3文件,点了后就没了

Nests 发表于 2020-11-9 21:28

支持楼主!

lucifer52 发表于 2020-11-10 02:15

赞!代码量好大

whg118 发表于 2020-11-10 06:57

支持楼主,多放基础代码。

anandyuan 发表于 2020-11-10 07:55

支持楼主,小白非常感谢

雷欧库珀 发表于 2020-12-2 08:58

支持,建议大佬,每次在贴子最后附上之前的帖子链接
页: [1]
查看完整版本: C语言也能干大事part~7