1. 程式人生 > >給MFC新增圖片,動圖,新增背景音樂(打包大放送)

給MFC新增圖片,動圖,新增背景音樂(打包大放送)

最近突然有了一種想用MFC做賀卡的想法,做成一個.exe程式,讓被祝賀的人可以用電腦在任何位置開啟觀看,這就要求所使用資源必須新增至MFC工程,下面的方法都是本人測試過的,希望對你有所幫助呦!

1新增圖片

MFC只支援新增256色bmp格式的圖片,如果你沒有bmp格式的圖片,可以從該連結下載256色bmp圖,當然你也可以用windows自帶的畫圖將其他格式圖片轉化為256色bmp圖

首先你要新增圖片控制元件

修改該控制元件的屬性

然後在資源檢視中新增資源

選擇bitmap,匯入,然後選擇你要新增的圖片即可

在圖片控制元件的屬性頁面雜項中的image中選擇你剛新增的圖片的ID就可以了

給MFC新增圖片的誤區就是MFC支援的圖片格式是256色bmp圖,注意,其他格式的圖片是新增不進去的

 

2新增GIF動圖

給MFC新增GIF動圖其實才是比較有困難的,因為你幾乎在網上找到的方法都是互抄的,根本不行!我查了兩個多小時百度才在一篇較老的部落格中看到正確方法

首先還是新增圖片控制元件啦

然後修改圖片控制元件屬性

這裡就要用到圖片控制元件的ID了,你可以自己設定一個ID

右擊圖片控制元件,給圖片控制元件新增Cstatic變數,變數名自己取一個,我用的是m_ljlPicture

到這裡關於圖片控制元件的內容就結束了

本人使用的顯示載入GIF動圖的方法是使用第三方函式pictureEx.h和pictureEx.cpp

pictureEx下載

將.h跟.cpp新增至MFC專案,並在你要顯示動圖的對話方塊.h中包含標頭檔案pictureEx.h

上面已經給圖片控制元件添加了Cstatic變數,下面將其型別改為CPictureEx m_ljlPicture; (在哪個對話方塊中新增的變數就去相應的.h中修改)

然後在對話方塊初始函式:OnInitDialog()中新增如下語句

if (m_ljlPicture.Load(MAKEINTRESOURCE(IDR_GIF2),_T("gif")))
        m_ljlPicture.Draw(); 

到這裡程式碼就結束了,下面給MFC工程新增GIF動圖資源

由於MFC本身不支援gif型別的資源,因此在資源檢視新增資源時需要自定義一個型別gif

然後右擊"gif"這個篩選器,選擇插入gif,這時會出來一個空的檔案

我這裡的就是IDR_GIF3,這個是幹嘛用的呢,由於直接新增GIF是不行的,因此才使用這種方法,在空白動圖檔案中貼上原動圖檔案的二進位制資料

在解決方案資源管理器介面找到資原始檔篩選器,並將你要新增的動圖新增進去,具體操作是右擊資原始檔->新增->現有項,選擇你要新增的GIF圖gif圖下載

右擊你新增的gif圖,選擇開啟方式->二進位制編輯器

將二進位制資料拷貝到gif篩選器中的空檔案中

這是我已經新增好的gif動圖

至此給MFC專案新增GIF動圖就完美結束了

(if (m_ljlPicture.Load(MAKEINTRESOURCE(IDR_GIF2),_T("gif")))  m_ljlPicture.Draw();中 IDR_GIF2是你動圖的ID)

三新增背景音樂

新增背景音樂就比較簡單了

值得注意的是MFC本身只支援WAV格式的音訊格式,將要新增的音訊轉換成WAV格式WAV格式音樂<初戀>下載

可以使用轉換器轉換,下載迅捷視訊轉換器就可以轉換

在資源檢視中直接匯入你的WAV格式音樂,MFC會自動新建篩選器"WAVE"

在你要播放背景音樂的地方將這些都加上

#include "resource.h"
#include <Windows.h>
#include <iostream>
#include "string.h"
#include <process.h> 
#include<iomanip>
#include <MMSystem.h>
#pragma comment (lib,"Winmm.lib");

1、在你要播放的對話方塊:OnInitDialog()中新增

PlaySound((LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);

2、通過按鈕觸發事件來播放,我做的是按鈕可以開啟屬性卡,然後播放背景音樂

在按鈕觸發事件中新增

HANDLE handle = (HANDLE)_beginthreadex(NULL, 0, ThreadFun, NULL, 0, NULL); 

    CloseHandle(handle); //釋放執行緒資源

我的執行緒函式是

unsigned int __stdcall ThreadFun(void *)
{

    //MessageBox(NULL,_T("開始播放音樂"),_T("提示"),MB_OKCANCEL);
    PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);
  

    _endthreadex(0);
    return 0;

}

這樣可以讓主程序彈出對話方塊的同時播放音樂

至此給MFC新增播放背景音樂完成