// 系统版本
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx
// Windows Server 2003 with SP1, Windows XP with SP2_WIN32_WINNT_WS03 (0x0502)
#define _WIN32_WINNT 0x0502
// VC6.0可能会要加的宏名
#define WS_EX_LAYERED 0x80000
#define LWA_ALPHA 0x2
#define LWA_COLORKEY 0x1
// 字符转整数
int myatoi(char *s)
// 调用Show方法
void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variables, stack_t **stacktop)
// 可在DLL中调用的变量,寄存器变量初始化
EXDLL_INIT();
// 获得系统版本,Windows 2000 or Windows XP 的版本是 5
GetVersion()
// 有关设备初始化信息,dmBitsPerPel 指定了显示设备的颜色分辨率,以像素的位数为单位。
DEVMODE
//在VC6中调用SetLayeredWindowAttributes时,要先定义_WIN32_WINNT这个宏的值,用于确定操作系统。如:
//当 _WIN32_WINNT >= 0x0500时,才能连接得到SetLayeredWindowAttributes函数。
//需要定义在windows.h的前面
#define _WIN32_WINNT 0x0500
#include "windows.h"
// 设置窗口的透明度
/*
dwFlags :
当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效。
当取值为LWA_COLORKEY时,窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。
也可以取两个值的组合:LWA_ALPHA | LWA_COLORKEY。这样crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。
*/
BOOL SetLayeredWindowAttributes(
HWND hwnd, // 透明窗体的句柄
COLORREF crKey, // 掩码的颜色
BYTE bAlpha, // 不透明度
DWORD dwFlags // 透明方式
);
/*窗口透明度实例 begin*/
#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
const int X0 = 120;
const int Y0 = 50;
const int WIDTH = 800;
const int HEIGHT = 600;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
HWND hWnd;
MSG msg;
TCHAR lpszClassName[] = TEXT("窗口");
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = ::LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor = ::LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = lpszClassName;
RegisterClass(&wc);
hWnd = CreateWindow(lpszClassName,
TEXT("Windows"),
WS_OVERLAPPEDWINDOW,
X0, Y0, WIDTH, HEIGHT,
NULL,
NULL,
hInstance,
NULL);
::ShowWindow(hWnd, SW_SHOWNORMAL);
::UpdateWindow(hWnd);
// 实现透明必须设置WS_EX_LAYERED标志
LONG nRet = ::GetWindowLong(hWnd, GWL_EXSTYLE);
nRet = nRet | WS_EX_LAYERED;
::SetWindowLong(hWnd, GWL_EXSTYLE, nRet);
while(::GetMessage(&msg, NULL, 0, 0))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_LBUTTONDOWN:
{
::MessageBeep(0);
::SetLayeredWindowAttributes(hWnd, 0, 123, LWA_ALPHA); // 设置半透明
}
break;
case WM_RBUTTONDOWN:
{
::MessageBeep(0);
::SetLayeredWindowAttributes(hWnd, 0, 255, LWA_ALPHA); // 设置不透明
}
break;
case WM_DESTROY:
::PostQuitMessage(0);
break;
default:
return ::DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
/*窗口透明度实例 end*/
© 版权声明
THE END
暂无评论内容