#include <windows.h>
#include <commctrl.h>
#include "resource.h"
const char szDlgTitle[] = "可變透明度窗體";
// 對話框消息處理函數(shù)
BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
const int INIT_TRANSPARENT = 200; //窗體初始透明度
static HBRUSH s_hBitmapBrush; //位圖畫刷
switch (message)
{
case WM_INITDIALOG:
// 設(shè)置對話框標(biāo)題
SetWindowText(hDlg, szDlgTitle);
// 加載背影圖片
HBITMAP hBitmap;
hBitmap = (HBITMAP)LoadImage(NULL, "005.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hBitmap == NULL)
{
MessageBox(hDlg, "LoadImage failed", "Error", MB_ICONERROR);
exit(0);
}
// 創(chuàng)建位圖畫刷
s_hBitmapBrush = CreatePatternBrush(hBitmap);
// 設(shè)置分層屬性
SetWindowLong(hDlg, GWL_EXSTYLE, GetWindowLong(hDlg, GWL_EXSTYLE) | WS_EX_LAYERED);
// 設(shè)置透明度 0 - completely transparent 255 - opaque
SetLayeredWindowAttributes(hDlg, 0, INIT_TRANSPARENT, LWA_ALPHA);
// 設(shè)置滑動條變化范圍
SendMessage(GetDlgItem(hDlg, IDC_SLIDER_TRANSPARENT), TBM_SETRANGE, (WPARAM)FALSE, MAKELONG(0, 255));
// 設(shè)置滑塊初始位置
SendMessage(GetDlgItem(hDlg, IDC_SLIDER_TRANSPARENT), TBM_SETPOS, (WPARAM)TRUE, INIT_TRANSPARENT);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDCANCEL:
DeleteObject(s_hBitmapBrush);
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_HSCROLL: // slider control 滑塊位置有變化時的響應(yīng)函數(shù)
{
// 獲取當(dāng)前滑塊位置
int nTransparent = SendMessage(GetDlgItem(hDlg, IDC_SLIDER_TRANSPARENT), TBM_GETPOS, 0, 0);
// 設(shè)置新透明度
SetLayeredWindowAttributes(hDlg, 0, nTransparent, LWA_ALPHA);
}
break;
case WM_CTLCOLORDLG: //對話框背影
return (BOOL)s_hBitmapBrush;
}
return FALSE;
}