源代码:http://download.csdn.net/detail/nuptboyzhb/4219669
源代码:
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
{
AfxMessageBox("User32.dll ERROR!");
exit(0);
}
// 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)
-
- {
-
-
-
- HDC hdcTemp=GetDC()->m_hDC;
-
- m_hdcMemory=CreateCompatibleDC(hdcTemp);
-
- HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,755,350);
-
- SelectObject(m_hdcMemory,hBitMap);
-
-
-
- if(Transparent<0||Transparent>100) Transparent=100;
-
-
-
- m_Blend.SourceConstantAlpha=int(Transparent*2.55);
-
- RECT rct;
-
-
-
- GetWindowRect(&rct);
-
-
-
- POINT ptWinPos={rct.left,rct.top};
-
-
-
- Graphics graph(m_hdcMemory);
-
- Graphics graphics(m_hdcMemory);
-
-
-
- graphics.SetSmoothingMode(SmoothingModeAntiAlias);
-
- graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);
-
-
-
- FontFamily fontFamily(L"Arial Black");
-
- StringFormat strformat;
-
-
-
- CTime time=CTime::GetCurrentTime();
-
- CString timestr=time.Format("%H-%M-%M");
-
- wchar_t pszbuf[][80]={{L"http://blog.csdn.net/nuptboyzhb"},
-
- {L"南京邮电大学郑海波"},
-
- {L"I wish you will lead a happy life!"},
-
- {L"[email protected]"},
-
- {L"NUPT"}
-
- };
-
-
-
- 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)
-
- {
-
- Pen pen(Color(62, 0, 2, 2),(float)i);
-
- pen.SetLineJoin(LineJoinRound);
-
- graphics.DrawPath(&pen, &path);
-
- }
-
-
- 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)
-
- {
-
- graphics.FillRectangle(&brush,3,5,750,90);
-
- graphics.DrawRectangle(&pen1,2,6,751,91);
-
- graphics.DrawRectangle(&pen2,1,5,753,93);
-
- graphics.DrawImage(&image,600,5);
-
- }
-
-
-
- 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={755,350};
-
- POINT ptSrc={0,0};
-
- BOOL bRet=FALSE;
-
- HDC hdcScreen=::GetDC (m_hWnd);
-
-
-
- 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)
{
m_kind++;
m_bBack=false;
UpdateDisplay();
cx=0;
}
if(m_kind>3)
m_kind=0;
9. 编辑OnInitDialog()函数
// TODO: Add extra initialization here
UpdateDisplay();
SetTimer(1,50,NULL);