NSIS:实现无边框窗口的拖动

实现无边框窗口

在界面初始化函数中调用以下语句:

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

猜你喜欢

转载自blog.csdn.net/chase_hung/article/details/81411028