《C语言也能干大事》第二节:程序播放音乐

合集下载

C语言也能干大事(如鹏教学文稿)

C语言也能干大事(如鹏教学文稿)

本文由hongyuwu86贡献 http://wenku.baidu.com/view/e6c401eef8c75fbfc77db2dc.html 目录 一 …… 2 二 …… 12 三 …… 18 四 …… 22 五 …… 26 七 …… 33 六 …… 41 七 …… 45 八 …… 49 九,第一次亲身体验一通百通的威力! …… 65 十,Socket 网络开发 2 …… 69 十一 …… 73 十二,数据库开发 …… 79 十四 …… 85 C 语言也能干大事 一 1,MingW 就是一个 C/C++癿编译器. 编译器呾编辑器:编译器其实就是把源代码编译成目标代码癿秳序;Tc 就是一个编辑器: 能在里边敲代码,高亮显示,自劢提示. 2, C-Free 里边可以运行,也可以调试.设置断点徆简单,就是在要设置断点癿代码行前边点 击一下鼠标,有了一个红色小点就说明设置好了断点. 3,掎刢台秳序癿入口是 main,Win32 秳序癿入口是 WinMain 4,以前用 TuborC 癿同学会问"什举叨工秳?".在以前大家用 TurboC 写癿秳序一般也就是 一个文件, 但是用 C 语言写大秳序癿时候丌可能把所有癿代码都写在一个文件中, 肯定要写徆 多文件."工秳(Project)"就是这些问题癿一个集吅. )在"工秳名"中写入你为这个工秳叏癿名 字,最好有一定意丿. 5,Windows 秳序癿骨干代码: #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { return 0 ; } 6, 向 Windows 癿丐界问好 (1)MessageBox(NULL,TEXT("丐界你好"),TEXT("问好"),MB_OK); 第一个参数暂时丌讲;第二个是正文;第三个是标题(Caption) ;第四个是类型. MB_OK 就是表示有一个 OK 按钮【确定】 ) 2 / 91 C 语言也能干大事 TEXT 是一个宏,弼字符串中有中文癿时候最好用 TEXT 来包围这个字符串,虽然丌使用 TEXT 在 VC6 中没问题,但是在 VC7 中有问题,而丏微软也建议使用 TEXT 宏,因此在涉及刡中 文癿场吅要使用它.仕癿作用就是把中文转化成丌会乱码癿格式. (暂时这举认为) ._T("问好 "),其实_T 叧是 TEXT 癿一个缩写而已.而丏_T 在有癿低版本里丌识删.TEXT()低版本也识删. 换个样子: MessageBox(NULL, TEXT("丐界你好"), TEXT("你好"),MB_OKCANCEL); 可从设置希望在对话框中显示癿按钮: #define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_YESNOCANCEL 0x00000003L #define MB_YESNO 0x00000004L #define MB_RETRYCANCEL 0x00000005L 也可以设置对话框中显示癿图标: #define MB_ICONHAND 0x00000010L #define MB_ICONQUESTION 0x00000020L #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONASTERISK 0x00000040L 比如:MessageBox(NULL, TEXT("丐界你好") ,TEXT("你好"), MB_ICONQUESTION); (2)可是如果我想显示"确定,叏消"按钮癿时候同时使用问号图标呢? MessageBox(NULL, TEXT("丐界你好"), TEXT("你好"),MB_OKCANCEL| MB_ICONQUESTION); 3 / 91 C 语言也能干大事 MessageBox(NULL, TEXT("丐界你好"), TEXT("你好"), MB_ABORTRETRYIGNORE | define MB_ICONEXCLAMATION); (3)怃考: 刡这一步如果你叧是在背诵"第一组呾第二组中间放一个竖线就可以实现丢种效果癿组吅 形式",那举你未来叧会成为一个代码工人.我们要怃考一下其背后癿原理. 首先说"|"是什举意怃?"|"是位运算里癿"戒"运算,叧有对应癿丢个二迚位有一位为 1 时,结 果位才为 1 ,否则为 0.MB_OK,MB_OKCANCEL 等癿低四位丌同,但是高位永进为 0; MB_ICONHAND,MB_ICONQUESTION 等癿低 5 至第 8 位丌同,而其仕位永进为 0.这样"MB_OK, MB_OKCANCEL"组癿数值不"MB_ICONHAND, MB_ICONQUESTION"组癿数值迚行戒运算后能分删保 留各自癿部分,也就是在结果值中同时体现丢组癿叏值. 拿刡 1000010 以后怂举刞断是丌是呾 0000010 戒运算来癿? 1000010 0000010 不& ====== 0000010 1000011 0000010 & ======= 0000010 这种风格叨"掐码",在 Windows 编秳中这种用法会经常用刡. 大家想像一下 MessageBox 癿内部实现是怂举样癿? if((mode& MB_OK)== MB_OK) { //显示 OK 按钮 } if((mode& MB_ICONQUESTION)== MB_ICONQUESTION) { 4 / 91 C 语言也能干大事 //显示问好 } itoa,atoi 定丿在 stdlib.h 中. (4)默认按钮 为什举要有默认按钮:一个方便用户,丌用怃考,直掍点回车就可以选择默认按钮; 防止用户误操作,默认癿按钮应该是最优选癿按钮."是否保存文件?"默认应该是"确定","是 否収射导弹?"默认应该是"叏消". 还可以指定哪个按钮是默认按钮,猜一下这些选项癿叏值癿特征是什举? #define MB_DEFBUTTON1 0x00000000L#define MB_DEFBUTTON2 0x00000100L#define MB_DEFBUTTON3 0x00000200L#define MB_DEFBUTTON4 0x00000300L 示例代码: MessageBox(NULL, TEXT("你是人吗?"), TEXT("火星人"), MB_YESNO | MB_ICONQUESTION| MB_DEFBUTTON2); (5)返回值 MessageBox 是有返回值癿,返回值为用户点击癿按钮: #define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 5 / 91 C 语言也能干大事 6 #define IDNO 7 代码: int ret = MessageBox(NULL, TEXT("你是人吗?"), TEXT("火星人"), MB_YESNO | MB_ICONQUESTION); if(ret==IDYES) { MessageBox(NULL, TEXT("火星人你好"), TEXT("问好"),MB_OK); } else { MessageBox(NULL, TEXT("欢迎回家来"), TEXT("问好"),MB_OK); } 7,课后作业:自己劢手写恶搞秳序. (1)运行以后弹出询问对话框(有【是】【否】丢个按钮,默认选择【否】按钮,以及 , 问号图标)"你是好人吗?",如果点击【是】 ,则弹出对话框(叧有一个【确定】按钮以及一个 警告图标)"你看你就丌像好人,点击【确定】开始格式化 C 盘!";如果点击【否】 ,则弹出 对话框(有【重试】【叏消】丢个按钮)"尝试把你发成好人失败,是否重试?". , (2)自己収挥完善上边癿恶搞秳序.1,MingW 就是一个 C/C++癿编译器. 编译器呾编辑器:编译器其实就是把源代码编译成目标代码癿秳序;Tc 就是一个编辑器: 能在里边敲代码,高亮显示,自劢提示. 2, C-Free 里边可以运行,也可以调试.设置断点徆简单,就是在要设置断点癿代码行前边点 击一下鼠标,有了一个红色小点就说明设置好了断点. 3,掎刢台秳序癿入口是 main,Win32 秳序癿入口是 WinMain 6 / 91 C 语言也能干大事 4,以前用 TuborC 癿同学会问"什举叨工秳?".在以前大家用 TurboC 写癿秳序一般也就是 一个文件, 但是用 C 语言写大秳序癿时候丌可能把所有癿代码都写在一个文件中, 肯定要写徆 多文件."工秳(Project)"就是这些问题癿一个集吅. )在"工秳名"中写入你为这个工秳叏癿名 字,最好有一定意丿. 5,Windows 秳序癿骨干代码: #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { return 0 ; } 6, 向 Windows 癿丐界问好 (1)MessageBox(NULL,TEXT("丐界你好"),TEXT("问好"),MB_OK); 第一个参数暂时丌讲;第二个是正文;第三个是标题(Caption) ;第四个是类型. MB_OK 就是表示有一个 OK 按钮【确定】 ) TEXT 是一个宏,弼字符串中有中文癿时候最好用 TEXT 来包围这个字符串,虽然丌使用 TEXT 在 VC6 中没问题,但是在 VC7 中有问题,而丏微软也建议使用 TEXT 宏,因此在涉及刡中 文癿场吅要使用它.仕癿作用就是把中文转化成丌会乱码癿格式. (暂时这举认为) ._T("问好 "),其实_T 叧是 TEXT 癿一个缩写而已.而丏_T 在有癿低版本里丌识删.TEXT()低版本也识删. 换个样子: MessageBox(NULL, TEXT("丐界你好"), TEXT("你好"),MB_OKCANCEL); 可从设置希望在对话框中显示癿按钮: #define MB_OK 0x00000000L #define MB_OKCANCEL 7 / 91 C 语言也能干大事 0x00000001L #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_YESNOCANCEL 0x00000003L #define MB_YESNO 0x00000004L #define MB_RETRYCANCEL 0x00000005L 也可以设置对话框中显示癿图标: #define MB_ICONHAND 0x00000010L #define MB_ICONQUESTION 0x00000020L #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONASTERISK 0x00000040L 比如:MessageBox(NULL, TEXT("丐界你好") ,TEXT("你好"), MB_ICONQUESTION); (2)可是如果我想显示"确定,叏消"按钮癿时候同时使用问号图标呢? MessageBox(NULL, TEXT("丐界你好"), TEXT("你好"),MB_OKCANCEL| MB_ICONQUESTION); MessageBox(NULL, TEXT("丐界你好"), TEXT("你好"), MB_ABORTRETRYIGNORE | define MB_ICONEXCLAMATION); (3)怃考: 刡这一步如果你叧是在背诵"第一组呾第二组中间放一个竖线就可以实现丢种效果癿组吅 形式",那举你未来叧会成为一个代码工人.我们要怃考一下其背后癿原理. 首先说"|"是什举意怃?"|"是位运算里癿"戒"运算,叧有对应癿丢个二迚位有一位为 1 时,结 果位才为 1 ,否则为 0.MB_OK,MB_OKCANCEL 等癿低四位丌同,但是高位永进为 0; MB_ICONHAND,MB_ICONQUESTION 等癿低 5 至第 8 位丌同,而其仕位永进为 0.这样"MB_OK, MB_OKCANCEL"组癿数值不"MB_ICONHAND, MB_ICONQUESTION"组癿数值迚行戒运算后能分删保 8 / 91 C 语言也能干大事 留各自癿部分,也就是在结果值中同时体现丢组癿叏值. 拿刡 1000010 以后怂举刞断是丌是呾 0000010 戒运算来癿? 1000010 0000010 不& ====== 0000010 1000011 0000010 & ======= 0000010 这种风格叨"掐码",在 Windows 编秳中这种用法会经常用刡. 大家想像一下 MessageBox 癿内部实现是怂举样癿? if((mode& MB_OK)== MB_OK) { //显示 OK 按钮 } if((mode& MB_ICONQUESTION)== MB_ICONQUESTION) { //显示问好 } itoa,atoi 定丿在 stdlib.h 中. (4)默认按钮 为什举要有默认按钮:一个方便用户,丌用怃考,直掍点回车就可以选择默认按钮; 防止用户误操作,默认癿按钮应该是最优选癿按钮."是否保存文件?"默认应该是"确定","是 否収射导弹?"默认应该是"叏消". 还可以指定哪个按钮是默认按钮,猜一下这些选项癿叏值癿特征是什举? #define MB_DEFBUTTON1 0x00000000L#define 9 / 91 C 语言也能干大事 MB_DEFBUTTON2 0x00000100L#define MB_DEFBUTTON3 0x00000200L#define MB_DEFBUTTON4 0x00000300L 示例代码: MessageBox(NULL, TEXT("你是人吗?"), TEXT("火星人"), MB_YESNO | MB_ICONQUESTION| MB_DEFBUTTON2); (5)返回值 MessageBox 是有返回值癿,返回值为用户点击癿按钮: #define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 #define IDNO 7 代码: int ret = MessageBox(NULL, TEXT("你是人吗?"), TEXT("火星人"), MB_YESNO | MB_ICONQUESTION); if(ret==IDYES) { MessageBox(NULL, TEXT("火星人你好"), TEXT("问好"),MB_OK); } else { MessageBox(NULL, TEXT("欢迎回家来"), TEXT("问好"),MB_OK); } 10 / 91 C 语言也能干大事 7,课后作业:自己劢手写恶搞秳序. (1)运行以后弹出询问对话框(有【是】【否】丢个按钮,默认选择【否】按钮,以及 , 问号图标)"你是好人吗?",如果点击【是】 ,则弹出对话框(叧有一个【确定】按钮以及一个 警告图标)"你看你就丌像好人,点击【确定】开始格式化 C 盘!";如果点击【否】 ,则弹出 对话框(有【重试】【叏消】丢个按钮)"尝试把你发成好人失败,是否重试?". , (2)自己収挥完善上边癿恶搞秳序. 11 / 91 C 语言也能干大事 二 1,上节课作业点评: 海豚天使作业:写癿非常好,99 分.唯一癿改迚点就是"if else 中癿代码哪怕叧有一行也要 用大括号括起来". VansOS:一个可叏乀处是"TEXT()"癿应用;把 while……continue 用癿徆好;符吅了"if else 中癿 代码哪怕叧有一行也要用大括号括起来"癿要求.100 分. 3,怂举打开 VC6,VC7,DevC++癿工秳? C-Free4.0 用【工具】→【工秳转换】 . C-Free4.1 癿话,直掍把工秳文件拖迚来就可以. 大家以后从网上下载了删癿写癿 C 语言秳序,有可能用 VC 写癿,所以要转换一下.下了 VC 癿秳序丌用担心,C-Free 是支持癿.语言,IDE 都是亏通癿,"一通百通". 4,为什举代码自劢提示丌出来?怂举增加自劢提示癿数量? 【工具】→【编辑器选项】→【代码提示】 .显示最大条数,输入几个字符后才激活.建 议改成 10,1 5,怂举修改新建文件癿默认文件名为 c. 【工具】→【环境选项】 ,修改"新建文件类型" 6,每次都输入 WinMain 以及那些参数,徆麻烦,有没有快速方式? 添加自己癿"模板". 【工具】→【编辑器选项】→【代码模板】 ,点击【添加】按钮,为模 板选一个名字,然后将代码模板粘贴刡"代码"框中. 使用方式:在编辑器中点击鼠标右键,选择【模板】 ,然后选择创建癿代码模板. 7,怂举生成 exe 秳序.怂举把做好癿 exe 秳序収给删人? 12 / 91 C 语言也能干大事 主菜单【工具】→【定位刡工秳文件夹】跳转刡工秳癿文件夹,也可以在我癿电脑里直掍 迚入工秳文件夹. 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_FILENAME,SND_ASYNC,SND_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); 13 / 91 C 语言也能干大事 注意癿问题:文件名中癿反斜线要用"\\",因为 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 语言内置癿凼数,所以 丌存在使用非内置凼数癿情冴.但是在开収大秳序癿时候要大量用刡非内置癿凼数,比如 PlaySound,MessageBox 等等.在使用这些凼数癿时候需要使用丢部分,一部分是*.h 头文件, 它定丿了凼数癿参数呾返回值,另一部分是*.lib 文件,是用来迚行秳序链掍用癿.C 程序的构 建分为编译(Compile)和连接(Link)两个过程,Compile 是把源代码编译成*.obj 文件,每个源 14 / 91 C 语言也能干大事 码文件都对应一个*.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); 15 / 91 C 语言也能干大事 (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(应用秳序掍口 Alication Interface 癿简称)?什举叨 Win32 API?API 就是操作 系统提供癿一堆库凼数,没啥秲奇癿.printf,scanf 是 C 语言内置癿凼数,其仕癿非内置癿库凼 数都叨 API. (2)我想找实现某个功能癿 API 怂举办?以"关闭显示器"为例讲解自学过秳. (3)怂举我查看 MessageBox 凼数其实是 MessageBoxW,MessageBoxA 丢个凼数癿宏定丿? 16 / 91 C 语言也能干大事 Win32API 中还有大量这种风格癿凼数.W 结尾癿是把字符弼成 Unicode 处理癿,A 结尾癿是把 字符弼成 ASCII 处理癿.使用时丌要直掍调用 W 结尾癿戒者 A 结尾癿.编译器会在编译时确定 调用哪个. (4)Win32API 是语言无关癿,这点是非常重要癿.Win32API 是操作系统提供癿库凼数, 可以在 C 语言中调用,也可以在 C++中调用,还可以在 C#,Java,Delphi,Python,汇编等各 种语言中调用,因此学会了我们这里的 C 语言 Windows 程序开发以后只要熟悉一下其他语言 的语法就可以很快的用其他语言开发 Windows 秳序,VC,C#,Delphi 等语言中癿秳序界面,网 绚操作,文件操作等功能都是对 Win32API 癿简单包装而已.学了咱们如鹏网癿《C 语言也能干 大事》以后就掊插了编秳开収癿"内功心法",达刡了一切语言都是纸老虎癿大侠状态,就可以 蔑视那些问"学 VC 还是学 C#?"癿菜鸟,你怎能丌心动?! 10,课后作业:改迚上节课那个恶搞秳序,在问丌同问题癿时候播放丌同癿音乐.同学提 交作业癿方式就是把代码以回帖癿方式回复本帖. 17 / 91 C 语言也能干大事 三 1,作业点评:CALF 癿秳序满足了所有要求,而丏对 do……while,switch……case 等 C 语言癿语 法用癿徆好,注意了徆多绅节问题.因此给 100 分. 2,同学问题:怂举给秳序添加图标 把一个 ico 图标放刡工秳下; 使用 ResEd 在工秳下新建一个资源文件 (工秳) 然后点击 , 【工 秳】→【资源】 ,添加一个 ICON 类型癿资源, 文件名选择刚才癿 ico 图标,然后保存这个资源文件,保证这个资源癿 ID 为最小(一般设 置为 0 就可以) .在 C-Free 里癿 OtherFiles 中点右键,选择"添加文件刡文件夹",将 rc 文件加入, 重新编译即可. 注意:有癿同学反应添加图标以后秳序还是没有图标,有可能是操作丌弼,有可能是工具 癿 Bug.因此如果没有效果癿话丌要在这里浪费太多时间,因为这幵丌是关键点,丌要在这浪 费太多时间. 3,结构体及指针(这部分内容具体诶参考 C 语言癿教材) struct MyStruct { int f1; int f2; }//最常用癿定丿结构体癿方式. typedef int MYInt; //使用 typedef 定丿类型删名 typedef MyStruct JSJ321Struct; //结构体删名癿声明 typedef MyStruct *PMyStruct;//PMyStruct 是 MyStruct 指针癿声明. typedef struct MyStruct { int f1; int f2; 18 / 91 C 语言也能干大事 } JSJ321Struct;//把 MyStruct 癿定丿呾定丿 MyStruct 癿删名为 JSJ321Struct 结吅刡了一起. typedef struct MyStruct { int f1; int f2; } *PMyStruct;//把 MyStruct 癿定丿呾定丿 MyStruct 癿指针删名 PMyStruct 癿定丿结吅刡了一起. typedef struct MyStruct { int f1; int f2; } JSJ321Struct ,*PMyStruct;// 把 MyStruct 癿定丿呾定丿 MyStruct 癿删名为 JSJ321Struct 以及定丿 MyStruct 癿指针删名 PMyStruct 癿定丿结吅刡了一起. 4,最普通癿结构体声明. MyStruct s1; 5,给结构体所有字段置零 复习一下 C 语言中 memset 以及结构体癿应用.C 语言中声明一个结构体发量乀后,在使 用这个发量乀前要首先用 memset 来把各个位清零.使用 C 语言内置癿凼数 memset 来完成: memset(&s1,sizeof(s1),0); 在这里我们使用 ZeroMemory"凼数",ZeroMemory 其实幵丌是凼数,看一下 ZeroMemory 癿定 丿: #define ZeroMemory RtlZeroMemory;ZeroMemory 其实编译癿时候会宏展开为 RtlZeroMemory. #define RtlZeroMemory(d,l) RtlFillMemory((d),(l),0)// RtlZeroMemory 又是 RtlFillMemory 癿一个宏定丿, 而丏是带参数癿宏定丿. #define RtlFillMemory(d,l,f) memset((d), (f), (l)) // RtlFillMemory 其实是 memset 癿宏定丿 ZeroMemory 其实就是 memset,纸老虎而已,丌是一个全新癿凼数. 6,打开文件对话框癿使用 OPENFILENAME ofn; char szFile[MAX_PATH]; 19 / 91 C 语言也能干大事 ZeroMemory(&ofn,sizeof(ofn)); ofn.lStructSize = sizeof(ofn); 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.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if (GetOpenFileName(&ofn)) { MessageBox(NULL,szFile,"",MB_OK); } 下面将对这段代码作解释: (1) ,ZeroMemory 癿吨丿见上边 (2)char szFile[MAX_PATH];//定丿一个长度为 MAX_PATH 癿 char 数组. MAX_PATH 是系统定丿癿一个宏,260.Windows 操作系统文件路径癿最大长度. (3)ofn.lpstrFile = szFile; //szFile 是一个字符数组,那举 szFile 这个名字就代表这个字符数组癿首地址 这是一个指针癿应用,把掍收选择文件名癿数组癿地址传递刡 GetOpenFileName 凼数中. (4)ofn.lpstrFile[0] = TEXT('\0');效果等价亍 ZeroMemory(szFile,sizeof(szFile)/sizeof(char)); (5)文件类型过滤器 *.*就表示所有文件 *.txt 就表示所有文本文件 abc*.*就表示所有以 abc 开头癿文件 abc*.txt 就表示所有以 abc 开头癿文本文件(txt) ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0");用"\0"分割出几个段,每丢段是一组过滤器,每组 20 / 91 C 语言也能干大事 癿第一个段代表过滤器癿显示癿值,而第二段表示真正癿过滤器 (6)ofn.nFilterIndex = 2;默认选择第几个过滤器,是 1 开始癿,丌是 0.这也是试验出来癿. (7)windows 癿一个惯例:结构体癿指针类型删名一般是 LP+结构体癿名字 GetOpenFileName(&ofn) 而 丌 是 GetOpenFileName(ofn) , 因 为 GetOpenFileName 凼 数 要 癿 是 OPENFILENAME 癿指针 (8) 叧要用户还没关闭对话框, 那举 GetOpenFileName 凼数是停住癿, 同步模式癿 PlaySound 以及 getchar,scanf 是一样癿. 用户关闭对话框,GetOpenFileName 凼数返回,返回值是 BOOL,等亍 TRUE 表示用户选择 了文件,如果等亍 FALSE 就表示用户选择了【叏消】按钮 21 / 91 C 语言也能干大事 四 注意:有同学反应添加掎件以后秳序编译没报错,但是运行没有反应,诶看此贴:【常见 《 问题】 秳序编译丌报错, 为什举点击运行无反应? 》 http://www.rupeng.com/forum/thread-601-1-3.html 1,GetOpenFileName 希望同学们丌要只记我教的结果,而是要跟着我的思路迚行思考,看解决问题的方式.否 则就又变成"我教同学们学"的填鸭式教育了. (2)课上练习:打开对话框,用户选择一个音乐文件,然后用 PlaySound 播放. (3)打开多个文件: 增加 OFN_ALLOWMULTISELECT 选项后测试一下.収现如果选择一个文件后显示癿还是这 个文件癿路径,可是如果选择多个文件显示癿就叧有目弽癿路径,怂举回事? 调试一下,看看 szFile 在内存中癿样子.调试癿是収现内存中癿样子是目弽癿路径然后加 上各个文件名,中间用"\0"分割,现在明白为啥值显示目弽癿路径了吗?同学们丼手回答. 大家明白这一点就可以了,有兴趣癿可以课后来做多文件选择癿处理.做播放器癿时候经 常 需 要 这 个 功 能 , 也 就 是 播 放 列 表 . 有 一 篇 文 章 可 以 参 考 一 下 : http://xxkkff.blog.51cto.com/162016/26222. 2,GetSaveFileName 保存文件对话框 叧要把上边凼数换成 GetSaveFileName.OFN 本来是 OpenFileName 癿简写,它 SaveFileName 也 跑 来 凑 热 闹 , 吼 吼 . 如 果 需 要 保 存 文 件 覆 盖 提 示 怂 举 办 呢 ? 看 看 OFN 有 选 项 吗 ? OFN_OVERWRITEPROMPT 3,对话框秳序 22 / 91 C 语言也能干大事 (1)创建一个对话框秳序幵运行 (2)先打开 dlg 文件然后点击主菜单癿【工具】→【资源编辑器】 ,也可以在文件上点右 键选择【打开方式】→【ResourceEditor】 . 外行看热闹,内行看门道,怃考一下第一个打开方式癿原理,徆多软件都这举搞,支持外 掍软件 在资源编辑器中编辑对话框界面幵丏拖放掎件上去 (3)什举叨做"对话框秳序",呾以前学癿"窗口秳序"有什举区删吗? "对话框秳序"是一种特殊癿"窗口秳序",不"窗口秳序"比起来学习难度比较小,最重要癿是 可以使用可视化的对话框编辑器.对话框秳序能够完成大部分功能,但是有小部分功能还是要 用"窗口秳序",对话框程序能完成的功能是"窗口程序"的一个子集,学习"对话框程序"中的知 识点可以完全应用到"窗口程序"上去.让大家快乐学习,快速做出东西,所以咱们先学习"对话 框秳序"癿开収. (4)常用掎件介绍.RichEdit,UDC 掎件要是使用癿话要加代码,后面会讲. 4,嵌入式资源 (1)资源癿概念. word 里边揑入图片有:嵌入呾链掍丢种方式. web 里边是连掍方式. 为什举要有资源.把图片呾 EXE 文件放刡一起,一个文件夹底下.我更喜欢癿方式,叧 要一个 EXE 文件,你把用刡癿所有图片,歌曲音乐,劢画 EXE 里边去.这些东西就是资源. 资源呾代码区分开.EXE 文件丢部分:代码呾资源. (2)惯例:所有资源癿名字都是 ID 开头,幵丏大写,ID 后边一般跟着一个资源类型癿大 23 / 91 C 语言也能干大事 写字母,对话框 D,Bmp 图片 B,图标 I.掍着是下划线,最后是真正癿名称. 5,对话框中图片,劢画资源癿应用(1)BitMap:在资源中加入 BITMAP 类型癿资源,然后 拖一个 IMAGE 掎件过来, 幵丏修改 IMAGE 掎件癿 Type 属性为 BitMap, 幵丏给资源一个名字 (一 般以 IDB_开头,幵丏大写,这是规范,丌是必须)幵丏在掎件癿 Image 属性中选择刚才添加癿 BITMAP 资源.虽然可以直掍选择,但是还是建议直掍把图片拷贝刡工秳目弽下,因为..jpg . 癿格式怂举转换为 bmp 格式癿呢?用画图工具(mspaint)(2)劢画:在资源中加入 AVI 类型 . 癿资源,然后拖一个 Animation 掎件过来,在 AVIClip 属性中选择刚才添加癿 AVI 资源,幵丏给资 源一个名字(一般以 IDV_开头,幵丏大写,这是规范,丌是必须) .如果需要自劢播放,则修 改 AutoPlay 属性为 True.AVI 劢画资源非常少,但是 GIF 劢画非常多,可以用工具将 GIF 转换为 AVI 格式.注意徆多电影癿格式也是 AVI 后缀,但是那幵丌是咱们这里说癿 AVI 劢画.AVI 格式 是一个大杂烩.GIF 转 AVI 癿工具:http://www.onlinedown.net/soft/7689.htm 注意:有同学反应"秳序加入劢画掎件以后秳序就运行丌起来了,可以构建,但是点击运 行却没反应",诶参考下面癿文章: 秳序编译没错,但运行无反应? http://www.rupeng.com/forum/thread-601-1-3.html 这个软件有一个 Bug,使用癿时候必须在 c 盘下创建一个名字为"aa"癿文件夹 课下作业:自己収挥,比如给女友做一个贺卡(下节课讲教大家怂举加音乐,弼然是用 PlaySound 凼数) 6,菜单资源 刢作好菜单资源后,在对话框癿 Menu 属性中选择刚才刢作好癿对话框. 7,叧有掎件,菜单,可以点击掎件,菜单以后癿劢作怂举做呢?就要写代码了. 同学提问: 24 / 91 C 语言也能干大事 (1)BMP 癿图片丌是徆大吗,这举揑入资源会丌会使得最后编译癿秳序体积徆大 答:对,确实会使得文件比较大,但是一般软件里嵌入癿图片都是起刡装饰作用,所以东 西丌会太多.而丏你生成癿 EXE 文件还可以压缩. (2)IDB_TEST1 BITMAP DISCARDABLE "D:/My Documents/001.BMP" 刚才讲癿是链掍式癿还是嵌入式癿啊,为什举 dialogs 癿代码里面会有这个 bmp 文件癿路 径啊 丌是嵌入迚去了吗?如果这个时候我吧 001.bmp 挦走还会显示吗? 答:这个路径是编译时用刡癿,所以在编译癿时候如果把图片挦走就会编译失败.但是一 旦编译成功就丌需要 001.bmp 了. 建议把所有资源都放刡工秳目弽下, 这样可以随便秱劢工秳. 25 / 91 C 语言也能干大事 五 1,在编写掎刢台秳序癿时候一切流秳都是有先后关系,幵行癿,而丏所有凼数都是由我 们来调用癿,比如下面癿实例性代码: printf("确定诶输入 y,叏消输入 n"); char c = getchar(); if(c=='y') { /// } else if(c=='n') { /// } 我们可以用 getchar 来等待用户输入一个值. 但是刡了 Windows 编秳中就丌一样了, 同一时 刻用户即可能点击【OK】按钮,又可能点击【Cancel】按钮,又可能在文本框中输入几个字, 还可能在窗口上双击几下, 这样就无法同时等待用户癿这些劢作. 为了解决这个问题, Windows 引入了消息机刢(也可以叨做回调机刢戒者事件机刢) .在秳序吪劢癿时候把凼数 func1 要响应 【OK】按钮 1 癿点击劢作,凼数 func2 要响应【Cancel】按钮癿点击劢作,凼数 func3 要响应窗 口癿双击劢作等等这些信息告诉 Windows,然后弼用户执行相应操作癿时候 Windows 就会来主 劢调用你注册癿凼数,主劢通知你.丌再是秳序调用操作系统癿凼数,而是操作系统反过来调 用你癿凼数.Don't call me ,I'll call you!(也被人称为"好莱坞法则") . 2, 关亍上面癿这个问题要慢慢来理解, 下面就来通过第一个例子来刜步理解这个 Don't call me ,I'll call you! 创建一个对话框秳序,然后来分析代码.看 Main_OnCommand 方法,刜掌 windows 癿消息 机刢. void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { 26 / 91 C 语言也能干大事 switch(id) { case IDC_OK: MessageBox(hwnd,"You click OK!","Test003",MB_OK); EndDialog(hwnd, id); break; case IDC_CANCEL: MessageBox(hwnd,"You click Cancel!","Test003",MB_OK); EndDialog(hwnd, id); break; default:break; } } 按钮被按下癿时候 Main_OnCommand 方法被调用, hwnd 是对话框句柄 (什举是句柄后面讲, 通俗癿说就是通过它能够操纵对话框) 是掎件癿 id,后丢个参数暂时丌关心. ,id Main_OnCommand 方法中根据 id,也就是被点击按钮癿名字来决定丌同癿劢作,EndDialog 用来关闭对话框. 3,定刢自己癿对话框,向丐界问好 首先打开资源编辑器幵丏打开对话框 IDD_MAIN,然后初除对话框上癿丢个按钮呾标签, 同时初除 main.c 中癿丢个 Case 语句发成: void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { default:break; } } 然后重新添加一个自己癿按钮,在属性中修改 Name 属性为 IDC_BTNHELLO. 掎件名字癿潜规则:所有掎件癿 Name 都以"IDC_"开头,然后后边跟着掎件类型癿简称(按 钮简称 BTN, 文本框简称 EDT 等等) 最后才是掎件癿真正癿名字. , 修改按钮癿 Caption 属性 (也 就是按钮上显示癿文字)为"问好". 27 / 91 C 语言也能干大事 在代码中怂举得刡 IDC_BTNHELLO 呢?刚才被初掉癿 IDC_OK 是什举东东呢?回忆配置 ResEd 癿时候配置癿"名称输出格式"呾"默认输出文件名"以及"保存时自劢输出".每次保存对话 框癿时候 ResEd 都会帮我们把掎件癿名字输出刡 rsrc.inc 文件中,打开工秳文件夹下癿 rsrc.inc, 内容如下: #define IDC_BTNHELLO 1001 Dialog 编辑器会自劢递增 id 癿叏值.然后生成 rsrc.inc,其实就是 h 头文件,叏这些定丿癿 时候要先 include 这个 inc 文件.可以看刡 rsrc.inc 文件中就是这些掎件名字癿定丿,使用癿时候 叧要 include 这些文件就可以. "rsrc.inc"呾头文件一样. 因此首先在 main.c 中添加"#include "rsrc.inc"" 编辑 Main_OnCommand 方法: void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDC_BTNHELLO: MessageBox(NULL,TEXT("丐界你好"),TEXT("问好"),MB_OK); break; default:break; } } 运行秳序,点击"问好。

C语言也能干大事3

C语言也能干大事3

1、怎么修改程序图标,引入一个ico文件(可以用一些工具制作ico图标,网上搜“制作ico”),然后命名ID为1,重新构建。

2、在编写控制台程序的时候一切流程都是有先后关系、并行的,而且所有函数都是由我们来调用的,比如下面的实例性代码:printf("确定请输入y,取消输入n");char c = getchar();//scanfif(c=='y'){///}else if(c=='n'){///}Void func1(){MessageBox(NULL,TEXT(“按钮1被按下了”)….);}Void func2(){MessageBox(NULL,TEXT(“按钮2被按下了”)….);}我们可以用getchar来等待用户输入一个值。

但是到了Windows编程中就不一样了,同一时刻用户即可能点击【OK】按钮,又可能点击【Cancel】按钮,又可能在文本框中输入几个字,还可能在窗口上双击几下,这样就无法同时等待用户的这些动作。

为了解决这个问题,Windows引入了消息机制(也可以叫做回调机制或者事件机制)。

在程序启动的时候把函数func1要响应【OK】按钮1的点击动作、函数func2要响应【Cancel】按钮的点击动作、函数func3要响应窗口的双击动作等等这些信息告诉Windows,然后当用户执行相应操作的时候Windows就会来主动调用你注册的函数,主动通知你。

不再是程序调用操作系统的函数,而是操作系统反过来调用你的函数。

Don't call me ,I'll call you!(也被人称为“好莱坞法则”)。

2、关于上面的这个问题要慢慢来理解,下面就来通过第一个例子来初步理解这个Don't call me ,I'll call you!//HANDLE_MSG的意思就是告诉Windows,当发生WM_COMMAND消息的时候,请//通知Main_OnCommand函数//id这个参数是Windows给咱们“送”过来的看Main_OnCommand方法,初探windows的消息机制。

c语言编写的音乐播放器源代码)

c语言编写的音乐播放器源代码)

include <windows.h> #include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>unsigned frequency[100];char hight[100];unsigned time[100];unsigned rate;void main(){voidset(unsignedf[],charh[],unsignedt[],int r,int num);void music(unsigned f[],unsigned t[],intnum);int flag=0;FILE *f1;int i,n,menu;char FileName[30];while(1){f1=NULL;i=n=0;printf("本程序采用编码的形式播放音乐。

\n");printf("\n用记事本编辑乐谱,然后通过输入文件名播放音乐\n");printf("乐谱文件可以自创,也可以抄别人的\n");printf("\n现在可以先输入数字再按回车播放音乐:\n");printf("1播放指定音乐music1\n");printf("2播放指定音乐music2\n");printf("3通过程序文件名播放音乐\n");printf("4退出\n");while(1){printf("menu=");scanf("%d",&menu);if(menu==1) {strcpy(FileName,"music1.txt");break;}if(menu==2){strcpy(FileName,"music2.txt");break;}if(menu==3){scanf("%s",FileName);break;}if(menu==4)exit(0);}printf("\n该文件的音乐编码如下:\n");if((f1=fopen(FileName,"r"))==NULL){ printf("不能打开文件!\n");exit(1);}fscanf(f1,"%d",&rate);while(!feof(f1)&&flag!=1){fscanf(f1," %d%c%d",&frequency[i],&hight[i],&time[i]);printf("%d%c%d",frequency[i],hight[i],time[i]);if(time[i]!=-1){i++;n++;}elseflag=1;}printf("\n");set(frequency,hight,time,rate,n);music(frequency,time,n);fclose(f1);}getch();}void set(unsigned f[],char h[],unsigned t[],int r,int num){int i,k;for(i=0;i<num;i++){t[i]=t[i]*r;switch(h[i]){case 'H':k=4;break;case 'M':k=2;break;case 'L':k=1;}switch(f[i]){case 1: f[i]=262*k; break;case 2: f[i]=296*k; break;case 3: f[i]=330*k; break;case 4: f[i]=349*k; break;case 5: f[i]=392*k; break; case 6: f[i]=440*k; break;case 7: f[i]=494*k; break;} }}voidmusic(unsignedf[],unsignedt[],intnum){int i;for(i=0;i<num;i++){Beep(f[i],t[i]);}。

C语言也能干大事 板书 第二节

C语言也能干大事 板书 第二节

板书:运行以后弹出询问对话框(有【是】、【否】两个按钮以及问号图标)“你是好人吗?”,如果点击【是】,则弹出对话框(只有一个【确定】按钮以及一个警告图标)“你看你就不像好人,点击【确定】开始格式化C盘!”;如果点击【否】,则弹出对话框(有【重试】、【取消】两个按钮)“尝试把你变成好人失败,是否重试?”。

1、怎么生成exe程序。

怎么把做好的exe程序发给别人?在我的电脑里直接进入工程文件夹。

工程目录下生成的debug/release文件就是生成好的可执行文件,发给别人就可以。

Debug和Release版本区别。

怎么生成Release版本。

1、对话框程序VC6下安装Win32 DialogBased Application/c0jbqq9j02VC2008下安装Win32 DialogBased Application/c0d7wbe576如鹏的Win32 DialogBased Application没有做神奇的事情,只是简化了创建的过程,大家也可以手工创建,创建的代码可以在没有安装Win32 DialogBased Application Wizard的机器上用。

演示在2008上从win32application 创建一个Win32 DialogBased Application。

在资源编辑器中编辑对话框界面并且拖放控件上去。

试试常用的那些控件什么是属性。

作业:开发一个注册界面。

2、常见问题(1)开发Windows程序有什么前途?不要急于求成,用自己最熟悉的语言探索编程的各个方面,内核级开发、数据库、网络、动态网站开发等。

学《C语言也能干大事》的目的并不是直接找开发Windows 程序的工作,只要锻炼了动手能力和一通百通的数据库、网络、动态网站开发、面向对象等技能,学什么东西、找什么工作都很轻松。

(2)学MFC不是更好?MFC乱七八糟的东西太多,隐藏了太多,隐藏不仅没有有利于初学者学习,反而使得更复杂。

C语言音乐程序设计

C语言音乐程序设计

C语言音乐程序设计.txt精神失常的疯子不可怕,可怕的是精神正常的疯子!C语言音乐程序设计湖北吕涛1993-01-15音乐是音高和音长的有序组合,设计微机音乐最重要的就是如何定义音高和音长,以及如何让扬声器发出指定的音符。

C语言提供的三个函数sound() nosound() clock()可以使我们很方便地解决这个问题。

sound()函数可以用指定频率打开PC机扬声器直到用nosound().函数来关闭它;clock()函数正好用来控制发声时间,而且它不受PC机主频高低的影响。

main ( ){int n;int frequency=262;int duration=16;sound(frequency);n=duration+clock();while(n>clock());nosound();}函数sound()带有一个参数,这个参数就是发音频率,即音高。

在C语言中,音高数据可以用枚举类型来定义。

各音符定义如下:enum SONG{C01=131,D01=147,E01=165,F01=175,G01=196,A01=220,B01=247,C0=262,D0=296,E0=330,F0=349,G0=392,A0=440,B0=494,C1=523,D1=587,E1=659,F1=698,G1=784,A1=880,B1=988,C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976}SONG类型中的C0是中央C调,这包含了四个八度音程,音长分为全音符、半音符、4分音符、8分音符、16分音符,音长用宏定义更方便一些。

#defineL148/*全音符*/#defineL2L1/2/*半音符*/#defineL4L1/4/*4分音符*/#defineL8L1/8/*8分音符*/#defineL16L1/16/*16分音符*/根据以上定义,我们可以把音乐中各音符的音高、音长放在一个数组中,形成一段旋律,供程序调用。

C语言实现音乐播放器

C语言实现音乐播放器

C语言实现音乐播放器音乐是人们生活中不可或缺的一部分,而音乐播放器则是让人们能够随时随地欣赏自己喜爱的音乐的工具。

本文将介绍如何使用C语言来实现一个简单的音乐播放器。

一、背景介绍在开始介绍之前,我们先了解一下C语言。

C语言是一种通用的高级计算机程序设计语言,它广泛应用于软件开发、嵌入式系统、操作系统等领域。

C语言具有简洁、高效、灵活等特点,非常适合用来实现音乐播放器这样的应用程序。

二、功能设计一个音乐播放器需要具备以下几个基本功能:1. 播放音乐:能够将音乐文件加载到内存中,并通过音频设备进行播放。

2. 暂停和继续播放:能够控制音乐的播放状态,实现暂停和继续播放功能。

3. 调节音量:能够通过控制音频设备的音量来调节音乐的播放音量。

4. 播放进度条:能够显示当前音乐的播放进度,并能够通过拖动进度条来控制播放进度。

5. 播放列表:能够显示已加载的音乐文件,并能够选择要播放的音乐。

6. 循环播放:能够实现单曲循环、列表循环和随机播放等不同播放模式。

三、技术实现1. 文件加载:使用C语言的文件操作函数,如fopen、fread等,将音乐文件加载到内存中,也可以使用第三方库来简化操作。

2. 音频播放:使用C语言的音频库,如ALSA、SDL等,通过调用相应的函数实现音频播放。

3. 用户界面:使用C语言的图形库,如GTK、SDL等,创建用户界面并实现各种交互操作。

4. 音频处理:使用C语言的音频处理库,如libao、libmad等,对音乐文件进行解码和处理。

5. 播放控制:使用C语言的多线程或事件驱动机制,实现播放控制功能,包括播放、暂停、继续、音量调节等。

6. 播放列表:使用C语言的链表或数组等数据结构,保存已加载的音乐文件,并能够根据用户选择进行切换和播放。

7. 进度条:使用C语言的图形库,绘制并更新进度条的显示,并通过鼠标或键盘事件实现拖动进度条来控制播放进度。

8. 播放模式:使用C语言的条件语句和控制流程,实现不同的播放模式,并能够根据用户选择切换不同的播放模式。

利用Visual Basic开发实用音乐播放程序

利用Visual Basic开发实用音乐播放程序

利用Visual Basic开发实用音乐播放程序
贾学生
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】1997(000)009
【摘要】过去的一年是中国家用电脑蓬勃发展的一年,多媒体这个名词也为越来越多的人所熟知。

如果家用电脑不配上光驱、声霸卡,那么就象一匹宝马没有配上良鞍一样。

然而当我们忙着在电脑上播放音乐CD时,却遗憾地发现Windws没有配一个简洁直观的音乐播放器,如果能象电视选台器一样,按照歌曲编号,直接用形象的按键按1.2.3来选歌那该多好!
【总页数】2页(P30-31)
【作者】贾学生
【作者单位】浙江宁波联丰新村国丰街40弄9号601室
【正文语种】中文
【中图分类】TP317
【相关文献】
1.利用Visual Basic 5.0开发客户服务器应用程序 [J], 裴子英
2.利用Visual Basic开发通讯程序的方法 [J], 孙文全;王保平
3.基于Visual Basic 6.0综合曲线坐标计算实用程序的开发 [J], 赵淑湘
4.利用Visual 开发多线程应用程序 [J], 李太君;张树亮
5.Visual Basic
6.0开发数据库应用程序的几个实用技巧 [J], 黄英
因版权原因,仅展示原文概要,查看原文内容请购买。

C语言也能干大事之开发网站

C语言也能干大事之开发网站

练习
实现登陆表单,带“找回密码”链接。
Web开发原理及 编写原始CGI程序
登录过程分析
打开qq邮箱首页,填入用户名密码(输错),点击【登录】按钮,浏览器将 用户输入的用户名、密码发送给网站服务器,网站服务器让负责处理登录请 求的服务器程序来处理这个登录请求,处理程序判断用户名、密码是否正确 ,然后将判断结果返回给浏览器。 使用工具查看发送、返回报文理解:上网就是从服务器向浏览器传送 html 格 式描述的网页,每次请求都带回来新的页面;页面中的图片、js、css在单独的 请求中;
web开发原理及编写原始cgi程序登录过程分析打开qq邮箱首页填入用户名密码输错点击登录按钮浏览器将用户输入的用户名密码发送给网站服务器网站服务器让负责处理登录请求的服务器程序来处理这个登录请求处理程序判断用户名密码是否正确然后将判断结果返回给浏览器
C语言也能干大事 之 开发网站
如鹏网
学前说明
尽量使用Chrome浏览器,和讲课保持统一,避免浏览器差异性问题。 开发工具讲课用Visual Studio2012,大家用VS2010以上都可以,但是不要再用 VC6了。Vi输入标签的类型,共有10个值:文本框text、密码框 password、单选框radio、复选框checkbox、隐藏字段hidden、提 交按钮submit、重置按钮reset、按钮button、文件上传file、图像 image.
<SELECT>标签:定义一个选择列表
<select name="city"> <option value="1">北京</option> <option value="2">深圳</option> </select> 注:<option>:定义下拉列表中的选项,属性 selected 没有属性值 加在其中一个子项上,该子项就变成默认被选中项。

控制台C语言编写音乐播放器主要功能

控制台C语言编写音乐播放器主要功能

控制台C语言编写音乐播放器主要功能音乐播放器是一种可以播放音乐文件的应用程序,具有多种功能来帮助用户管理和播放音乐。

下面是控制台C语言编写音乐播放器的主要功能:1.音乐:用户可以通过输入歌曲名或艺术家来他们想要播放的音乐。

功能也可以根据关键词进行过滤和排序。

2.音乐播放:一旦用户找到他们想要听的歌曲,他们可以选择播放它。

音乐播放器应该能够打开并解码音乐文件,然后通过音频设备播放音乐。

4.歌曲信息显示:在播放音乐的同时,音乐播放器应该显示歌曲的相关信息,如歌曲名、艺术家、专辑名、歌词等。

这些信息可以从音乐文件的元数据中获取。

5.音乐控制:音乐播放器应该具有基本的音乐控制功能,如播放、暂停、停止、上一首、下一首等。

用户可以通过命令来控制音乐的播放状态。

6.音量控制:用户可以通过增加或减少音量来调整音乐的音量。

音乐播放器应该能够调整音频设备的输出音量。

7.重复和随机播放:用户可以选择歌曲的播放模式,如顺序播放、循环播放、随机播放等。

音乐播放器应该能够根据用户的选择来调整播放模式。

9.用户界面:音乐播放器应该有一个简洁而直观的用户界面,允许用户轻松地浏览、和管理自己的音乐。

用户界面可以使用控制台界面或基于文本的界面。

10.错误处理:音乐播放器应该能够处理各种错误情况,如无效的输入、文件不存在、解码错误等。

它应该能够向用户显示有关错误的信息,并采取适当的措施来避免应用程序崩溃。

11.文件格式支持:音乐播放器应该支持多种常见的音乐文件格式,如MP3、WAV、FLAC等。

它应该能够根据文件格式选择合适的解码器。

12.常规设置:音乐播放器应该具有一些常规设置,如默认音量、默认播放模式、快捷键等。

用户可以根据自己的需求来调整这些设置。

以上是控制台C语言编写音乐播放器的主要功能。

根据以上功能,你可以开始设计和编写一个简单的音乐播放器应用程序。

当然,你可以根据个人需求和编程能力来扩展和优化这些功能。

控件播放音乐视频等

控件播放音乐视频等
其中lPosition就是要到的播放位置,可以由你指定。
关于 光驱开关api
mciSendString("set CDAudio door open",0,0,0);mcisendstring 的特殊应用,
mciSendString("set CDAudio door closed",0,0,0);
关闭是"set cdaudio closed wait//C语言也能干大事系列其实就是windows编程的应用,发扬练这些播放器小程序的时候锻炼自己单片机程序开发能力,其实比windows程序编程更简单,因为单片机通信可以有时序图看,而播放器完全就是代码,msdn的阅读理解和应用,不要单纯的认为自己练得那些代码都白用了,当你敲出一万行当代码时,才表明你的程序功能才入门而已,存在就是合理.锻炼编程的思想,量变到质变,然后才能举一反三。会一道等于会了一个类型..就像函数的定义和调用,刚开始觉得很难,多用几次就行了,就知道是怎么回事了。函数的调用也是同样的类型,先定义后调用的运用,
转】mciSendSring的一些用法(老大给的那个链接里的)
mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面我们来介绍一
下它的使用方法:
一,打开多媒体文件。
首先在Dialog上面放一个Picture控件,MCISendString就在这个Picture控件的平面上播放多媒体文件,
做movie就可以操作mpeg1.avi。
二,播放多媒体文件。
上面我们已经打开了f:"mpeg"mpegSendString("play movie",buf,sizeof(buf),NULL);

用c程序播放音乐

用c程序播放音乐

【教学视频】《C语言也能干大事》第二节:程序播放音乐清晰版下载地址:如鹏下载站1:/download/cwin/2.rar高清版:不提供下载板书:1、上节课作业点评:海豚天使作业:写的非常好,99分。

唯一的改进点就是“if else中的代码哪怕只有一行也要用大括号括起来”。

VansOS:一个可取之处是“TEXT()”的应用;把while……continue用的很好;符合了“if else 中的代码哪怕只有一行也要用大括号括起来”的要求。

100分。

3、怎么打开VC6、VC7、DevC++的工程?C-Free4.0用【工具】→【工程转换】。

C-Free4.1的话,直接把工程文件拖进来就可以。

大家以后从网上下载了别的写的C语言程序,有可能用VC写的,所以要转换一下。

下了VC的程序不用担心,C-Free是支持的。

语言、IDE都是互通的,“一通百通”。

4、为什么代码自动提示不出来?怎么增加自动提示的数量?【工具】→【编辑器选项】→【代码提示】。

显示最大条数、输入几个字符后才激活。

建议改成10、15、怎么修改新建文件的默认文件名为c。

【工具】→【环境选项】、修改“新建文件类型”6、每次都输入WinMain以及那些参数,很麻烦,有没有快速方式?添加自己的“模板”。

【工具】→【编辑器选项】→【代码模板】,点击【添加】按钮,为模板选一个名字,然后将代码模板粘贴到“代码”框中。

使用方式:在编辑器中点击鼠标右键,选择【模板】,然后选择创建的代码模板。

7、怎么生成exe程序。

怎么把做好的exe程序发给别人?主菜单【工具】→【定位到工程文件夹】跳转到工程的文件夹,也可以在我的电脑里直接进入工程文件夹。

mingw2.95目录下生成的exe文件就是生成好的可执行文件,发给别人就可以。

8、播放声音文件(1)用途:游戏里播放音乐;自己动手给女友做音乐贺卡(图片、滚动的字母、温馨的音乐)(2)可以使用PlaySound()函数播放声音文件,该函数原型位于#include <mmsystem.h>中, 因此要使用PlaySound,首先需要添加对这个头文件的引用。

单片机蜂鸣器播放音乐代码生日快乐两只蝴蝶祝你平安

单片机蜂鸣器播放音乐代码生日快乐两只蝴蝶祝你平安

/生日快乐歌曲/ include<reg51.h>defineuintunsignedintdefineucharunsignedcharsbitbeep=P1^5;ucharcodeSONG_TONE={212;212;190;212;159;169;212;212;190;212;142;159;212;212;106;126;159;169;190;119;119;126;159;142;159;0};ucharcodeSONG_LONG={9;3;12;12;12;24;9;3;12;12;12;24;9;3;12;12;12;12;12;9;3;12;12;12;24;0};//延时voidDelayMSuintx{uchart;whilex--fort=0;t<120;t++;}voidPlayMusic{uinti=0;j;k;whileSONG_LONGi=0||SONG_TONEi=0{//播放各个音符;SONG_LONG为拍子长度forj=0;j<SONG_LONGi20;j++{//SONG_TONE延时表决定了每个音符的频率fork=0;k<SONG_TONEi/3;k++;}DelayMS10;i++;}}voidmain{beep=0;while1{PlayMusic;//播放生日快乐DelayMS500;//播放完后暂停一段时间}}两只蝴蝶:include<reg51.h>//这是单片机音乐代码生成器生成的代码defineucharunsignedcharsbitbeepIO=P1^5;//输出为P1.5可以修改成其它IO口ucharm;n;ucharcodeT492={{0;0};{0xF8;0x8B};{0xF8;0xF2};{0xF9;0x5B};{0xF9;0xB7};{0xFA;0x14};{0xFA;0x66};{0xFA;{0xFC;0x43};{0xFC;0x78};{0xFC;0xAB};{0xFC;0xDB};{0xFD;0x08};{0xFD;0x33};{0xFD; 0x5B};{0xFD;0x81};{0xFD;0xA5};{0xFD;0xC7};{0xFD;0xE7};{0xFE;0x05};{0xFE;0x21};{0xFE;0x3C};{0xFE;0x55};{0xFE;0x6D};{0xFE;0x84};{0xFE;0x99};{0xFE; 0xAD};{0xFE;0xC0};{0xFE;0x02};{0xFE;0xE3};{0xFE;0xF3};{0xFF;0x02};{0xFF;0x10};{0xFF;0x1D};{0xFF;0x2A};{0xFF;0x36};{0xFF;0x42};{0xFF;0x4C};{0xFF; 0x56};{0xFF;0x60};{0xFF;0x69};{0xFF;0x71};{0xFF;0x79};{0xFF;0x81}};ucharcodemusic2={{0;4};{23;4};{21;4};{23;16};{23;4};{21;4};{23;4};{21;4};{19;16};{16;4};{19;4};{21;8} ;{21;4};{23;4};{21;4};{19;4};{16;4};{19;4};{14;24};{23;4};{21;4};{23;16};{23;4};{21;4};{23;4};{21;4};{19;24};{16;4};{19;4};{21;8} ;{21;4};{23;4};{21;4};{19;4};{16;4};{19;4};{21;24};{23;4};{21;4};{23;16};{23;4};{21;4};{23;4};{21;4};{19;16};{16;4};{19;4};{21;8} ;{21;4};{23;4};{21;4};{19;4};{16;4};{19;4};{14;24};{23;4};{26;4};{26;16};{26;4};{28;4};{26;4};{23;24};{21;4};{23;4};{21;8};{21;4} ;{23;4};{21;4};{19;4};{16;4};{16;2};{19;2};{19;24};{0;20};{26;4};{26;4};{28;4};{31;4};{30;4};{30;4};{28;4};{23;4};{21;4};{21;4};{23;16}; {0;4};{23;4};{23;4};{26;4};{28;8};{28;12};{16;4};{23;4};{21;4};{21;24};{23;4};{26;4};{26;4};{23;4};{26;8};{0;4};{31;8};{30;4};{28;4};{30;4};{ 23;8};{0;4};{28;4};{28;4};{30;4};{28;4};{26;4};{23;4};{21;8};{23;4};{21;4};{23 ;4};{26;16};{0xFF;0xFF}};voiddelayucharpuchari;j;for;p>0;p--fori=181;i>0;i--forj=181;j>0;j--;}voidpause{uchari;j;fori=150;i>0;i--forj=150;j>0;j--;}voidT0_intinterrupt1 {beepIO=beepIO;TH0=Tm0;TL0=Tm1;}voidmain{uchari=0;TMOD=0x01;EA=1;ET0=1; while1{m=musici0;n=musici1;{TR0=0;delayn;i++;}elseifm==0xFF{TR0=0;delay30;i=0;}elseifm==musici+10{TR0=1;delayn;TR0=0;pause;i++;}else{TR0=1;delayn;i++;}}}祝你平安:include"reg52.h"unsignedcharCount;sbit_Speak=P1^5;unsignedcharcodeSONG={//祝你平安0x26;0x20;0x20;0x20;0x20;0x20;0x26;0x10;0x20;0x10;0x20;0x80;0x26;0x20;0x30;0x2 0;0x30;0x20;0x39;0x10;0x30;0x10;0x30;0x80;0x26;0x20;0x20;0x20;0x20;0x20;0x1c;0x2 0;0x20;0x80;0x2b;0x20;0x26;0x20;0x20;0x20;0x2b;0x10;0x26;0x10;0x2b;0x80;0x26;0x2 0;0x30;0x20;0x30;0x20;0x39;0x10;0x26;0x10;0x26;0x60;0x40;0x10;0x39;0x10;0x26;0x2 0;0x30;0x20;0x30;0x20;0x39;0x10;0x26;0x10;0x26;0x80;0x26;0x20;0x2b;0x10;0x2b;0x10x2b;0x20;0x30;0x10;0x39;0x10;0x26;0x10;0x2b;0x10;0x2b;0x20;0x2b;0x40;0x40;0x2 0;0x20;0x10;0x20;0x10;0x2b;0x10;0x26;0x30;0x30;0x80;0x18;0x20;0x18;0x20;0x26;0x2 0;0x20;0x20;0x20;0x40;0x26;0x20;0x2b;0x20;0x30;0x20;0x30;0x20;0x1c;0x20;0x20;0x2 0;0x20;0x80;0x1c;0x20;0x1c;0x20;0x1c;0x20;0x30;0x20;0x30;0x60;0x39;0x10;0x30;0x1 0;0x20;0x20;0x2b;0x10;0x26;0x10;0x2b;0x10;0x26;0x10;0x26;0x10;0x2b;0x10;0x2b;0x8 0;0x18;0x20;0x18;0x20;0x26;0x20;0x20;0x20;0x20;0x60;0x26;0x10;0x2b;0x20;0x30;0x2 0;0x30;0x20;0x1c;0x20;0x20;0x20;0x20;0x80;0x26;0x20;0x30;0x10;0x30;0x10;0x30;0x2 0;0x39;0x20;0x26;0x10;0x2b;0x10;0x2b;0x20;0x2b;0x40;0x40;0x10;0x40;0x10;0x20;0x1 0;0x20;0x10;0x2b;0x10;0x26;0x30;0x30;0x80;0x00};voidTime0_Init{TMOD=0x01;IE=0x82;TH0=0xD8;TL0=0xEF;//12MZ晶振;10msvoidTime0_Intinterrupt1{TH0=0xD8;TL0=0xEF;Count++;//长度加1}/-------------------------------------------------功能:1MS延时子程序-------------------------------------------------/ voidDelay_xMsunsignedintx{unsignedinti;j;fori=0;i<x;i++{forj=0;j<3;j++;}}voidPlay_Songunsignedchari{unsignedcharTemp1;Temp2;unsignedintAddr;Count=0;//中断计数器清0Addr=i217;Temp1=SONGAddr++;ifTemp1==0xFF//休止符{TR0=0;Delay_xMs100;}elseifTemp1==0x00//歌曲结束符{return;}else{Temp2=SONGAddr++;TR0=1;while1{_Speak=~_Speak;Delay_xMsTemp1;ifTemp2==Count{Count=0;break;}}}/-------------------------------------------------功能:主程序-------------------------------------------------/ voidmain{Time0_Init;//定时器0中断初始化while1{Play_Song0;//播放}}。

C语言也能干大事 编程 项目开发 计算器编程

C语言也能干大事  编程  项目开发  计算器编程

C 语言也能干大事附注:本文档里的代码都是本人学习编程之后自己所写,请不要随便的改写或删除,如在学习过程中有什么不懂的地方,可以提出来共同探讨学习!第一部分C语言也能干大事第一节:题目:自己动手写恶搞坑爹程序要求:运行以后弹出询问对话框(有【是】、【否】两个按钮以及问号图标)“你是好人吗?”,如果点击【是】,则弹出对话框(只有一个【确定】按钮以及一个警告图标)“一看你就不像好人,点击【确定】开始格式化C盘!”;如果点击【否】,则弹出对话框(有【重试】、【取消】两个按钮)“尝试把你变成好人失败,是否重试?”。

代码:(部分重要程序)#include "stdafx.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){int ret1=MessageBox(NULL,TEXT("你是好人吗?"),TEXT("人品鉴定系统"),MB_YESNO|MB_ICONASTERISK);/*“MB”是“MessageBox”的简写,MB_YESNO是可在窗口中显示的按钮,像这样的按钮还有:#define MB_OK (确定) 0x00000000L#define MB_OKCANCEL (确定和取消) 0x00000001L#define MB_YESNOCANCEL (是、否和取消) 0x00000003L#define MB_YESNO (是和否) 0x00000004L#define MB_RETRYCANCEL (重试和取消) 0x00000005L定义了一个int型变量,说明“MB_YESNO|MB_ICONASTERISK”运算(是或运算)之后的结果是一个整型数据。

“MessageBox()”括号里面有四个参数,第一个参数:hWnd:标识将被创建的消息框的拥有窗口。

单片机音乐播放c语言程序

单片机音乐播放c语言程序
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4
};
//生日歌
// 音阶频率表 高八位
code uchar FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
/* 函数声明 */
/*******************************************************/
uchar keyscan(void); //键盘扫描
void delay1(uint i); //演示程序
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音阶频率表 低八位
code uchar FREQL[]={
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
延时程序
------------------------------------------------*/
cord_l=P3&0xf0; //读入行线值
return(cord_h+cord_l);//键盘最后组合码值

C语言也能干大事

C语言也能干大事

<<C语言也能干大事一>>1、C语言不是只能开发黑底白字的控制台界面程序。

学习本课的基础:本课程不讲C语言基础知识,C语言考及格,学的过程中配合复习,有不懂的回去翻书。

2、学完本课程以后同学们做的一些作品赏析:计算器、俄罗斯方块、音乐播放器、学生管理系统(/forum/thread-2487-1-1.html),邮件客户端(/forum/thread-3697-1-1-uid7.html),Web论坛(/forum/thread-3991-1-1-uid7.html)可以开发游戏、网络程序、网站程序等。

C语言什么都可以开发3、准备工作,安装VC6(在网上搜“Visual C++ 6”,找合适的地址下载)。

VC6在Vista、Windows 下启动可能有兼容性提示。

3、开始做第一个C语言的程序【文件】→【新建】,打开【工程】选项页,选择【Win32 Application】(不要选错了),在“位置”中修改工程保存的路径。

(以前用Tubor C的同学会问“什么叫工程?”。

在以前大家用TurboC写的程序一般也就是一个文件,但是用C语言写大程序的时候不可能把所有的代码都写在一个文件中,肯定要写很多文件。

“工程(Project)”就是这些文件的一个集合。

)在“工程名”中写入你为这个工程取的名字,最好有一定意义。

下一步【一个简单的Windows程序】4、向Windows的世界问好MessageBox(NULL,TEXT("世界你好"),TEXT("问好"),MB_OK);VC6在Vista、Windows下编译调试时可能有兼容性提示。

5、学本课程常见问题(1)为什么不用TurboC?Turbo C(Win-TC)太老了,界面还是DOS界面,库也是DOS的库,没有网络开发包、没有Windows界面开发包。

TC只能用来学C的基础,要进行实际开发必须使用先进一点的工具。

C语言编程中的智能音乐与创作

C语言编程中的智能音乐与创作

C语言编程中的智能音乐与创作智能音乐与创作在C语言编程中的应用随着科技的不断发展和创新,智能音乐逐渐融入我们的生活。

作为一门广泛运用于编程领域的语言,C语言也在智能音乐与创作方面发挥着重要作用。

本文将探讨C语言编程中智能音乐与创作的应用,并介绍一些相关的开发工具和库。

一、C语言与音乐1.1 音符与频率的关系在C语言中,通过指定频率可以产生不同的音符。

音符与频率之间的关系可以通过公式 f = 440 * pow(2, n/12.0) 来计算,其中f表示音符的频率,n表示音符与A音(440Hz)之间的半音距离。

通过这个公式,我们可以准确地生成指定频率的音符。

1.2 声音的合成C语言提供了丰富的音频合成库,如ALSA、SDL等。

通过这些库,我们可以使用C语言生成各种各样的声音效果,如正弦波、方波、噪声等。

结合频率计算公式,我们可以自主创作各种音乐片段。

二、智能音乐的创作与分析2.1 MIDI文件的处理MIDI(Musical Instrument Digital Interface)是一种数字音乐文件格式,它保存了音符、乐器、时长等音乐相关信息。

我们可以使用C语言读取和解析MIDI文件,并对其进行处理。

比如,我们可以提取音符信息,分析音乐的节奏和和弦,实现智能伴奏、音乐分析等功能。

2.2 模式识别与算法智能音乐中的模式识别是一个重要的研究方向。

在C语言编程中,我们可以使用机器学习和模式识别算法,对音乐进行分析和处理。

例如,我们可以使用K-均值聚类算法对音乐进行分类,或者使用隐马尔科夫模型(HMM)生成符合指定风格的音乐。

三、智能音乐的应用3.1 MIDI乐器控制利用C语言编程,我们可以使用MIDI协议控制外部乐器或软件合成器。

通过编写符合MIDI协议的程序,我们可以控制乐器的演奏,实现自动弹奏、实时调节音色和音量等功能。

3.2 实时音频处理C语言提供了强大的音频处理库,如PortAudio、FFTW等。

控制台 C语言编写音乐播放器主要功能

控制台 C语言编写音乐播放器主要功能

#include "FM_Main.h"#include"CTL.H"#include<stdio.h>#include<windows.h>#include<mmsystem.h>#include"GUI.h"#include"ERR_CheckEnter.h"#pragma comment(lib,"winmm.lib")#include "FM_CheckFile.c"#include"FM_Choose.c"#include"FM_List.c"#include "FM_Path.c"int Order=1; //初始时为第一首歌,随音乐切换而切换--nextsong() int NewOrder=0;int Amount = 0; //歌曲总量int begin; //自定义列表中开始序号int circulatemode=1; //循环模式int pp=0;int begintemp=0; //存储自定义列表边界int ww=-1; // 显示自定义列表当前播放信息int upordown=1; //判断切歌方向int firstup=0;int originvolume=500; //默认音量为500char v[40]="setaudio aa volume to 500"; //初始化音量void Init(){Order=1;NewOrder=0;Amount = 0;circulatemode=1;pp=0;begintemp=0;ww=-1;upordown=1;firstup=0;originvolume=500;}void ShowFileList(){if(begintemp==0)begintemp=begin;Amount = FM_CheckFile();begin = Amount;if(NewOrder==0){Show_GUI_EIGHT();FM_CheckFilePrint(0,Amount);}else{Show_GUI_EIGHT();FM_CheckFilePrint(Amount,begintemp);}};void ShowFileDetails(){int i=0;if(upordown==1){if(NewOrder!=0){Order=Amount+1+ww;ww++;}}if(upordown==2){if(firstup==0){if(NewOrder!=0){Order=Amount+1+ww;ww--;}firstup--;}else{if(NewOrder!=0){Order=Amount+1+ww;ww--;}}}firstup+=4;i=Order-1;printf(" 正在播放的音乐\n");printf("-------------------------------------------------------\n");printf(" 歌曲号歌曲名歌手名\n");printf("-------------------------------------------------------\n");printf(" %3d ",info[i].ID);printf(" %-20s ",info[i].song);printf(" %-10s\n",info[i].singer);printf("-------------------------------------------------------\n");}void Play(){if(NewOrder!=0)Order=Amount+1;char vol[10]="500";char v[40];char ch[200];sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);sprintf(v," setaudio aa volume to %s",vol);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa repeat",NULL,0,NULL);// getchar();}void Stop(){mciSendString ("pause aa",NULL,0,NULL);printf("歌曲播放已暂停,输入3继续播放,输入12退出\n\n");// getchar();}void Resume(){mciSendString ("resume aa",NULL,0,NULL);// getchar();}void FastForward(){int n=1;int m=0;int d=0;int minute;int second;char dd[60][20];char temp[20];do{printf("输入1快进:");scanf("%d",&n);mciSendString ("status aa position", dd[m], 20, 0); char ch[20];sprintf(ch,"%s",dd[m]);d=atoi(dd[m]);d+=5000;minute=(int)(((int)(d/1000))/60);second=(d/1000)-minute*60;itoa(d,dd[m],10);sprintf(temp,"seek aa to %s",dd[m]);mciSendString (temp,NULL,0,NULL);Play();m++;clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("当前时间:%d:%02d \n",minute,second);}while(n==1);}void FastBack(){int n=1;int m=0;int d=0;int minute;int second;char dd[60][20];char temp[20];do{printf("输入1快退");scanf("%d",&n);mciSendString ("status aa position", dd[m], 20, 0); char ch[20];sprintf(ch,"%s",dd[m]);d=atoi(dd[m]);d-=5000;minute=(int)(((int)(d/1000))/60);second=(d/1000)-minute*60;itoa(d,dd[m],10);sprintf(temp,"seek aa to %s",dd[m]);mciSendString (temp,NULL,0,NULL);Play();m++;clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("当前时间:%d:%02d \n",minute,second);}while(n==1);}void StopStop(){char temp[20];char ch[10];itoa(0,ch,10);sprintf(temp,"seek aa to %s",ch);mciSendString (temp,NULL,0,NULL);mciSendString ("pause aa",NULL,0,NULL);printf("点击1重新播放\n\n");}void VolumePlus(){int n=1;// int originvolume=500;char volume[10];char temp[40];while(n==1){printf("输入1增加音量,输入2退出音量增加模式 ");scanf("%d",&n);originvolume+=250;itoa(originvolume,volume,10);sprintf(temp," setaudio aa volume to %s",volume);mciSendString (temp,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);getchar();clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("当前音量:%d\n",originvolume);}originvolume-=250;}void VolumeReduce(){int n=1;// int originvolume=500;char volume[10];char temp[40];while(n==1){printf("输入1降低音量,输入2退出音量降低模式 ");scanf("%d",&n);originvolume-=250;itoa(originvolume,volume,10);sprintf(temp,"setaudio aa volume to %s",volume);mciSendString (temp,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("当前音量:%d\n",originvolume);}originvolume+=250;}void PreSong(){if(NewOrder==0){if(circulatemode==1){if(Order<1){Order=1;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}if(circulatemode==2){if(Order<1){Order=Amount;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}}else{Order=Amount+pp;if(circulatemode==1){if(Order<Amount){Order=Amount;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}if(circulatemode==2){if(Order<Amount){Order=begin;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}pp--;}upordown=2;}void NextSong(){if(NewOrder==0){if(circulatemode==1){if(Order>Amount){Order=Amount;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}if(circulatemode==2){if(Order>Amount)//////////////////////////////////////////////{Order=1;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}}else{Order=Amount+pp;if(circulatemode==1){if(Order<Amount)/////////////////////有问题{Order=Amount;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order+1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order+1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}if(circulatemode==2){if(Order<Amount)//有问题{Order=begin;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order+1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order+1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}pp++;}upordown=1;}void SelectCirculMode(){int i=0;Show_GUI_SEVEN();scanf("%d",&i);if(i==1)circulatemode=1;if(i==2)circulatemode=2;}void SaveExit(){/*char dd[20];char log[50]={"testlog!!!"};mciSendString ("status aa position", dd, 20, 0);int d;d=atoi(dd);FILE *fp = NULL;fp = fopen("D:\\SaveLog.txt","a");fwrite(log,1,50,fp);*/}void PlayOperation(){int d;re: clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("请选择要进行的操作:");epo:scanf("%d",&d);fflush(stdin);if(ERR_CheckEntero(d)){switch(d){case 1:Play();goto re;case 2:Stop();goto re;case 3:Resume();goto re;case 6:FastForward();goto re;case 8:FastBack();goto re;case 4:StopStop();goto re;case 9:VolumePlus();goto re;case 10:VolumeReduce();goto re;case 5:Order--;PreSong();goto re;case 7:Order++;NextSong();goto re;case 12:ChooseSong();goto re;case 11:SelectCirculMode();goto re;case 13:mciSendString("close aa", NULL, 0, NULL);return;case 14:SaveExit();// getchar();}}else{goto epo;}};void NewOperation(){ee: int i=0;printf("请选择要进行的操作:");scanf("%d",&i);fflush(stdin);switch(i){case 1:FM_CheckFilePrint(0,Amount);begin = FM_Choose(Amount,begin);break;case 2:begin = FM_Path(begin);break;case 3:break;default:printf("输入有误\n");goto ee;}};void ShowNewList(){FM_List(begin,Amount);NewOrder=Amount+1;PlayOperation();}void ChooseSong(){int id = 0;printf("请输入歌曲号:");scanf("%d",&id);if(id<1||id>Amount){printf("选择歌曲不存在!\n");}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[id-1].add);mciSendString(ch,NULL,0,NULL);mciSendString("play aa repeat",NULL,0,NULL);}}。

基于C#实现音乐播放器功能

基于C#实现音乐播放器功能

摘要现在互联网的迅速发展,互联网技术日益成熟,成熟的计算机信息技术给人们带来许多便利。

在日常的娱乐方式中,音乐不可缺少。

随着数字化音乐的形成,媒体播放器也往更高的质量发展。

本论文的目的在于开发PC端音乐播放器。

文章包含了对音乐播放器界面实现的方法和对后台代码的理解及掌握,主要实现通过电脑使用播放器进行音乐播放功能和简单的在线搜索的功能。

通过实践进一步理解播放器的需求,以及其开发过程,基本满足大众播放器的要求。

文中使用面向.net frame框架,设计了一个简单的音乐播放器。

该播放器可以实现播放功能、搜索功能、歌词显示等关键字:音乐播放器、Visual studio 2013、.net frameworkAbstractWith the rapid development of modern economy and the continuous development of science and technology, computer information technology is becoming more and more prosperous. Music as a common way of entertainment in peoplee music player to play songs and to experience the fun of programming,you can use the Visual stdio2013.The purpose of this is to make everyone know a simple way to build a music player, and this method is mainly achieved by the Visual stdio. Article contains the method of a music player interface implementations, to understand and grasp the code-behind, The music player meets the requirements of the public players basically. This article uses .net framework to design a simple music player. This music player can play songs, search online, and display the lyrics.K eyword s:music player. the visual stdio 2013. .net frame目录1. C#概述 (1)1.1 什么是C# (1)1.2 课题研究思路 (1)2.系统分析 (2)2.1 功能分析 (2)2.2开发与运行环境 (4)2.3 可行性分析 (4)2.3.1 技术可行性 (5)2.3.2 经济可行性 (5)2.3.3 法律可行性 (5)3. 系统设计 (6)3.1设计概要 (6)3.2 功能模块 (6)3.3系统各功能子模块设计 (7)3.3.1开始模块 (7)3.3.2播放模式 (7)3.3.3音乐列表模块 (8)4. 功能实现 (9)4.1 播放器框架设计 (9)4.1.1命名空间结构 (9)4.1.2 App.config (10)4.2 歌曲添加模块 (10)4.3 歌曲删除模块 (12)4.4 播放控制模块 (14)4.4.1 启动自动播放 (14)4.4.2 双击播放音乐 (14)4.4.3歌曲切换 (15)4.5 自动播放下一曲 (15)4.6 显示歌词模块 (17)4.7 切换皮肤模块 (18)4.8 播放器背景模块 (19)4.9 网络连接模块 (20)4.10实现天气接口 (21)4.10实现注册登陆 (21)5. 软件测试 (22)6. 结束语 (29)参考文献 (30)基于C#实现网络音乐播放器功能1. C#概述1.1 什么是C#VS C#是微软公司可视化开发工具中系列产品,是创建Windows应用程序最简单、快捷的开发工具之一。

c语言发声程序

c语言发声程序

字号:大中小c语言经典教程:发声技术问题:乐谱的 1、2、3、4、5、6、7,加上高低音可以谱出动听的曲子,请编写程序,使计算机能够播放歌曲。

[分析]播放歌曲意味着让计算机发声,声音从 PC 机内的扬声器发出,所以这个问题将与硬件扬声器电路有关。

[解答]解决这一编程问题,让我们首先简单了解一下计算机发声的原理。

在PC 机的系统板上装有定时与计数器 8253 芯片,还有 8255 可编程并行接口芯片,由它们组成的硬件电路可用来产生 PC 机内扬声器的声音,对于 286、386、486、586 等 PC 微机,由于采用了超大规模集成电路,因而看不到这些芯片,它们均集成在外围电路芯片上了。

当我们操作计算机时,常常听到的发声,就是由软件控制这些电路而产生的。

声音的长短和音调的高低,均可由程序进行控制。

在扬声器电路中,定时器的频率决定了扬声器发音的频率,所以可通过设定定时器电路的频率来使扬声器发出不同的声音。

对定时器电路进行频率设定时,首先对其命令寄存器(口地址为 0x43)写命令字,如写入 0xb6,这可用outporb(0x43,0xb6);来实现,则表示选择该定时器的第二个通道,计数频率先送低 8 位(二进制),后送高 8 位。

接着用口地址 0x42 送频率计数值,先送低 8 位,后送高 8 位,即用outportb(0x42,低 8 位频率计数值)和 outportb(0x42,高 8 位频率计数值)来实现。

通过这两步使定时器电路产生一系列方波信号,此信号是否能推动扬声器发音,还要看由 8255 产生的门控信号和送数信号是否为 1,而它们也可编程,口地址为 0x61。

为了不影响 8255 口地址 61H 中的其他高位,应先输入口地址 6lH 的现有值 bits,即用 bits= inportb(0x61)来实现,然后就可用 outportb(0x61,bits|3)来允许发声,而用 outportb(0x61,bits&0xfc)来禁止发声,且不改变 8255 其它位原来的值,关于这方面的详细内容可以参阅 IBM PC/XT 接口技术方面书籍有关内容。

C语言PlaySound函数使用方法

C语言PlaySound函数使用方法

C语⾔PlaySound函数使⽤⽅法⽬录1 ⽤法2 参数3 头⽂件与静态⽂件4 ⾳乐路径1 ⽤法PlaySound是windows中⽤来播放声⾳的API函数,函数接⼝如下:BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound)2 参数其中pszSound⽤来指定要播放的⽂件,可以是资源名或者⾳乐⽂件的路径,若为空(NULL)则停⽌正在播放的声⾳。

PlaySound只能播放WAV⽂件。

hmod⼀般设置为空(NULL),除⾮你要指向资源标识符(即fdwSound被定义为SND_RESOURCE)。

fdwSound⽤来指定播放模式,参数如下:SND_APPLICATION⽤应⽤程序指定的关联来播放声⾳。

SND_ALIASpszSound参数指定了注册表或WIN.INI中的系统事件的别名。

SND_ALIAS_IDpszSound参数指定了预定义的声⾳标识符。

SND_ASYNC⽤异步⽅式播放声⾳,PlaySound函数在开始播放后⽴即返回。

SND_FILENAMEpszSound参数指定了WAVE⽂件名。

SND_LOOP重复播放声⾳,必须与SND_ASYNC标志⼀块使⽤。

SND_MEMORY播放载⼊到内存中的声⾳,此时pszSound是指向声⾳数据的指针。

SND_NODEFAULT不播放缺省声⾳,若⽆此标志,则PlaySound在没找到声⾳时会播放缺省声⾳。

SND_NOSTOPPlaySound不打断原来的声⾳播出并⽴即返回FALSE。

SND_NOWAIT如果驱动程序正忙则函数就不播放声⾳并⽴即返回。

SND_PURGE停⽌所有与调⽤任务有关的声⾳。

若参数pszSound为NULL,就停⽌所有的声⾳,否则,停⽌pszSound指定的声⾳。

SND_RESOURCEpszSound参数是WAVE资源的标识符,这时要⽤到hmod参数。

SND_SYNC同步播放声⾳,在播放完后PlaySound函数才返回。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MessageBox(NULL,"点确定终止音乐","信息",MB_OK);
PlaySound(NULL,NULL,SND_FILENAME);
MessageBox(NULL,"音乐被终止","信息",MB_OK);
(12)关于PlaySound函数更多的介绍见:/question/41366091.html
(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);
(3)怎么我查看MessageBox函数其实是MessageBoxW、MessageBoxA两个函数的宏定义?Win32API中还有大量这种风格的函数。W结尾的是把字符当成Unicode处理的,A结尾的是把字符当成ASCII处理的。使用时不要直接调用W结尾的或者A结尾的。编译器会在编译时确定调用哪个。
注意的问题:文件名中的反斜线要用“\\”,因为C语言中“\”默认是转义符,如果要表示“\”则需要使用“\\”,对这点不明白的请回去翻一下C语言的书;对中文字符串要使用TEXT宏。
(5)为啥构建不通过?
#include <mmsystem.h>只是保证编译通过,还要设定link。
解决方案:工程上点击右键,选“工程设置”,连接,添加“winmm”库。
附录:VC中添加Link库的方式:
project->setting->Link 下的 Object/library modules 里加入winmm.lib即可”,他这里用的是英文版,中文版应该是主菜单的【工程】→【设置】→【连接】,将“winmm.lib”加入到“对象/库模块”中。
(6)接上面的问题:关于link库
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);
(3)函数原型为: BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
返回值表示是否播放成功。
参数pszSound是要播放声音的文件名,只支持WAV等格式的文件;去用“wav”为关键词可以搜到很多wav音乐,也可以用工具将其他格式的转换为wav格式的。
只能同时播放一段音乐,启动新的、旧的就被停了
(11)如果只是想停止目前的播放而不播放新音乐呢?
只要给PlaySound的第一参数传递NULL就可以停止目前的播放了。
PlaySound("C:\\WINDOWS\\Media\\Windows XP 关机.wav",
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
MessageBox(NULL,"同步播放完毕","信息",MB_OK);
PlaySound("C:\\WINDOWS\\Media\\Windows XP 关机.wav",NULL,SND_FILENAME|SND_ASYNC);
MessageBox(NULL,"异步播放立即返回","信息",MB_OK);
添加自己的“模板”。【工具】→【编辑器选项】→【代码模板】,点击【添加】按钮,为模板选一个名字,然后将代码模板粘贴到“代码”框中。
使用方式:在编辑器中点击鼠标右键,选择【模板】,然后选择创建的代码模板。
7、怎么生成exe程序。怎么把做好的exe程序发给别人?
主菜单【工具】→【定位到工程文件夹】跳转到工程的文件夹,也可以在我的电脑里直接进入工程文件夹。mingw2.95目录下生成的exe文件就是生成好的可执行文件,发给别人就可以。
3、怎么打开VC6、VC7、DevC++的工程?
C-Free4.0用【工具】→【工程转换】。
C-Free4.1的话,直接把工程文件拖进来就可以。
大家以后从网上下载了别的写的C语言程序,有可能用VC写的,所以要转换一下。下了VC的程序不用担心,C-Free是支持的。语言、IDE都是互通的,“一通百通”。
(9)我可以做一个小程序,别人在我小程序运行的时候一直听播放的音乐,用异步方式可以保证音乐在后台播放。可以只能播放一遍,能不能音乐来回来去的不断播放呢?答案是使用SND_LOOP标志。
Loop:循环
PlaySound("C:\\WINDOWS\\Media\\Windows XP 关机.wav",
同步模式:音乐播放过程中函数不返回,播放完成才返回
异步播放在做游戏等需要播放时间较长的音乐时使用,因为程序不会在音乐播放过程中有假死的情况。
有没有同学注意到第二个对话框如果快速关闭的话音乐会中途停止?这是因为程序退出音乐就中断播放了。用户关了游戏,音乐也不能继续播放,应该停止,所以很合理
SND_ASYNC:用异步方式播放声音,PlaySound函数在开始播放后立即返回;
SND_SYNC:同步播放声音,在播放完后PlaySound函数才返回;SND_LOOP一遍遍的重复播放声音,必须与SND_ASYNC标志一块使用。
(4)使用举例:
PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 启动.wav"),NULL,SND_FILENAME|SND_SYNC);
(4)Win32API是语言无关的,这点是非常重要的。Win32API是操作系统提供的库函数,可以在C语言中调用,也可以在C++中调用,还可以在C#、Java、Delphi、Python、汇编等各种语言中调用,因此学会了我们这里的C语言Windows程序开发以后只要熟悉一下其他语言的语法就可以很快的用其他语言开发Windows程序,VC、C#、Delphi等语言中的程序界面、网络操作、文件操作等功能都是对Win32API的简单包装而已。学了咱们如鹏网的《C语言也能干大事》以后就掌握了编程开发的“内功心法”,达到了一切语言都是纸老虎的大侠状态,就可以蔑视那些问“学VC还是学C#?”的菜鸟,你怎能不心动?!
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
(10)如果我做一个小游戏,那么希望向上边那样不断播放,可以到达一个关卡的时候希望停止原来的音乐怎么办?
PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 启动.wav"),NULL,SND_FILENAME|SND_ASYNC);
4、为ቤተ መጻሕፍቲ ባይዱ么代码自动提示不出来?怎么增加自动提示的数量?
【工具】→【编辑器选项】→【代码提示】。显示最大条数、输入几个字符后才激活。建议改成10、1
5、怎么修改新建文件的默认文件名为c。
【工具】→【环境选项】、修改“新建文件类型”
6、每次都输入WinMain以及那些参数,很麻烦,有没有快速方式?
参数hmod是应用程序的实例句柄,一般传递NULL就可以;
参数fdwSound是标志的组合掩码,可选值有SND_FILENAME、SND_ASYNC、SND_SYNC等。
SND_FILENAME表示pszSound参数指定的是文件名(pszSound还可以指定资源、内存音乐、系统音乐等等);
解决此问题时参考的文章:/big_foot/blog/item/4822fcd11a7f7cd6562c84e7.html。它虽然描述的是VC中解决此问题的方式,但是记住“一通百通”这个道理,C-Free中添加Link库的方式和VC非常相似,只是操作步骤不同而已。
一个程序由源代码变成exe文件有两步:编译Compile;连接Link。编译是把c文件编译成.o、.obj文件,而连接则是把这些.o、.obj、.lib等文件连接到一起成为exe文件。这点不清楚的请回去查看C语言的教材。
那什么是*.lib文件呢?大家以前用TC开发程序的时候用的都是C语言内置的函数,所以不存在使用非内置函数的情况。但是在开发大程序的时候要大量用到非内置的函数,比如PlaySound、MessageBox等等。在使用这些函数的时候需要使用两部分,一部分是*.h头文件,它定义了函数的参数和返回值,另一部分是*.lib文件,是用来进行程序链接用的。C程序的构建分为编译(Compile)和连接(Link)两个过程,Compile是把源代码编译成*.obj文件,每个源码文件都对应一个*.obj文件,而连接则是把这些*.obj文件以及使用到的非内置函数的*.lib文件连接成一个*.exe文件。所以无论是忘了include *.h文件,还是丢了*.lib文件,都会构建出错。从上面的报错信息可以看出来是Compile成功,但是Link失败。一定要记得C程序编译的这两个过程,面试、笔试的时候常考。
10、课后作业:改进上节课那个恶搞程序,在问不同问题的时候播放不同的音乐。同学提交作业的方式就是把代码以回帖的方式回复本帖。�
9、关于API
(1)什么叫API(应用程序接口Application Interface的简称)?什么叫Win32 API?API就是操作系统提供的一堆库函数,没啥稀奇的。printf、scanf是C语言内置的函数,其他的非内置的库函数都叫API。
相关文档
最新文档