找回密码
 加入
搜索
查看: 4303|回复: 8

[GUI管理] 【以解决】GuictrlcreatePic创建的图片窗口如何进行移动?

  [复制链接]
发表于 2014-3-15 16:49:56 | 显示全部楼层 |阅读模式
本帖最后由 Sunrise95 于 2014-3-17 08:31 编辑

如代码多示,我想用图片制作窗口,但是把图片放进去的时候,图片所在的区域无法移动。。。
   #include <GUIConstantsEx.au3>
   #include <WindowsConstants.au3>
   
   $Form1 = GUICreate("", 348, 195, 451, 409, $WS_POPUP)
   FileInstall("", @TempDir & "")
   Global $i = GUICtrlCreatePic(@TempDir & "",-1,90)
   GUISetState(@SW_SHOW)
   GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
   While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
   Case $GUI_EVENT_CLOSE
    Exit
   EndSwitch
   WEnd
   
   Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
   if ($hWnd = $Form1) and ($iMsg = $WM_NCHITTEST) then Return $HTCAPTION
   EndFunc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-3-15 19:35:23 | 显示全部楼层
估计你是想要这个效果吧
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Winapi.au3>
Global Const $SC_MOVE = 0xF010

$Form1 = GUICreate("", 348, 195, 451, 409, $WS_POPUP)
Global $i = GUICtrlCreatePic("1.bmp", -1, 90)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
$wProcOld = GUIRegisterMsgEx($i, "_MyWindowProc") ;窗口子类化

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd

Func GUIRegisterMsgEx($ctrID, $funcName) ;控件id,函数名
        Local $wProcNew = DllCallbackRegister($funcName, "ptr", "hwnd;uint;long;ptr")
        Local $wProcOld = _WinAPI_SetWindowLong(GUICtrlGetHandle($ctrID), -4, DllCallbackGetPtr($wProcNew))
        Return $wProcOld
EndFunc   ;==>GUIRegisterMsgEx

Func _MyWindowProc($hWnd, $uiMsg, $wParam, $lParam)
        Switch $uiMsg
                Case 512 ;$WM_MOUSEMOVE
                        If ($wParam=0x0001) Then
                                _SendMessage($Form1, $WM_SYSCOMMAND, $SC_MOVE + $HTCAPTION, 0)
                        EndIf
        EndSwitch
        ;向默认窗口进程传递未处理过的消息
        Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $uiMsg, $wParam, $lParam)
EndFunc   ;==>_MyWindowProc

Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
        If ($hWnd = $Form1) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
EndFunc   ;==>WM_NCHITTEST
发表于 2014-3-15 19:53:11 | 显示全部楼层
精简下,好多消息au3可以自己处理
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global Const $SC_MOVE = 0xF010

$Form1 = GUICreate("", 348, 195, 451, 409, $WS_POPUP)
Global $i = GUICtrlCreatePic("1.bmp", -1, 90)
GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $i,$GUI_EVENT_PRIMARYDOWN
                        DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $Form1, "uint", $WM_SYSCOMMAND,"wparam",$SC_MOVE + $HTCAPTION,"lparam",0)
        EndSwitch
WEnd
发表于 2014-3-16 04:22:45 | 显示全部楼层
回复 3# 风行者
_SendMessage($Form1,$WM_NCLBUTTONDOWN,$HTCAPTION,0);
其实这样就行了
 楼主| 发表于 2014-3-16 20:26:46 | 显示全部楼层
回复 3# 风行者


   
   正是我要的,谢谢呀!
发表于 2014-3-17 09:05:31 | 显示全部楼层
多谢各位大侠了,学习到了。
发表于 2014-3-21 19:00:36 | 显示全部楼层
学习了。。。
发表于 2014-8-31 23:39:17 | 显示全部楼层
学习到了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-18 15:37 , Processed in 0.082242 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表