【以解决】GuictrlcreatePic创建的图片窗口如何进行移动?
本帖最后由 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 估计你是想要这个效果吧
#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 精简下,好多消息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
回复 3# 风行者
_SendMessage($Form1,$WM_NCLBUTTONDOWN,$HTCAPTION,0);
其实这样就行了 回复 3# 风行者
{:face (190):}
正是我要的,谢谢呀! 多谢各位大侠了,学习到了。 学习了。。。 学习到了。
页:
[1]