静态控件背景透明
静态控件背景透明,能够完美的将字体显示到背景中去。
在实际应用中也是非常常用的。
赶紧拿去学习吧。。。。。。。。
主要代码:
// TransparentWindow.cpp : Defines the entry point for the application.
//
/*
// 静态控件背景透明化
//By MoreWindows-(http://blog.csdn.net/MoreWindows)
#include <windows.h>
#include "resource.h"
const char szDlgTitle[] = "静态控件背景透明化 MoreWindows-(http://blog.csdn.net/MoreWindows)";
// 对话框消息处理函数
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)
{
RECT rcDialog;
HBITMAP hBitmap;
static BITMAP s_bm;
static HDC s_hdcMem;
switch (message)
{
case WM_INITDIALOG:
// 设置对话框标题
SetWindowText(hDlg, szDlgTitle);
// 设置对话框大小可调节
SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_SIZEBOX);
// 加载背影图片
hBitmap = (HBITMAP)LoadImage(NULL, "006.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hBitmap == NULL)
{
MessageBox(hDlg, "LoadImage failed", "Error", MB_ICONERROR);
exit(0);
}
else
{
// 将背影图片放入HDC - s_hdcMem
HDC hdc;
hdc = GetDC(hDlg);
s_hdcMem = CreateCompatibleDC(hdc);
SelectObject(s_hdcMem, hBitmap);
ReleaseDC(hDlg, hdc);
// 得到位图信息
GetObject(hBitmap, sizeof(s_bm), &s_bm);
}
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDCANCEL:
DeleteDC(s_hdcMem);
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_SIZE:
InvalidateRect(hDlg, NULL, TRUE);
return TRUE;
case WM_CTLCOLORDLG:
GetClientRect(hDlg, &rcDialog);
//通过SetStretchBltMode的设置能使StretchBlt在缩放图像更加清晰
SetStretchBltMode((HDC)wParam, COLORONCOLOR);
StretchBlt((HDC)wParam, 0, 0, rcDialog.right, rcDialog.bottom, s_hdcMem, 0, 0, s_bm.bmWidth, s_bm.bmHeight, SRCCOPY);
return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));
}
return FALSE;
}
*/
// 静态控件背景透明化1 WM_CTLCOLORSTATIC中返回空画刷
//By MoreWindows-(http://blog.csdn.net/MoreWindows)
#include <windows.h>
#include "resource.h"
const char szDlgTitle[] = "静态控件背景透明化1 MoreWindows-(http://blog.csdn.net/MoreWindows)";
// 对话框消息处理函数
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)
{
RECT rcDialog;
HBITMAP hBitmap;
static BITMAP s_bm;
static HDC s_hdcMem;
switch (message)
{
case WM_INITDIALOG:
// 设置对话框标题
SetWindowText(hDlg, szDlgTitle);
// 设置对话框大小可调节
SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_SIZEBOX);
// 加载背影图片
hBitmap = (HBITMAP)LoadImage(NULL, "006.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hBitmap == NULL)
{
MessageBox(hDlg, "LoadImage failed", "Error", MB_ICONERROR);
exit(0);
}
else
{
// 将背影图片放入HDC - s_hdcMem
HDC hdc;
hdc = GetDC(hDlg);
s_hdcMem = CreateCompatibleDC(hdc);
SelectObject(s_hdcMem, hBitmap);
ReleaseDC(hDlg, hdc);
// 得到位图信息
GetObject(hBitmap, sizeof(s_bm), &s_bm);
}
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDCANCEL:
DeleteDC(s_hdcMem);
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_SIZE:
InvalidateRect(hDlg, NULL, TRUE);
return TRUE;
case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam, TRANSPARENT);
return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));
case WM_CTLCOLORDLG:
GetClientRect(hDlg, &rcDialog);
//通过SetStretchBltMode的设置能使StretchBlt在缩放图像更加清晰
SetStretchBltMode((HDC)wParam, COLORONCOLOR);
StretchBlt((HDC)wParam, 0, 0, rcDialog.right, rcDialog.bottom, s_hdcMem, 0, 0, s_bm.bmWidth, s_bm.bmHeight, SRCCOPY);
return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));
}
return FALSE;
}
/*
// 静态控件背景透明化2 - 在WM_CTLCOLORDLG返回窗口背景的位图画刷
//By MoreWindows-(http://blog.csdn.net/MoreWindows)
#include <windows.h>
#include "resource.h"
const char szDlgTitle[] = "静态控件背景透明化2 MoreWindows-(http://blog.csdn.net/MoreWindows)";
// 对话框消息处理函数
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)
{
static HBRUSH s_hBitmapBrush; //位图画刷
switch (message)
{
case WM_INITDIALOG:
// 设置对话框标题
SetWindowText(hDlg, szDlgTitle);
// 设置对话框大小可调节
SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_SIZEBOX);
// 加载背影图片
HBITMAP hBitmap;
hBitmap = (HBITMAP)LoadImage(NULL, "006.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hBitmap == NULL)
{
MessageBox(hDlg, "LoadImage failed", "Error", MB_ICONERROR);
exit(0);
}
// 创建位图画刷
s_hBitmapBrush = CreatePatternBrush(hBitmap);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDCANCEL:
DeleteObject(s_hBitmapBrush);
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam, TRANSPARENT);
case WM_CTLCOLORDLG:
return (BOOL)s_hBitmapBrush;
}
return FALSE;
}
*/
效果图:
程序和源代码链接:
http://download.csdn.net/download/zhangxiaoyu_sy/9961978
还没有评论,来说两句吧...