最新消息:

NSIS源码AdvSplash学习笔记

nsis 永恒心锁 2321浏览 0评论
// 系统版本
// 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学习笔记

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址