MFC用GDI 動感歌詞的製作

2021-09-08 09:55:11 字數 4216 閱讀 6744

源**:

源**:

1.插入乙個對話方塊的資源,刪除預設控制項,並為對話方塊建立乙個類,命名為clyricdlg;

2.在對話方塊的標頭檔案中新增gdi+相關的標頭檔案和動態庫

#define unicode

#ifndef ulong_ptr

#define ulong_ptr unsigned long*

#endif

#include "gdiplus\\includes\\gdiplus.h"   modify your path

using namespace gdiplus; 

#pragma comment(lib, "gdiplus\\lib\\gdiplus.lib") //modify your lib path

3.新增公有成員變數:

int m_kind;

int cx;

bool updatedisplay(int transparent=255);

hinstance hfuncinst ;

typedef bool (winapi *myfunc)(hwnd,hdc,

point*,size*,hdc,point*,colorref,blendfunction*,dword);         

myfunc updatelayeredwindow;

blendfunction m_blend;

hdc m_hdcmemory;

4.新增私有成員變數:

bool m_bback;

gdiplusstartupinput gdiplusstartupinput;

ulong_ptr           gdiplustoken;

5.在建構函式中初始化如下成員變數:

m_bback=false;

m_kind=cx=0;

gdiplusstartup(&gdiplustoken, &gdiplusstartupinput, null);

6.為對話方塊新增oncreate函式,並編輯**如下:

hfuncinst = loadlibrary("user32.dll");

bool bret=false;

if(hfuncinst)

updatelayeredwindow=(myfunc)getprocaddress(hfuncinst, "updatelayeredwindow");

else

// initialize gdi+.

m_blend.blendop=0; //theonlyblendopdefinedinwindows2000

m_blend.blendflags=0; //nothingelseisspecial...

m_blend.alphaformat=1; //...

m_blend.sourceconstantalpha=255;//ac_src_alpha

7.實現其成員函式updatadisplay

[cpp]view plain

copy

bool

clyricdlg::updatedisplay(

inttransparent)  

;  //建立2個相容dc的畫筆,graphics類在gdi+中定義

graphics graph(m_hdcmemory);  

graphics graphics(m_hdcmemory);  

//設定平滑模式

graphics.setsmoothingmode(smoothingmodeantialias);  

graphics.setinterpolationmode(interpolationmodehighqualitybicubic);  

//設定字型,fontfamily也在gdi+中定義

fontfamily fontfamily(l"arial black"

);  

stringformat strformat;  

//獲取系統時間

ctime time=ctime::getcurrenttime();  

cstring timestr=time.format("%h-%m-%m"

);  

wchar_t

pszbuf[80]=,  

,  },  

,    

};  

//建立乙個畫筆的路徑

graphicspath path;  

path.addstring(pszbuf[m_kind],wcslen(pszbuf[m_kind]),&fontfamily,  

fontstyleregular,38,point(10,10),&strformat);  

//建立一支畫筆

pen pen(color(155,215,215,215),3);  

//畫筆畫出已經建立的路徑

graphics.drawpath(&pen,&path);  

/*畫出字型的邊緣部分*/

for(

inti=1; i<9; i+=1)  

solidbrush brush(color(25,228,228,228));  

pen pen1(color(155,223,223,223));  

pen pen2(color(55,223,223,223));    

image image(l"1.png"

);  

if(m_bback)

//畫背景和

//建立線性漸變畫刷

lineargradientbrush lingrbrush(  

point(0,0),point(0,90),  

color(255,255,255,255),  

color(255,30,120,195));  

lineargradientbrush lingrbrushw(  

point(0,10),point(0,60),  

color(255,255,255,255),  

color(15,1,1,1));  

//用線性漸變畫刷填充路徑

graphics.fillpath(&lingrbrush,&path);  

graphics.fillpath(&lingrbrushw,&path);  

//設定視窗的風格

dword

dwexstyle=getwindowlong(m_hwnd,gwl_exstyle);  

if((dwexstyle&0x80000)!=0x80000)  

setwindowlong(m_hwnd,gwl_exstyle,dwexstyle^0x80000);  

//更新視窗層

size sizewindow=;  

point ptsrc=;  

bool

bret=false;  

hdchdcscreen=::getdc (m_hwnd);  

//updatelayeredwindow功能是更新乙個視窗的位置、大小、形狀、內容和透明度

bret= updatelayeredwindow( m_hwnd,hdcscreen,&ptwinpos,  

&sizewindow,m_hdcmemory,&ptsrc,0,&m_blend,2);  

graph.releasehdc(m_hdcmemory);  

::releasedc(m_hwnd,hdcscreen);  

hdcscreen=null;  

::releasedc(m_hwnd,hdctemp);  

hdctemp=null;  

deleteobject(hbitmap);  

deletedc(m_hdcmemory);  

m_hdcmemory=null;  

return

bret;  

}   8.

新增ontimer(uint nidevent)訊息響應函式,編輯**如下:

cx+=1;

if(cx>20)

if(m_kind>3)

m_kind=0;

9.編輯oninitdialog()函式

// todo: add extra initialization here

updatedisplay();

settimer(1,50,null);

MFC用GDI 動感歌詞的製作

源 源 1.插入乙個對話方塊的資源,刪除預設控制項,並為對話方塊建立乙個類,命名為clyricdlg 2.在對話方塊的標頭檔案中新增gdi 相關的標頭檔案和動態庫 define unicode ifndef ulong ptr define ulong ptr unsigned long endif...

用MFC製作程式啟動logo

完了,這次土鱉了,介紹個非常過時的東西,其實就是自己收藏一下,怕以後想用的時候自己忘了。直接進入正題,首先用ps等工具做乙個自己喜歡的程式啟動的logo點陣圖,我這裡製作的logo大小為500 313,比例為 比例,看上去很舒服。新建mfc工程,把製作好的logo點陣圖新增的資源中去,資源id號設定...

利用FLASH MX製作動感的水中倒影

讓一幅普通的變成酷炫的,具有水中倒影效果的動畫,是每個動畫愛好者的心願,製作方法有很多種,今天本教程是教大家如何利用flash mx來製作動感的水中倒影動畫。好,我們開始!開啟flashmx,按ctrl n新建乙個文件,檔案 匯入 匯入一張汽車,如圖。按f8開啟如圖面板,將匯入的轉換成 car 元件...