找回密码
 加入
搜索
楼主: afan

[原创] 印章图生成 1.9

 火.. [复制链接]
发表于 2019-9-2 14:38:28 | 显示全部楼层
afan 发表于 2019-8-31 10:47
GUIRegisterMsg 注册 $WM_NOTIFY 消息,并在消息中处理

如何注册,请教一下
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)

        ;如何得到Slider的句柄

        Switch $hWnd
                Case $idSlider1
                        MsgBox($MB_SYSTEMMODAL, "滑块值", _GUICtrlSlider_GetPos($idSlider1), 2)
                        GUICtrlSetData($Label, '滑块值 ' & _GUICtrlSlider_GetPos($idSlider1))
                Case $idSlider2
                        MsgBox($MB_SYSTEMMODAL, "滑块值", _GUICtrlSlider_GetPos($idSlider2), 2)
                Case $idSlider3
                        MsgBox($MB_SYSTEMMODAL, "滑块值", _GUICtrlSlider_GetPos($idSlider2), 2)
        EndSwitch
EndFunc   ;==>WM_NOTIFY

 楼主| 发表于 2019-9-2 15:15:12 | 显示全部楼层
chzj589 发表于 2019-9-2 14:38
如何注册,请教一下
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)

帮助搜索 _GUICtrlSlider_Create()
发表于 2019-9-2 16:11:58 | 显示全部楼层
afan 发表于 2019-9-2 15:15
帮助搜索 _GUICtrlSlider_Create()

谢谢!己学会了!
发表于 2019-9-3 21:27:36 | 显示全部楼层
本帖最后由 chzj589 于 2019-9-3 21:29 编辑
afan 发表于 2019-9-2 15:15
帮助搜索 _GUICtrlSlider_Create()

用:Case $NM_CUSTOMDRAW,可及时响应,但按下滑动控件拖动时,窗口会闪烁。
不知是什么原因?请帮忙看看

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndSlider, $hWndFrom1, $hWndSlider1, $hWndFrom1, $hWndSlider1, $hWndSlider2
        $hWndSlider = $g_hSlider
        If Not IsHWnd($g_hSlider) Then $hWndSlider = GUICtrlGetHandle($g_hSlider)
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
                Case $hWndSlider
                        Switch $iCode
                                Case $NM_RELEASEDCAPTURE ; 控件释放鼠标捕获
                                        _DebugPrint("$NM_RELEASEDCAPTURE" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                                                        "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                                                        "-->操作代码:" & @TAB & $iCode)
                                        $g = _GUICtrlSlider_GetPos($g_hSlider)
                                        GUICtrlSetData($Input1, $g)
                                        Local $Label = GUICtrlCreateLabel($g, 305, 50, 70, 20)
                                        ;_Debug()
                                        #cs
                                Case $NM_CUSTOMDRAW
                                        $g = _GUICtrlSlider_GetPos($g_hSlider)
                                        GUICtrlSetData($Input1, $g)

                                        #ce
                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY        



 楼主| 发表于 2019-9-3 22:08:09 | 显示全部楼层
chzj589 发表于 2019-9-3 21:27
用:Case $NM_CUSTOMDRAW,可及时响应,但按下滑动控件拖动时,窗口会闪烁。
不知是什么原因?请帮忙看 ...

不太清楚,闪烁一般是窗口重绘的过程。如果你拖动时有关联那就是在重绘窗口。
发表于 2019-9-7 10:23:10 | 显示全部楼层
afan 发表于 2019-9-3 22:08
不太清楚,闪烁一般是窗口重绘的过程。如果你拖动时有关联那就是在重绘窗口。

我鼠标划过滑动条(Slider)控件为何就响应,看你的需要按下才响应?
$WM_NOTIFY 消息要如何处理?请赐教!谢谢!
 楼主| 发表于 2019-9-7 10:38:59 | 显示全部楼层
chzj589 发表于 2019-9-7 10:23
我鼠标划过滑动条(Slider)控件为何就响应,看你的需要按下才响应?
$WM_NOTIFY 消息要如何处理?请赐教 ...

判断鼠标是否处于按下状态即可,如 GUIGetCursorInfo()
发表于 2019-9-7 19:04:45 | 显示全部楼层
afan 发表于 2019-9-7 10:38
判断鼠标是否处于按下状态即可,如 GUIGetCursorInfo()

谢谢!搞定。 
发表于 2019-9-22 19:43:36 | 显示全部楼层
afan 发表于 2019-8-31 10:47
GUIRegisterMsg 注册 $WM_NOTIFY 消息,并在消息中处理

A版,请问GUIRegisterMsg 注册 $WM_NOTIFY 消息,如何消息中处理?
我这样处理,拖动一个时,其它都会闪烁,请指点

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
        Local $hWndSlider8, $hWndSlider9
        $hWndSlider = $banjingxc
        If Not IsHWnd($banjingxc) Then $hWndSlider = GUICtrlGetHandle($banjingxc)
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        $a = GUIGetCursorInfo("Code")
        Switch $hWndFrom
                Case $hWndSlider
                        Switch $iCode
                                Case $NM_CUSTOMDRAW
                                        If $a[2] = 0 Then
                                        Else        
                                        ;五星缩放()
                                        ;上弧宽度()
                                        ;下弧宽度()
                        EndSwitch
                EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY                
 楼主| 发表于 2019-9-22 21:28:01 | 显示全部楼层
chzj589 发表于 2019-9-22 19:43
A版,请问GUIRegisterMsg 注册 $WM_NOTIFY 消息,如何消息中处理?
我这样处理,拖动一个时,其它都会闪 ...

这里看不出问题。就像上面所说,闪烁一般是绘图造成的。如果把绘图部分注释掉,仍然闪烁,那还好看出问题。光这里看不出,无可测试的代码,也重现不了问题。
发表于 2019-9-22 21:30:47 | 显示全部楼层
afan 发表于 2019-9-22 21:28
这里看不出问题。就像上面所说,闪烁一般是绘图造成的。如果把绘图部分注释掉,仍然闪烁,那还好看出问题 ...

也就是说注册$WM_NOTIFY 消息,这样处理可行? 
 楼主| 发表于 2019-9-22 21:32:11 | 显示全部楼层
chzj589 发表于 2019-9-22 21:30
也就是说注册$WM_NOTIFY 消息,这样处理可行? 

可行。虽说代码不全,看上去没问题
发表于 2019-9-22 21:43:16 | 显示全部楼层
afan 发表于 2019-9-22 21:32
可行。虽说代码不全,看上去没问题

单五星缩放代码,单上弧宽度代码,单下弧宽度代码都不会闪烁。
问题是三个代码没一起放的话,就缺少没放的图。
 楼主| 发表于 2019-9-22 21:48:15 | 显示全部楼层
chzj589 发表于 2019-9-22 21:43
单五星缩放代码,单上弧宽度代码,单下弧宽度代码都不会闪烁。
问题是三个代码没一起放的话,就缺少没放 ...

那就肯定不是这里的问题了。
你的问题还是绘图更新到控件的问题,因为你可能更新一次需要设置到控件3次,这样肯定闪烁。
搜索双缓冲,研究下
发表于 2019-9-22 21:54:10 | 显示全部楼层
afan 发表于 2019-9-22 21:48
那就肯定不是这里的问题了。
你的问题还是绘图更新到控件的问题,因为你可能更新一次需要设置到控件3次 ...

谢谢!这样就有头绪了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 21:03 , Processed in 0.070714 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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