一个可以运动的音乐贺卡

来源:互联网 发布:淘宝买家秀赚钱 编辑:程序博客网 时间:2024/04/30 15:20

我在前两篇博客中介绍了如何制作音乐贺卡,分别用了嵌入式和链接式实现播放音乐,在此就不做介绍,想了解相关信息,请参考我前面写的关于音乐贺卡的博客


在看这篇博客时,需要将位图,图标,音乐文件都插入到了音乐贺卡中,插入后的界面


完成了上面的工作后,就是写代码


在写代码前先介绍几个函数


函数名:TimerProc

函数功能:回调函数

函数原型: VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)

参数:

hwnd  程序的句柄

message: Windows信息

iTimerID:定时器的ID

dwTime:表示多长时间调用一次回调函数

参考文章:TimerProc函数


函数名: GetWindowDC

函数功能:获得设备环境句柄

函数原型:

HDC GetWindowDC(
  _In_  HWND hWnd
);


参数: hWnd  窗口句柄

返回值: HDC 设备环境句柄

参考文章:GetWindowDC函数


函数名:GetDeviceCaps
函数功能: 获得设备的参数

函数原型:

int GetDeviceCaps(
  _In_  HDC hdc,
  _In_  int nIndex
);

参数: hdc 设备的环境句柄     nindex  设备的项目

参考文章:GetDeviceCaps函数


函数名:ReleaseDC

函数功能:释放设备的环境句柄

函数原型:

int ReleaseDC(
  _In_  HWND hWnd,
  _In_  HDC hDC
);

参数:

hWnd: 窗口句柄

hDC : 设备环境句柄

参考文章:ReleaseDC函数


函数名:MoveWindow

函数功能:移动窗口

函数原型:

BOOL WINAPI MoveWindow(
  _In_  HWND hWnd,
  _In_  int X,
  _In_  int Y,
  _In_  int nWidth,
  _In_  int nHeight,
  _In_  BOOL bRepaint
);

参数:

x : 窗口的位置(x坐标)

y: 窗口的位置(y坐标)

nWidth : 窗口的宽度

nHeight:窗口的高度

bRepaint:是否要重画

参考文章:MoveWindow函数


函数名:SetTimer

函数功能:定义一个定时器

函数原型:

UINT_PTR WINAPI SetTimer(
  _In_opt_  HWND hWnd,
  _In_      UINT_PTR nIDEvent,
  _In_      UINT uElapse,
  _In_opt_  TIMERPROC lpTimerFunc
);


参数:

hWnd:窗口的句柄

nIDEVENT:定时器的ID

uElapse:多久调用一次回调函数

lpTimerFunC :回调函数

 

参考文章:SetTimer函数


程序代码:

#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include <mmsystem.h>#include "resource.h"#include "MainDlg.h"BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){    switch(uMsg)    {        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);    }    return FALSE;}int size_1 = -1;int size_2 = -1;int X = 0;int Y = 0;//改变贺卡左右运动的运动方向void FuncChange_X(){size_1 = -size_1;}//改变贺卡上下运动的运动方向void FuncChange_Y(){size_2 = -size_2;}//回调函数void CALLBACK TimerProc(HWND hwnd , UINT message, UINT iTimerID, DWORD dwTime){//得到设备环境句柄HDC hdc = GetWindowDC(hwnd);//得到贺卡的宽度int Wide = GetDeviceCaps(hdc,HORZRES);//得到贺卡的高度int High = GetDeviceCaps(hdc,VERTRES);//当贺卡移动到左边界或者右边界时if((0 == X) || (Wide-550==X)){FuncChange_X();//改变贺卡的移动方向}//当贺卡移动到上边界或者下边界时if((0 == Y) || (High-430== Y)){FuncChange_Y();//改变贺卡的移动方向}//移动贺卡MoveWindow(hwnd,X+size_1,Y+size_2,550,400,TRUE);X += size_1;Y += size_2;}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){/*在窗口的标题栏上显示图标*/SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)));  //得到程序的实例句柄HINSTANCE hinstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);     //播放音乐PlaySound(MAKEINTRESOURCE(IDR_WAVE1),hinstance,SND_RESOURCE|SND_ASYNC);    //定时器SetTimer(hwnd,0,0.1,TimerProc);    return TRUE;}void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){    switch(id)    {        case IDC_OK:{}        break;        default:break;    }}void Main_OnClose(HWND hwnd){    EndDialog(hwnd, 0);}

运行结果:


点击下载生日贺卡
0 0