8,325
社区成员




hWnd = CreateWindowEx(WS_EX_LAYERED, ...);
::SetLayeredWindowAttributes(hWnd, 0xFFFFFF, 0, LWA_COLORKEY); // LWA_COLORKEY使指定关键色半透明
#include <windows.h>
#include <tchar.h>
#define WND_WIDTH 1024
#define WND_HEIGHT 768
#define WND_CLASSNAME _T("MainWnd")
#define WND_TITLENAME _T("Test")
void MainLoop();
LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
HWND g_hWnd = NULL;
//------------------------------------------------------
// 程序入口
//------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, PSTR cmdLine, int nCmdShow)
{
HWND hWnd = NULL;
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = WND_CLASSNAME;
if (!RegisterClass(&wc))
return 0;
DWORD wndStyle = WS_OVERLAPPEDWINDOW & (~WS_MAXIMIZEBOX) & (~WS_SIZEBOX); // 无标题栏:WS_POPUP | WS_MINIMIZEBOX | WS_SYSMENU;
RECT rcWnd = { 0, 0, WND_WIDTH, WND_HEIGHT };
AdjustWindowRect(&rcWnd, wndStyle, FALSE);
hWnd = CreateWindowEx(WS_EX_LAYERED,
WND_CLASSNAME,
WND_TITLENAME,
wndStyle,
(GetSystemMetrics(SM_CXSCREEN)-WND_WIDTH)/2, // SM_CXSCREEN:以像素为单位的屏幕的宽度
(GetSystemMetrics(SM_CYSCREEN)-WND_HEIGHT)/2, // SM_CYSCREEN:以像素为单位的屏幕的高度
(rcWnd.right-rcWnd.left), (rcWnd.bottom-rcWnd.top),
NULL,
NULL,
hInstance,
NULL);
// ::SetLayeredWindowAttributes(hWnd, 0, 100, LWA_ALPHA); // LWA_ALPHA使整个窗口半透明
::SetLayeredWindowAttributes(hWnd, 0xFFFFFF, 0, LWA_COLORKEY); // LWA_COLORKEY使指定关键色半透明
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
g_hWnd = hWnd;
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while (TRUE)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
MainLoop();
}
UnregisterClass(WND_CLASSNAME, hInstance);
return 0;
}
void MainLoop()
{
HDC hdc = GetDC(g_hWnd);
SetTextColor(hdc, RGB(0, 0,0));
SetBkMode(hdc, TRANSPARENT);
char szText[256] = "布武天下,唯魂致精!abcdg";
TextOutA(hdc, 200, 300, szText, strlen(szText));
ReleaseDC(g_hWnd, hdc);
}
LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
::SetLayeredWindowAttributes(GetSafeHwnd(), 0, AlfValue, LWA_ALPHA);
//鼠标点击穿透开关
void CPicDlg::OnBnClickedCheck1()
{
// TODO: 在此添加控件通知处理程序代码
DWORD Style,
ExStyle = ::GetWindowLong(pPicShowDlg->GetSafeHwnd(), GWL_EXSTYLE);
if (ExStyle&WS_EX_TRANSPARENT)
{
Style = /*WS_SIZEBOX|*/WS_POPUP|WS_SYSMENU;
ExStyle &= ~WS_EX_TRANSPARENT;
}
else
{
Style = WS_POPUP|WS_SYSMENU;
ExStyle |= WS_EX_TRANSPARENT;
}
::SetWindowLong(pPicShowDlg->GetSafeHwnd(), GWL_STYLE, Style);
::SetWindowLong(pPicShowDlg->GetSafeHwnd(), GWL_EXSTYLE, ExStyle);
::PostMessage(pPicShowDlg->GetSafeHwnd(), WM_SYSCOMMAND, SC_MINIMIZE, 0);
::PostMessage(pPicShowDlg->GetSafeHwnd(), WM_SYSCOMMAND, SC_RESTORE, 0);
}