实现无边框窗口
在界面初始化函数中调用以下语句:
System::Call 'user32::SetWindowLong(i$HWNDPARENT,i${GWL_STYLE},0x9480084C)i.R0'
实现无边框窗口的拖动
步骤:
1.定义回调函数需要的信息变量;
;MSG变量必须定义并且放在最前面,否则回调函数不工作,可能是插件中需要这个消息变量,用于记录消息信息
Var MSG
2.添加使用回调函数所需的头文件;
;添加头文件所在路径,这个文件夹和.nsi文件在同一目录
!AddIncludeDir "include"
;这个头文件放在include文件夹下面
!include "WinCore.nsh" ;回调函数用
3.添加使用回调函数所需的插件;
;添加插件所在路径,这个文件夹和.nsi文件在同一目录
!addplugindir "plugins"
然后把WndProc.dll这个插件文件放到plugins文件夹下。
4.实现回调函数;
Function onGUICallback
${If} $MSG = ${WM_LBUTTONDOWN}
SendMessage $HWNDPARENT ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0
${EndIf}
FunctionEnd
5.在需要的地方调用回调函数;
类似:
;安装完成界面
Function installFinishPage
nsDialogs::Create 1044
Pop $0
${If} $0 == error
Abort
${EndIf}
;背景图片-----------------------------------------
${NSD_CreateBitmap} 0 0 100% 100% ""
Pop $m_currentBgImage
${NSD_SetImage} $m_currentBgImage $PLUGINSDIR\finishBg.bmp $m_currentBgImageHandle
GetFunctionAddress $0 onGUICallback
WndProc::onCallback $m_currentBgImage $0 ;处理无边框窗体移动
nsDialogs::Show
${NSD_FreeImage} $m_currentBgImageHandle
FunctionEnd