位图的应用(七夕情人节贺卡)

来源:互联网 发布:ui设计师老被叫美工 编辑:程序博客网 时间:2024/04/30 12:32

最近我总是在想如何在程序中添加gif动画使其看起来像QQ邮箱中的贺卡一样即会动又会播放音乐,功夫不负有心人,我终于在网上找到了一些相关的博客,就是上一篇转载的博客位图的应用,看了一下也跟着博客做出了数字时钟,做完后我就想将代码移到DialogBasedApplication上居然成功了,我就利用这篇博客中不停的加载位图的方法,居然成功了,做成了像QQ邮箱中那样的贺卡

在制作前还是老规矩需要准备几张位图和图标文件以及一个WAV格式的音乐文件

位图还要有点特色,最好是一个动画的动作图,我是在网上找了一个简单的gif动画,用暴风影音中自带的截图工具将每个动作截图,然后将图片转换成位图

图片


程序代码:

#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include <mmsystem.h>#include "resource.h"#include "MainDlg.h"HBITMAP hBitmap;//位图句柄int x,y;//位图的位置int cxBitmap, cyBitmap;//位图的宽度和位图的高度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;}//回调函数void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime){BITMAP bitmap;//位图结构//得到数字时钟的实例句柄HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);for(int i=1;i<=6;i++){if(1 == i){    //加载位图hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));}else if(2 == i){hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2));}    else if(3 == i){hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP3));}         else if(4 == i){hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP4));} else if(5 == i){hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP5));}        else if(6 == i){hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP6));}//得到位图的信息  GetObject(hBitmap, sizeof(BITMAP), &bitmap);cxBitmap = bitmap.bmWidth;//位图的宽度cyBitmap = bitmap.bmHeight;;//位图的高度HDC hdc;//设备环境句柄hdc = GetDC(hwnd);//得到设备环境句柄HDC hdcMem;//设备环境句柄//创建一个与DC兼容的设备环境hdcMem = CreateCompatibleDC(hdc);//选择位图SelectObject(hdcMem,hBitmap);//处理位图BitBlt(hdc, 0, 0, cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY);  /*    hdc:表示设备环境句柄    0:表示时间显示区在矩形框中的位置的横坐标    0:表示时间显示区在矩形框中的位置的纵坐标cxBitmap:位图的宽度cyBitmap:每个数字的高度hdcMem:设备环境句柄0:位图中的X坐标        0:位图中的Y坐标*/Sleep(1000);//停顿1秒钟DeleteDC(hdcMem);//释放环境句柄ReleaseDC(hwnd, hdc);//释放环境句柄}}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){/*在窗口的标题栏上显示图标*/SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)));//设定定时器SetTimer(hwnd, 1,1,TimerProc);//得到程序的实例句柄HINSTANCE hinstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);     //播放音乐PlaySound(MAKEINTRESOURCE(IDR_WAVE1),hinstance,SND_RESOURCE|SND_ASYNC | SND_LOOP);        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){exit(0);}

执行结果


点击下载贺卡

1 0
原创粉丝点击