要播放声音,要附加项:winmm.lib,然后包含头文件:#include <mmsystem.h>

播放声音用PlaySound函数,只能播放midi和wav波形文件。

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "MenuSoundRes.h"
#define WINDOW_CLASS_NAME "WINCLASS1" //全局变量
HWND main_window_handle = NULL;
HINSTANCE hInstance_App = NULL; //窗口处理函数
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lPram)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rect;
switch (msg)
{
case WM_CREATE:
{
return ;
}break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case MENU_FILE_ID_EXIT:
{
PostQuitMessage();
}break;
case MENU_HELP_ABOUT:
{
MessageBox(hwnd, "欢迎使用声音演示程序", "声音", MB_OK | MB_ICONEXCLAMATION);
}break;
case MENU_PLAY_ID_BEAM:
{
PlaySound(MAKEINTRESOURCE(SOUND_ID_BEAM), hInstance_App, SND_RESOURCE | SND_ASYNC);
}break;
case MENU_PLAY_ID_TELEPORT:
{
PlaySound(MAKEINTRESOURCE(SOUND_ID_TELEPORT), hInstance_App, SND_RESOURCE | SND_ASYNC);
}break;
default:
break;
}
}break;
case WM_PAINT:
{
hdc = GetDC(hwnd);
ReleaseDC(hwnd, hdc);
GetClientRect(hwnd, &rect);
ValidateRect(hwnd, &rect); return ;
}break;
case WM_CLOSE:
{
if (IDYES != MessageBox(hwnd, "确实要退出应用程序?", "退出", MB_YESNO | MB_ICONEXCLAMATION))
{
return ;
}
}break;
case WM_SIZE:
{ }break;
case WM_DESTROY:
{
PostQuitMessage();
return ;
}break;
default:break;
}
return DefWindowProc(hwnd, msg, wParam, lPram);
}
void GameMain()
{
return;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//定义窗口类
WNDCLASSEX winClass;
HWND hWnd;
MSG msg;
//填充窗口类的各成员
winClass.cbSize = sizeof(WNDCLASSEX);
winClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
winClass.lpfnWndProc = WindowProc; //窗口消息处理函数
winClass.cbClsExtra = ;
winClass.cbWndExtra = ;
winClass.hInstance = hInstance;
winClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(ICON_MENUSOUND));
winClass.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(CURSOR_CROSSSHAIR));
winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winClass.lpszMenuName = NULL;
winClass.lpszClassName = WINDOW_CLASS_NAME; //窗口类名
winClass.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(ICON_MENUSOUND)); //保存实例句柄到全局变量
hInstance_App = hInstance; //注册窗口类
if (!RegisterClassEx(&winClass))
{
return ;
} //创建窗口类的一个成员
if (!(hWnd = CreateWindowEx(NULL,
WINDOW_CLASS_NAME,
"hello world",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
, ,
, ,
NULL,
NULL,
hInstance,
NULL)))
{
return ;
} HMENU hMenuhandle = LoadMenu(hInstance, "SoundMenu");
SetMenu(hWnd, hMenuhandle);
//保存窗体句柄到全局变量中
main_window_handle = hWnd; //得到设备上下文
HDC hdc = GetDC(hWnd); //消息循环
while (TRUE)
{
if (PeekMessage(&msg, hWnd, , , PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//SetTextColor(hdc, RGB(rand() % 256, rand() % 256, rand() % 256));
//SetBkColor(hdc, RGB(0,0,0));
//SetBkMode(hdc, TRANSPARENT);
//TextOut(hdc, rand() % 640, rand() % 480, "hello", strlen("hello"));
//GameMain();
//Sleep(10);
}
ReleaseDC(hWnd,hdc);
return msg.wParam;
}

资源头文件

//声音资源
#define SOUND_ID_BEAM 1
#define SOUND_ID_TELEPORT 2 //光标资源和图标资源
#define ICON_MENUSOUND 100
#define CURSOR_CROSSSHAIR 200 //菜单资源
#define MENU_FILE_ID_EXIT 1000 #define MENU_PLAY_ID_BEAM 2000
#define MENU_PLAY_ID_TELEPORT 2001 #define MENU_HELP_ABOUT 3000 //字符串资源
#define ID_STRING_FILE 10000
#define ID_STRING_PLAY 20000
#define ID_STRING_EXIT 30000

.RC文件:

#include "MenuSoundRes.h"

ICON_MENUSOUND            ICON        t3dx.ico
CURSOR_CROSSSHAIR CURSOR crosshair.cur SOUND_ID_BEAM WAVE beam.wav
SOUND_ID_TELEPORT WAVE TELEPORT.WAV //字符串资源,没有名字,一个资源文件中只能有一个字符串资源。
STRINGTABLE
{
ID_STRING_FILE,"文件"
ID_STRING_PLAY,"播放"
ID_STRING_EXIT,"退出"
} //菜单资源
SoundMenu MENU DISCARDABLE
{
POPUP "File"
{
MENUITEM "E&xit" MENU_FILE_ID_EXIT
}
POPUP "&PlaySound"
{
MENUITEM "BEAM" MENU_PLAY_ID_BEAM
MENUITEM "TELEPORT" MENU_PLAY_ID_TELEPORT
}
POPUP "Help"
{
MENUITEM "About" MENU_HELP_ABOUT
}
}

windows编程:资源和播放声音的更多相关文章

  1. 资源在windows编程中的应用----菜单

    资源在Windows编程中的应用 资源 加速键.位图.光标.对话框.菜单.字符串.工具条 1.菜单的创建 菜单由以下组成部分: (1)窗口主菜单条 (2)下拉式菜单框 (3)菜单项热键标识 (4)菜单 ...

  2. 【Windows编程】系列第六篇:创建Toolbar与Statusbar

    上一篇我们学习了解了如何使用Windows GDI画图,该应用程序都是光光的静态窗口,我们使用Windows应用程序,但凡稍微复杂一点的程序都会有工具栏和状态栏,工具栏主要用于一些快捷功能按钮.比如典 ...

  3. 【Windows编程】系列第七篇:Menubar的创建和使用

    上一篇我们学习了利用windows API创建工具栏和菜单栏,与上一篇紧密联系的就是菜单栏,菜单栏是一个大多数复杂一些的Windows应用程序不可或缺的部分.比如下图就是Windows自带的记事本的菜 ...

  4. 【Windows编程】系列第三篇:文本字符输出

    上一篇我们展示了如何使用Windows SDK创建基本控件,本篇来讨论如何输出文本字符. 在使用Win32编程时,我们常常要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接 ...

  5. Windows编程入门程序详解

    引用:http://blog.csdn.net/jarvischu/article/details/8115390 1.     程序 /******************************* ...

  6. windows编程原理

    这里在学网络编程时遇到了讲解windows的编程,稍微整理一下windows编程原理,顺便复习一下. 首先,理解Windows 程序运行原理:Windows应用程序,操作系统,计算机硬件之间的相互关系 ...

  7. Windows编程基础

    主要内容:介绍Windows编程的一些基础概念 1.窗口的概念 <1>一个应用程序的窗口通常包括控制菜单框.下拉菜单. 工作区以及最大化按钮.最小化按钮, 还有垂直滚动条.水平滚动条 &l ...

  8. 【转】浅析Windows编程的剪贴板

    摘要: 本文对Windows剪贴板机制作了深入.全面的阐述,具体内容包括:文本.位图.DSP.自定义格式剪贴板的使用和多数据项和延迟提交技术. 关键词: VC++6.0: 剪贴板机制:数据格式:延迟提 ...

  9. 设置windows窗口ICON 【windows 编程】【API】【原创】

    1. ICON介绍 最近开始接触windows 编程,因此将自己所接触的一些零散的知识进行整理并记录.本文主要介绍了如何更改windows对话框窗口的ICON图标.这里首先介绍一下windows IC ...

随机推荐

  1. poj 1384 Piggy-Bank(完全背包)

    Piggy-Bank Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10830   Accepted: 5275 Descr ...

  2. css总结

    1. css中的role属性 html 里面的 role 本质上是增强语义性,当现有的HTML标签不能充分表达语义性的时候,就可以借助role来说明.通常这种情况出现在一些自定义的组件上,这样可增强组 ...

  3. TFS 服务端默认端口更改

    由于服务商限制8080,为了外网能访问.如果可以做映射还好.如果不能那就修改默认端口 以下为网上资源 安装完Team Foundation Server 2005 后,默认的端口是8080.如果想要事 ...

  4. Microsoft Visual Stduio 2005 Ent安装报错解决方法

    错误:Microsoft Visual Studio 2015 Devenv : 安装时发生严重错误 安装过程第一次出现该错误时,查看了日志文件,错误提示如下: [0EEC:0EF0][2016-10 ...

  5. sqlserver索引与查询优化

    此文为转载,仅做保存使用,出处:http://www.cr173.com/html/8688_all.html 在数据库存优化设计中往往会提到索引,这编文章就来详细的说明一下在 SQL SERVER ...

  6. ASP.NET中的Session怎么正确使用

    Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...

  7. Zabbix(一)--zabbix 2.4.8 安装

    zabbix依赖于LAMP,所以部署前要先保证这个平台. 安装服务端(Server) zabbix官网的rpm包都是按照功能分开一个个,比如: zabbix-server-2.4.7-1.el7.x8 ...

  8. Java 验证码、二维码

    Java 验证码.二维码 资源 需要:   jelly-core-1.7.0.GA.jar网站:   http://lychie.github.io/products.html将下载下来的 jelly ...

  9. C++拷贝构造函数

    拷贝构造函数是一种特殊的构造函数,其定义为第一个参数为为本类型的一个引用或者是常引用,且无其它参数或者其它参数为默认值,例如下面的函数: X::X(const X&); X::X(X& ...

  10. 脉冲计数功能在ESM335x-Linux主板上的实现

    1.综述 在工业控制中,经常需要获取脉冲信号计数值.频率.周期.占空比等参数.英创嵌入式主板ESM335X系列 Linux系统现已实现外部输入脉冲信号的计数.频率.周期.占空比测量功能. 主要功能及技 ...