返回列表 发帖

【教学视频】《C语言也能干大事》第二节:程序播放音乐

《C语言也能干大事》已经录制第二版,不推荐初学者学习这里的旧版,因此请到下面的地址( http://www.rupeng.com/forum/forum-52-1.html )学习第二版。

教学视频录像(在线非清晰版):


清晰版下载地址:


如鹏电骡(verycd)下载站:http://www.verycd.com/topics/2800166/

板书:
1、上节课作业点评:
海豚天使作业:写的非常好,99分。唯一的改进点就是“if else中的代码哪怕只有一行也要用大括号括起来”。
VansOS:一个可取之处是“TEXT()”的应用;把while……continue用的很好;符合了“if else中的代码哪怕只有一行也要用大括号括起来”的要求。100分。
3、怎么打开VC6VC7DevC++的工程?
C-Free4.0用【工具】→【工程转换】。
C-Free4.1的话,直接把工程文件拖进来就可以。
大家以后从网上下载了别的写的C语言程序,有可能用VC写的,所以要转换一下。下了VC的程序不用担心,C-Free是支持的。语言、IDE都是互通的,“一通百通”。
4、为什么代码自动提示不出来?怎么增加自动提示的数量?
【工具】→【编辑器选项】→【代码提示】。显示最大条数、输入几个字符后才激活。建议改成101
5、怎么修改新建文件的默认文件名为c
【工具】→【环境选项】、修改“新建文件类型”
6、每次都输入WinMain以及那些参数,很麻烦,有没有快速方式?
添加自己的“模板”。【工具】→【编辑器选项】→【代码模板】,点击【添加】按钮,为模板选一个名字,然后将代码模板粘贴到“代码”框中。
使用方式:在编辑器中点击鼠标右键,选择【模板】,然后选择创建的代码模板。
7、怎么生成exe程序。怎么把做好的exe程序发给别人?
主菜单【工具】→【定位到工程文件夹】跳转到工程的文件夹,也可以在我的电脑里直接进入工程文件夹。mingw2.95目录下生成的exe文件就是生成好的可执行文件,发给别人就可以。
8、播放声音文件
1)用途:游戏里播放音乐;自己动手给女友做音乐贺卡(图片、滚动的字母、温馨的音乐)
2)可以使用PlaySound()函数播放声音文件,该函数原型位于#include <mmsystem.h>, 因此要使用PlaySound,首先需要添加对这个头文件的引用。
提示:mm就是MultiMedia的简写,多媒体
3)函数原型为: BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
返回值表示是否播放成功。
参数pszSound是要播放声音的文件名,只支持WAV等格式的文件;去mp3.baidu.com用“wav”为关键词可以搜到很多wav音乐,也可以用工具将其他格式的转换为wav格式的。
参数hmod是应用程序的实例句柄,一般传递NULL就可以;
参数fdwSound是标志的组合掩码,可选值有SND_FILENAMESND_ASYNCSND_SYNC等。SND_FILENAME表示pszSound参数指定的是文件名(pszSound还可以指定资源、内存音乐、系统音乐等等);SND_ASYNC:用异步方式播放声音,PlaySound函数在开始播放后立即返回;SND_SYNC:同步播放声音,在播放完后PlaySound函数才返回;SND_LOOP一遍遍的重复播放声音,必须与SND_ASYNC标志一块使用。
4)使用举例:
PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 启动.wav"),NULL,SND_FILENAME|SND_SYNC);
注意的问题:文件名中的反斜线要用“\\”,因为C语言中“\”默认是转义符,如果要表示“\”则需要使用“\\”,对这点不明白的请回去翻一下C语言的书;对中文字符串要使用TEXT宏。
5)为啥构建不通过?
#include <mmsystem.h>只是保证编译通过,还要设定link
解决方案:工程上点击右键,选“工程设置”,连接,添加“winmm”库。
解决此问题时参考的文章:http://hi.baidu.com/big_foot/blog/item/4822fcd11a7f7cd6562c84e7.html。它虽然描述的是VC中解决此问题的方式,但是记住“一通百通”这个道理,C-Free中添加Link库的方式和VC非常相似,只是操作步骤不同而已。

附录:VC中添加Link库的方式:
project->setting->Link 下的 Object/library modules 里加入winmm.lib即可”,他这里用的是英文版,中文版应该是主菜单的【工程】→【设置】→【连接】,将“winmm.lib”加入到“对象/库模块”中。
6)接上面的问题:关于link
    一个程序由源代码变成exe文件有两步:编译Compile;连接Link。编译是把c文件编译成.o.obj文件,而连接则是把这些.o.obj.lib等文件连接到一起成为exe文件。这点不清楚的请回去查看C语言的教材。
那什么是*.lib文件呢?大家以前用TC开发程序的时候用的都是C语言内置的函数,所以不存在使用非内置函数的情况。但是在开发大程序的时候要大量用到非内置的函数,比如PlaySoundMessageBox等等。在使用这些函数的时候需要使用两部分,一部分是*.h头文件,它定义了函数的参数和返回值,另一部分是*.lib文件,是用来进行程序链接用的。C程序的构建分为编译(Compile)和连接(Link)两个过程Compile是把源代码编译成*.obj文件,每个源码文件都对应一个*.obj文件,而连接则是把这些*.obj文件以及使用到的非内置函数的*.lib文件连接成一个*.exe文件。所以无论是忘了include *.h文件,还是丢了*.lib文件,都会构建出错。从上面的报错信息可以看出来是Compile成功,但是Link失败。一定要记得C程序编译的这两个过程,面试、笔试的时候常考。
7)同步播放音乐
PlaySound("C:\\WINDOWS\\Media\\Windows XP 关机.wav",NULL,SND_FILENAME|SND_SYNC);
8)体会同步播放和异步播放的差异:

PlaySound("C:\\WINDOWS\\Media\\Windows XP
关机.wav",NULL,SND_FILENAME|SND_SYNC);

MessageBox(NULL,"
同步播放完毕","信息",MB_OK);

PlaySound("C:\\WINDOWS\\Media\\Windows XP
关机.wav",NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,"
异步播放立即返回","信息",MB_OK);
         同步模式:音乐播放过程中函数不返回,播放完成才返回
         异步播放在做游戏等需要播放时间较长的音乐时使用,因为程序不会在音乐播放过程中有假死的情况。
有没有同学注意到第二个对话框如果快速关闭的话音乐会中途停止?这是因为程序退出音乐就中断播放了。用户关了游戏,音乐也不能继续播放,应该停止,所以很合理
9)我可以做一个小程序,别人在我小程序运行的时候一直听播放的音乐,用异步方式可以保证音乐在后台播放。可以只能播放一遍,能不能音乐来回来去的不断播放呢?答案是使用SND_LOOP标志。
Loop:循环
PlaySound("C:\\WINDOWS\\Media\\Windows XP 关机.wav",
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
10)如果我做一个小游戏,那么希望向上边那样不断播放,可以到达一个关卡的时候希望停止原来的音乐怎么办?

PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP
启动.wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);


PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP
关机.wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);

只能同时播放一段音乐,启动新的、旧的就被停了
11)如果只是想停止目前的播放而不播放新音乐呢?
         只要给PlaySound的第一参数传递NULL就可以停止目前的播放了。

PlaySound("C:\\WINDOWS\\Media\\Windows XP
关机.wav",
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);

MessageBox(NULL,"
点确定终止音乐","信息",MB_OK);

PlaySound(NULL,NULL,SND_FILENAME);


MessageBox(NULL,"
音乐被终止","信息",MB_OK);
12)关于PlaySound函数更多的介绍见:http://zhidao.baidu.com/question/41366091.html
9、关于API
1)什么叫API(应用程序接口Application Interface的简称)?什么叫Win32 APIAPI就是操作系统提供的一堆库函数,没啥稀奇的。printfscanfC语言内置的函数,其他的非内置的库函数都叫API
2)我想找实现某个功能的API怎么办?以“关闭显示器”为例讲解自学过程。
3)怎么我查看MessageBox函数其实是MessageBoxWMessageBoxA两个函数的宏定义?Win32API中还有大量这种风格的函数。W结尾的是把字符当成Unicode处理的,A结尾的是把字符当成ASCII处理的。使用时不要直接调用W结尾的或者A结尾的。编译器会在编译时确定调用哪个。
4Win32API是语言无关的,这点是非常重要的。Win32API是操作系统提供的库函数,可以在C语言中调用,也可以在C++中调用,还可以在C#JavaDelphiPython、汇编等各种语言中调用,因此学会了我们这里的C语言Windows程序开发以后只要熟悉一下其他语言的语法就可以很快的用其他语言开发Windows程序,VCC#Delphi等语言中的程序界面、网络操作、文件操作等功能都是对Win32API的简单包装而已。学了咱们如鹏网的《C语言也能干大事》以后就掌握了编程开发的“内功心法”,达到了一切语言都是纸老虎大侠状态,就可以蔑视那些问“VC还是学C#?”的菜鸟你怎能不心动?!
10、课后作业:改进上节课那个恶搞程序,在问不同问题的时候播放不同的音乐。同学提交作业的方式就是把代码以回帖的方式回复本帖。





#include <windows.h>
#include<mmsystem.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)
{
PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 电话拨出声.wav"),NULL,SND_FILENAME |SND_ASYNC | SND_LOOP);
int i=MessageBox(NULL,TEXT("你是好人吗?"),TEXT("询问") ,MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2);
if(i==IDYES)
{
  PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 错误.wav"),NULL,SND_FILENAME |SND_ASYNC | SND_LOOP);       
  MessageBox(NULL,TEXT("你看起来就不像好人,点击【确定】开始格式化c盘!"),TEXT("生气") ,MB_OK | MB_ICONHAND);
}
else
{
PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 菜单命令.wav"),NULL,SND_FILENAME |SND_ASYNC | SND_LOOP);
MessageBox(NULL,TEXT("尝试把你变成好人失败,是否重试?"),TEXT("询问") ,MB_RETRYCANCEL | MB_ICONQUESTION );        
}
return 0 ;
}
1

评分人数

TOP

#include <windows.h>
#include <mmsystem.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,PTSTR szCmdLine,int iCmdShow)
{
int res1 = MessageBox(NULL,TEXT("你是好人吗?"),TEXT("咨询"),MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2);
if(res1 == IDYES)
{
  int res2 = MessageBox(NULL,TEXT("你真的确定你是好人吗?"),TEXT("信息确认"),MB_OKCANCEL|MB_ICONWARNING);
  if(res2 == IDOK)
  {
   do
   {
    PlaySound("C:\\WINDOWS\\Media\\ringout.wav",NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
    MessageBox(NULL,TEXT("你好大胆子,赶骗老子!你是dada滴坏人!\n惩罚你。。。嘿嘿"),TEXT("叫你骗人"),MB_OK|MB_ICONSTOP);
   }while(1);
  }
  else
  {
   PlaySound(TEXT("C:\\WINDOWS\\Media\\chord.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
   MessageBox(NULL,TEXT("回头是岸!你能承认自己是坏人实属不易!\n给你听个声音"),TEXT("还不错"),MB_OK|MB_ICONWARNING);   
  }
}
else
{
  int res3 = MessageBox(NULL,TEXT("尝试变成好人。。。。。。\n \t操作失败!"),TEXT("信息"),MB_ABORTRETRYIGNORE|MB_ICONWARNING);
  PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 信息栏.wav"),NULL,SND_FILENAME|SND_ASYNC);
  switch(res3)
  {
   case IDABORT:
    PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 关机.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
    MessageBox(NULL,TEXT("你没救了。。。。。\n下辈子再做好人吧!"), TEXT("悲哀"),MB_OK);   
    break;
   case IDRETRY:
       PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 启动.wav"),NULL,SND_FILENAME|SND_SYNC);
       PlaySound(TEXT("C:\\WINDOWS\\Media\\tada.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
    MessageBox(NULL,TEXT("你很有上进心。。。。。。。。\n \t变成好人了!"),TEXT("奇迹"),MB_OK);
    break;
   case IDIGNORE:
    PlaySound(TEXT("C:\\WINDOWS\\Media\\ringin.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
    MessageBox(NULL,TEXT("你是大家群殴的对象!群里的潜水专家!\n我决定用铃声唤醒你的“良知”。。。。"),TEXT("气愤"),MB_OK|MB_ICONSTOP);
    MessageBox(NULL,TEXT("醒了吧!!!"),TEXT("HELLO"),MB_OK);
    break;
  }
}
return 0;
}


这些声音文件都是我精挑细选的,大家好好听听吧!挺符合语境的!

TOP

怎么一发上去这格式就有点乱了。。。。

TOP

呵呵,很有艺术细胞,:)
咱们用的这个论坛系统对贴程序代码中的缩进支持不是太好。

TOP

今天重温来下教程,编写个弹出光驱程序,在自己电脑上运行没问题,但是我把.exe文件发给好友,他们说运行不了.
都是笔记本,系统也都为xp.
请问问题出在哪?会和平台有关吗?
代码如下:
#include <windows.h>
#include <mmsystem.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
int i=MessageBox(NULL,TEXT("是否弹出光驱"),TEXT("确认"),MB_YESNO|MB_ICONQUESTION);
if(i==IDYES)
{
mciSendString("set cdaudio door open",NULL,0,0);   
}
return 0;
}

弹出光驱.rar (1.35 KB)

TOP

我这可以弹出,可能跟光驱也有关系,老大当时上课的时候也试过一个函数,说是光驱也没打开,可是课后我写了程序试了试,我的光驱却是可以打开的!具体什么原因还真不知道!

TOP

确实像kider说的,这个和光驱有关,有的光驱(特别是很多笔记本电脑的光驱)是不响应这个指令的。

TOP

老师这个指令弹出光驱的mciSendString("set cdaudio door open",NULL,0,NULL)
那么打开刻录机又是怎么样的呢?

TOP

刻录机不就是带刻录功能的光驱吗?有什么区别吗?如果你用这个指令不能打开的话说明你的光驱不支持这个指令。

TOP

恩 明白 3Q

TOP

打开了还要能自动关闭啊,呵,帮大家找来了。




#include <windows.h>


int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,int nFunsterStil)

{
 mciSendString("set cdaudio door open",NULL,0,0);                                             //弹出
 MessageBox(NULL,"光驱已弹出,按确定关闭光驱。","光驱",MB_OK);
 mciSendString("Set cdAudio door closed wait",NULL,0,NULL);                              //关闭
 return 0;
}

TOP

大哥,我用的是DEVC++5  怎么弄不了那个winmm.上面的提示是
\Program Files\DEV-CPP\Makefile.win C:\Program Files\DEV-CPP\C winmm: No such file or directory.
C:\Program Files\DEV-CPP\Makefile.win [Build Error]  No rule to make target `winmm'.  Stop.
请高手支招!

TOP

你怎么配的?截个图

TOP

#include <windows.h>
#include <mmsystem.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{int b,a;
a=MessageBox(NULL,TEXT("1+1的答案是2吗?"),TEXT("请回答"),MB_YESNO|MB_ICONQUESTION);
  if (a==IDYES)
    {
     PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\正确.wav",NULL,SND_FILENAME|SND_ASYNC);
     MessageBox(NULL,TEXT("你真聪明"),TEXT("o(∩_∩)o..."),MB_OK);
     }
  else
    {PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\错误.wav",NULL,SND_FILENAME|SND_ASYNC);
      b = MessageBox(NULL,TEXT("答错啦!!你是猪头!这都会错还不是猪头?!选是猪头!!"),TEXT("o(∩_∩)o..."),MB_YESNO|MB_ICONQUESTION);
   while(1)
   { if (b==IDYES)
     { PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\正确.wav",NULL,SND_FILENAME|SND_ASYNC);
  b= MessageBox(NULL,TEXT("还挺实在!"),TEXT("o(∩_∩)o..."),MB_YESNO|MB_ICONQUESTION);
        {while (1)
    if (b==IDYES)
         { PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\正确.wav",NULL,SND_FILENAME|SND_ASYNC);
     b= MessageBox(NULL,TEXT("真乖!"),TEXT("o(∩_∩)o..."),MB_OK|MB_ICONQUESTION);
     break ;}
        else
       {PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\错误.wav",NULL,SND_FILENAME|SND_ASYNC);
   b= MessageBox(NULL,TEXT("你不实在?,快选是,这才乖"),TEXT("o(∩_∩)o..."),MB_YESNO|MB_ICONQUESTION);
    }
  }
   break;
     }
    else
      {PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\错误.wav",NULL,SND_FILENAME|SND_ASYNC);
   b= MessageBox(NULL,TEXT("不老实,不是猪头是什么,快选是"),TEXT("o(∩_∩)o..."),MB_YESNO|MB_ICONQUESTION);
   }
}
}
return 0 ;
}

TOP

#include <windows.h>
#include <mmsystem.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{int b,a;
a=MessageBox(NULL,TEXT("1+1的答案是2吗?"),TEXT("请回答"),MB_YESNO|MB_ICONQUESTION);
  if (a==IDYES)
    {
     PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\正确.wav",NULL,SND_FILENAME|SND_ASYNC);
     MessageBox(NULL,TEXT("你真聪明"),TEXT("o(∩_∩)o..."),MB_OK);
     }
  else
    {PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\错误.wav",NULL,SND_FILENAME|SND_ASYNC);
      b = MessageBox(NULL,TEXT("答错啦!!你是猪头!这都会错还不是猪头?!选是猪头!!"),TEXT("o(∩_∩)o..."),MB_YESNO|MB_ICONQUESTION);
   while(1)
   { if (b==IDYES)
     { PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\正确.wav",NULL,SND_FILENAME|SND_ASYNC);
  b= MessageBox(NULL,TEXT("还挺实在!"),TEXT("o(∩_∩)o..."),MB_YESNO|MB_ICONQUESTION);
        {while (1)
    if (b==IDYES)
         { PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\正确.wav",NULL,SND_FILENAME|SND_ASYNC);
     b= MessageBox(NULL,TEXT("真乖!"),TEXT("o(∩_∩)o..."),MB_OK|MB_ICONQUESTION);
     break ;}
        else
       {PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\错误.wav",NULL,SND_FILENAME|SND_ASYNC);
   b= MessageBox(NULL,TEXT("你不实在?,快选是,这才乖"),TEXT("o(∩_∩)o..."),MB_YESNO|MB_ICONQUESTION);
    }
  }
   break;
     }
    else
      {PlaySound("C:\\Documents and Settings\\Administrator\\桌面\\错误.wav",NULL,SND_FILENAME|SND_ASYNC);
   b= MessageBox(NULL,TEXT("不老实,不是猪头是什么,快选是"),TEXT("o(∩_∩)o..."),MB_YESNO|MB_ICONQUESTION);
   }
}
}
return 0 ;
}

TOP

#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{  int i,k;
loop:i=MessageBox(NULL,"你是好人吗?","提问",MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2);
if(i==IDYES)
{MessageBox(NULL,"看你就不是好人,点确定,格式化C盘","说谎",MB_ICONHAND);
    }
else
{k=MessageBox(NULL,"尝试把你变成好人失败,是否重试?","机会",MB_RETRYCANCEL);
if(k==IDRETRY)
{goto loop;}
}
}
请老师点评下!

TOP

#include<windows.h>
#include<mmsystem.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE preInstance,
                   PSTR comandLind, int icwdShow)
{
while(1)
{
PlaySound(TEXT("D:\\音乐[url=file://\\wav\\]\\wav\\[/url]伍佰-浪人情歌.wav"), NULL, SND_FILENAME|SND_ASYNC|SND_LOOP);
int r = MessageBox(NULL, TEXT("你是好人吗?"), TEXT("询问"), MB_YESNO|MB_ICONQUESTION);
  
if( r == IDYES)
{
     PlaySound(TEXT("D:\\音乐[url=file://\\wav\\dj]\\wav\\dj[/url]-蜡笔小新.WAV"), NULL, SND_FILENAME|SND_ASYNC|SND_LOOP);
  int i = MessageBox(NULL, TEXT("你看你就不是好人"), TEXT("回答"), MB_OK|MB_ICONHAND);
  if(i == IDOK)
  {
     PlaySound(TEXT("D:\\音乐[url=file://\\wav\\bryan.wav]\\wav\\bryan.wav[/url]"), NULL, SND_FILENAME|SND_ASYNC|SND_LOOP);
        MessageBox(NULL, TEXT("开始格式化C盘" ),TEXT("行为!"), MB_OK);
        break;
  }
  
}
else
{
  PlaySound(TEXT("D:\\音乐[url=file://\\wav\\guns.wav]\\wav\\guns.wav[/url]"), NULL, SND_FILENAME|SND_ASYNC|SND_LOOP );
  int  k = MessageBox(NULL, TEXT("尝试把你变成好人,是否重试?"), TEXT("询问"), MB_RETRYCANCEL);
  if(k == IDRETRY)
  {
         continue;
  }
  else
  {
          break;
  }
}
}
return 0;
}

TOP

感觉这个C:\WINDOWS\Media里的音乐都比较短,怎么用百度上找到的那些音乐哈?

TOP

啊哈,有没有真的格式化C盘的代码呀???
未来的世界:方向比努力重要,能力比知识重要,健康比成绩重要,生活比文凭重要,情商比智商重要!

TOP

这个函数局限性太多
楼主能不能介绍些其他能播放各种
格式音乐的API函数
这样能够更好地编写一个自己的播放器

TOP

认真学习

#include<windows.h>
#include <mmsystem.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
while(1)
{
int i=MessageBox(NULL,TEXT("你是好人吗"),TEXT("标题"),MB_YESNO | MB_ICONQUESTION| MB_DEFBUTTON2);
   if (i==IDYES)
   {
    int qi=MessageBox(NULL,TEXT("你确定是好人吗"),TEXT("标题"),MB_YESNO | MB_ICONQUESTION| MB_DEFBUTTON2);
      if(qi==IDYES)
      {
   int j= MessageBox(NULL,TEXT("我怎么看你不像好人呢!"),TEXT("标题"),MB_YESNO | MB_ICONQUESTION| MB_DEFBUTTON2);
      if(j==IDYES)
   {
     MessageBox(NULL,TEXT("我浮你了不许回家陪我玩!"),TEXT("标题"),MB_YESNO | MB_ICONQUESTION| MB_DEFBUTTON2);
   
   }
     }
   }
  else
{
     MessageBox(NULL,TEXT("不是就不是回家"),TEXT("标题"),MB_YESNO | MB_ICONQUESTION| MB_DEFBUTTON2);
    PlaySound(TEXT("C:\\WINDOWS\\Media\\chord.wav"),NULL,SND_FILENAME|SND_SYNC);
    break;
}
}
return 0;
}
//做个忠实的学习者,回贴,新来的大家都跟上啊

TOP

关于winmm的问题

老师的版书说

为啥构建不通过?
#include <mmsystem.h>只是保证编译通过,还要设定link
解决方案:工程上点击右键,选工程设置,连接,添加winmm库。


我想问的是,
为什么是添加winmm?
winmm里记录的是什么?
这个winmm是“C-Free 4\mingw32\Lib”里的winmm.def吗?


谢谢老师!

TOP

原帖由 keeponshoot 于 2009-3-8 12:50 发表
这个函数局限性太多
楼主能不能介绍些其他能播放各种
格式音乐的API函数
这样能够更好地编写一个自己的播放器


这个播放器的例子只是提起大家学习的兴趣,要编写出实际能用的播放器需要非常复杂的知识,包括ActiveX、DirectX等,比较复杂,不是一两句能说清楚的。

TOP

原帖由 makesue 于 2009-3-20 00:11 发表
关于winmm的问题

老师的版书说

为啥构建不通过?
#include 只是保证编译通过,还要设定link。
解决方案:工程上点击右键,选“工程设置”,连接,添加“winmm”库。


我想问的是,
为什么是添加win ...


参考这篇文章:http://www.rupeng.com/forum/thread-696-1-1.html

TOP

看了后有不少收获,支持如鹏

TOP

#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
void IfY(void);
void IfN(void);
void IfC(void);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 启动.wav"),NULL,SND_FILENAME|SND_ASYNC);
int r=MessageBox(NULL,TEXT("你是好人吗?"),TEXT("请问"),MB_YESNOCANCEL|MB_DEFBUTTON2|MB_ICONQUESTION);
switch(r)
{
  case IDYES: IfY(); break;
  case IDNO: IfN(); break;
  case IDCANCEL: IfC(); break;
}
return 0 ;
}

void IfY (void)

{
int r=MessageBox(NULL,TEXT("你个骗子,\n一看就知道你不是好人!哼!"),TEXT("骗人"),MB_YESNO|MB_ICONINFORMATION);
if(r==IDYES)
{
  MessageBox(NULL,TEXT("果然是骗子!\n去死吧!"),TEXT("很好"),MB_OK|MB_ICONHAND);
        mciSendString("set   cdaudio   door   open",NULL,0,0);//弹出光驱程序/
}
else
{
  MessageBox(NULL,TEXT("我最讨厌骗子了,\n你还敢骗我!\n去死!"),TEXT(""),MB_OK|MB_ICONHAND);
  mciSendString("set   cdaudio   door   open",NULL,0,0);//弹出光驱程序/
}
}
void IfN (void)
{
int r=MessageBox(NULL,TEXT("既然不是,\n那想变成好人吗?"),TEXT("老实"),MB_YESNO|MB_ICONQUESTION);
if(r==IDYES)
{
  MessageBox(NULL,TEXT("准备开始变好人啦!"),TEXT("你好"),MB_OK|MB_ICONINFORMATION);
  MessageBox(NULL,TEXT("不好意思,\n你变好人失败!\n看来你坏事做多了,\n应受惩罚!"),TEXT(""),MB_OK|MB_ICONHAND);
        mciSendString("set   cdaudio   door   open",NULL,0,0);//弹出光驱程序//
}
else
{
  MessageBox(NULL,TEXT("既然不想变好,\n那就马上去死!"),TEXT(""),MB_OK|MB_ICONHAND);
  mciSendString("set   cdaudio   door   open",NULL,0,0);//弹出光驱程序//
}
}
void IfC (void)
{
MessageBox(NULL,TEXT("竟敢藐视老子,\n我叫你马上就去死!"),TEXT("去死"),MB_OK|MB_ICONHAND);
  mciSendString("set   cdaudio   door   open",NULL,0,0);//弹出光驱程序/
}

我的迟到的第二次作业终于交上来啦!!!

TOP

在如鹏的指导带领下,我第一次开始写代码的!!!支持如鹏!感谢如鹏!感谢各位工作者和朋友们!!!

TOP

为什么我加载什么音乐都只是同一种声音呢

不知道什么原因,一只是那一种声音,就是点对话框上的按钮的声音,一直是那一个


#include <Windows.h>
#include <mmsystem.h>
int WINAPI WinMain(          HINSTANCE hInstance,
       HINSTANCE hPrevInstance,
       LPSTR lpCmdLine,
       int nCmdShow
       )
{
PlaySound(L"C\\windows\\Media\\jt175.wav",NULL,SND_ASYNC|SND_FILENAME|SND_LOOP);
int a = MessageBox(NULL,L"欢迎来到魔法世界",L"hello",MB_OK);
if (a == IDOK)
{
  int c = 0;
  PlaySound(L"C\\windows\\Media\\Windows XP 硬件故障.wav",NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
  int b = MessageBox(NULL,L"点击确定进入天堂,点击取消进入地狱",L"",MB_OKCANCEL);
  if (b == IDOK)
  {
   PlaySound(L"C\\windows\\Media\\ringin.wav",NULL,SND_ASYNC|SND_LOOP);
      c = MessageBox(NULL,L"欢迎来到天堂",L"",MB_OK);  
  }
  else
  {
   PlaySound(L"C\\windows\\Media\\Windows XP 关机.wav",NULL,SND_ASYNC|SND_LOOP);
   c = MessageBox(NULL,L"欢迎来到地狱",L"",MB_OK);
  }
  while (1)
  {   
    int d = MessageBox(NULL,L"是不是想回人间了?",L"",MB_OKCANCEL);
    PlaySound(L"C\\windows\\Media\\Windows XP 关机.wav",NULL,SND_ASYNC|SND_LOOP);
    if (d == IDOK)
    {
     MessageBox(NULL,L"你想走,我就送你回去?!",L"",MB_ICONQUESTION|MB_OKCANCEL);
    }
    if (d == IDCANCEL)
    {
     MessageBox(NULL,L"好吧,你永远也回不去了!",L"",MB_ICONWARNING|MB_OKCANCEL);
    }
  }
}

return 0;
}

TOP

看视频写的

#include <windows.h>
#include <mmsystem.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    while(1)
    { PlaySound(TEXT("C:\\WINDOWS\\MEDIA\\Windows XP 电话拨入声.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
        if (MessageBox(NULL,TEXT("你是好人吗?"),TEXT("问题~回答错误仅弹出光驱"),MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2) == IDYES)
        { PlaySound(TEXT("C:\\WINDOWS\\MEDIA\\Windows XP 信息栏.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
           if( MessageBox(NULL,TEXT("你看你就不像好人!点击【是】开始格式化C盘!"),TEXT("警告~害怕了吧!"),MB_YESNO | MB_ICONWARNING)==IDYES)
           {
            PlaySound(TEXT("C:\\WINDOWS\\MEDIA\\Windows XP 启动.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
     if (MessageBox(NULL,TEXT("逗你玩~~!格式化代码未执行!"),TEXT("娱乐一下"),MB_RETRYCANCEL | MB_ICONINFORMATION) == IDRETRY)
     {
                continue;
            }
            else
            { PlaySound(TEXT("C:\\WINDOWS\\MEDIA\\ringout.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
                MessageBox(NULL,TEXT("GAME  OVER"),TEXT("小惩罚~╮(╯▽╰)╭"), MB_OK);
                mciSendString("set cdaudio door open",NULL,0,0);
                return 0;
            }
           
     }
     else
            {
                continue;
            }
      return 0;
        }
        else
        { PlaySound(TEXT("C:\\WINDOWS\\MEDIA\\Windows XP 气球.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
            if(MessageBox(NULL,TEXT("尝试把你变成好人失败,是否重试?"),TEXT("劝告"),MB_RETRYCANCEL | MB_ICONQUESTION) == IDRETRY)
            {
                continue;
            }
            else
            { PlaySound(TEXT("C:\\WINDOWS\\MEDIA\\ringout.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
                MessageBox(NULL,TEXT("GAME  OVER"),TEXT("小惩罚~╮(╯▽╰)╭"), MB_OK);
                mciSendString("set cdaudio door open",NULL,0,0);
                return 0;
            }
        }
    }
    return 0;
}

TOP

返回列表