// 系统版本
// 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*/
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。丨本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途。丨本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
BY-NC-SA协议进行授权
转载请注明:永恒心锁-分享互联网 » NSIS源码AdvSplash学习笔记