是否可以繪製到NSIS中的靜態控件?如果這是我如何去聲明變量,如PAINTSTRUCT
等?我可以在普通的C中輕鬆地做到這一點,但使用NSIS和彙編類型語言正在拋出我。可能在NSIS中繪製窗口,如何聲明WinAPI類型的變量?
下面我想畫上一個靜態控件邊框:
Var MainWndSubProc
Function MainWndSubProc
${If} $2 = ${WM_DRAWITEM}
# I'm assuming $3 = the WPARAM and $4 = LPARAM?
$LOWORD $R0 $3 # get id of window we are painting
${If} $R0 == $myStaticId
# C code which works: how to translate to NSIS 'assembly'?
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(args.hwnd, &ps);
RECT mRect;
GetClientRect(args.hwnd, &mRect);
HBRUSH brush = CreateSolidBrush(RGB(50, 50, 50));
HPEN pen = CreatePen(PS_SOLID, 5, RGB(191, 191, 191));
SelectObject(hdc, pen);
SelectObject(hdc, brush);
Rectangle(hdc, 0, 0, mRect.right, mRect.bottom);
DeleteObject(pen);
DeleteObject(brush);
EndPaint(args.hwnd, &ps);
# NSIS translation
# how to declare PAINTSTRUCT
$LOWORD $R0 $4
System::Call `user32::BeginPaint(i $R0, i R1)`
.. ?
${EndIf}
${EndIf}
FunctionEnd
Function MyGUIInit
${WndSubclass_Subclass} $HWNDPARENT MainWndSubProc $MainWndSubProc $MainWndSubProc
FunctionEnd
通過他們的文檔挖掘我什麼都看不到,但他們的文檔網站確實有[幾個完整的安裝程序](http://nsis.sourceforge.net/Category:Real_World_Installers)可以做到這一點。 [WndSubclass](http://nsis.sourceforge.net/WndSubclass_plug-in)插件可能具有您需要的功能,但我懷疑它。所有的事情都是平等的,如果這是我的項目,我可能會寫一個插件來完成所有繁重的工作。 – theB