.版本 2
.支持库 spec
.支持库 eAPI
.程序集 窗口程序集_启动窗口
.程序集变量 m_token, 整数型
.程序集变量 m_hdc, 整数型
.程序集变量 m_graphics, 整数型
.程序集变量 m_solidBrush, 整数型
.程序集变量 GdiStartupInput, GdiplusStartupInput
.程序集变量 OldWndProc, 整数型
.子程序 __启动窗口_创建完毕
GdiStartupInput.GdiplusVersion = 2
GdiplusStartup (m_token, GdiStartupInput, 0)
' 在什么窗口上绘制 m_hdc
调试输出 (m_token)
m_hdc = GetDC (取窗口句柄 ())
OldWndProc = SetWindowLongA (取窗口句柄 (), #GWL_WNDPROC, 到整数 (&窗口回调函数))
自绘颜色表 ()
.子程序 __启动窗口_将被销毁
GdiplusShutdown (m_token)
' 窗口销毁 ,关闭GDI+
.子程序 自绘颜色表
.局部变量 行, 整数型
.局部变量 列, 整数型
.局部变量 rect, 矩形数据
.局部变量 nColor, 整数型
.局部变量 hBrush, 整数型
.局部变量 d, 整数型
.局部变量 c, 小数型
.局部变量 a, 整数型
.局部变量 b, 整数型
' GdipCreateFromHDC (m_hdc, m_graphics)
' GdipCreateFromHwnd()
GdipCreateFromHWND (取窗口句柄 (), m_graphics)
' 颜色代码的公式如下
.变量循环首 (255, 127, -1, d)
c = (2 × d - 255) ÷ 40
.变量循环首 (1, 240, 1, a)
.判断开始 (a < 40)
b = 取颜色值 (d, (a - 1) × c + 255 - d, 255 - d)
.判断 (a ≥ 40 且 a < 80)
b = 取颜色值 (d - (a - 40) × c, d, 255 - d)
.判断 (a ≥ 80 且 a < 120)
b = 取颜色值 (255 - d, d, (a - 80) × c + 255 - d)
.判断 (a ≥ 120 且 a < 160)
b = 取颜色值 (255 - d, d - (a - 120) × c, d)
.判断 (a ≥ 160 且 a < 200)
b = 取颜色值 ((a - 160) × c + 255 - d, 255 - d, d)
.判断 (a ≥ 200 且 a ≤ 240)
b = 取颜色值 (d, 255 - d, d - (a - 200) × c)
.默认
.判断结束
' //创建实心画刷
GdipCreateSolidFill (RGB2ARGB (b, 255), m_solidBrush)
' //填充矩形
GdipFillRectangle (m_graphics, m_solidBrush, a, 256 - d, 1, 1)
' //删除创建的画刷
GdipDeleteBrush (m_solidBrush)
.变量循环尾 ()
.变量循环尾 ()
GdipDeleteGraphics (m_graphics)
' //销毁GDI+图形对象
.子程序 RGB2ARGB, 整数型, , 转换成GDI 的颜色值
.参数 RGB颜色, 整数型
.参数 透明度, 整数型, 可空, 0-255
.局部变量 Color, 字节集
.如果真 (是否为空 (透明度))
透明度 = 255
.如果真结束
Color = 到字节集 (RGB颜色)
RGB颜色 = 位或 (Color [3] + Color [2] × 256 + Color [1] × 65536, 左移 (透明度, 24))
返回 (RGB颜色)
.子程序 ARGB, 整数型, 公开
.参数 R, 整数型
.参数 G, 整数型
.参数 B, 整数型
.参数 A, 整数型
返回 (B + 左移 (G, 8 × 1) + 左移 (R, 8 × 2) + 左移 (A, 8 × 3))
.子程序 窗口回调函数, 整数型
.参数 hwnd, 整数型
.参数 msg, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.局部变量 ps, PAINTSTRUCT
.局部变量 rect, 矩形数据
.如果真 (msg = #WM_PAINT)
BeginPaint (hwnd, ps)
GetClientRect (hwnd, rect)
FillRect (m_hdc, rect, GetStockObject (#WHITE_BRUSH))
自绘颜色表 ()
EndPaint (hwnd, ps)
返回 (0)
.如果真结束
返回 (CallWindowProcA (OldWndProc, hwnd, msg, wParam, lParam))
填充矩形,给每个矩形填充不同的颜色。颜色是从官方论坛神2抄的。他那个是用画板实现的。不知道这样发违规的,我写的不知道咋适应大小。 |