UpdateLayeredWindow 绘制异型窗口
//設置頭文件
#include "Gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib,"Gdiplus.lib")
//在...app.h中
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR?????????? gdiplusToken;
//初始化
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
//系統界面的消息循環
CGdiPlusTestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
//關閉gdiplus的環境
??????? GdiplusShutdown(gdiplusToken);
?
BOOL CGdiPlusTestDlg::UpdateWindow()
{
??? HDC hdc=::GetDC(m_hWnd);
??? HDC hdcMem=::CreateCompatibleDC(hdc);
??? HBITMAP hBmp=::CreateCompatibleBitmap(hdc,200,200);
??? ::SelectObject(hdcMem,hBmp);
??? Graphics g(hdcMem);
??? Image img(L"C://ClockBackchain1.png");
??? g.DrawImage(&img,0,0,200,200);
??? CRect rc;
??? GetWindowRect(&rc);
??? POINT ptWindow={rc.left,rc.top};
??? SIZE szWindow={200,200};
??? POINT ptSrc={0,0};
??? BLENDFUNCTION blend;
??? blend.SourceConstantAlpha=255;
??? blend.BlendFlags = 0;
??? blend.BlendOp=0;
??? blend.AlphaFormat=1;
??? DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
??? if((dwExStyle&0x80000)!=0x80000)
??????? SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);
??? BOOL nRet =::UpdateLayeredWindow(m_hWnd,hdc,&ptWindow,&szWindow,hdcMem,
??????? &ptSrc,0,&blend,2);
??? ::DeleteDC(hdcMem);
??? ::ReleaseDC(m_hWnd,hdc);
??? return TRUE;
}
void CGdiPlusTestDlg::OnTimer(UINT nIDEvent)
{
??? UpdateWindow();
??? CDialog::OnTimer(nIDEvent);
}
總結
以上是生活随笔為你收集整理的UpdateLayeredWindow 绘制异型窗口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创建透明窗口及其应用--屏幕画笔
- 下一篇: vc2005编译过程中没有找到MFC80