MFC用GDI 動感歌詞的製作

2021-08-26 19:49:17 字數 3970 閱讀 7485

源**:

源**: 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

bool clyricdlg::updatedisplay(int transparent)

; //建立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(int i=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;

hdc hdcscreen=::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 元件...