chzj589 发表于 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

afan 发表于 2019-9-2 15:15:12

chzj589 发表于 2019-9-2 14:38
如何注册,请教一下
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)



帮助搜索 _GUICtrlSlider_Create()

chzj589 发表于 2019-9-2 16:11:58

afan 发表于 2019-9-2 15:15
帮助搜索 _GUICtrlSlider_Create()

谢谢!己学会了!

chzj589 发表于 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      



afan 发表于 2019-9-3 22:08:09

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

不太清楚,闪烁一般是窗口重绘的过程。如果你拖动时有关联那就是在重绘窗口。

chzj589 发表于 2019-9-7 10:23:10

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

我鼠标划过滑动条(Slider)控件为何就响应,看你的需要按下才响应?
$WM_NOTIFY 消息要如何处理?请赐教!谢谢!

afan 发表于 2019-9-7 10:38:59

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

判断鼠标是否处于按下状态即可,如 GUIGetCursorInfo()

chzj589 发表于 2019-9-7 19:04:45

afan 发表于 2019-9-7 10:38
判断鼠标是否处于按下状态即可,如 GUIGetCursorInfo()

谢谢!搞定。 

chzj589 发表于 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 = 0 Then
                                        Else       
                                        ;五星缩放()
                                        ;上弧宽度()
                                        ;下弧宽度()
                        EndSwitch
                EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY               

afan 发表于 2019-9-22 21:28:01

chzj589 发表于 2019-9-22 19:43
A版,请问GUIRegisterMsg 注册 $WM_NOTIFY 消息,如何消息中处理?
我这样处理,拖动一个时,其它都会闪 ...

这里看不出问题。就像上面所说,闪烁一般是绘图造成的。如果把绘图部分注释掉,仍然闪烁,那还好看出问题。光这里看不出,无可测试的代码,也重现不了问题。

chzj589 发表于 2019-9-22 21:30:47

afan 发表于 2019-9-22 21:28
这里看不出问题。就像上面所说,闪烁一般是绘图造成的。如果把绘图部分注释掉,仍然闪烁,那还好看出问题 ...

也就是说注册$WM_NOTIFY 消息,这样处理可行? 

afan 发表于 2019-9-22 21:32:11

chzj589 发表于 2019-9-22 21:30
也就是说注册$WM_NOTIFY 消息,这样处理可行? 
可行。虽说代码不全,看上去没问题

chzj589 发表于 2019-9-22 21:43:16

afan 发表于 2019-9-22 21:32
可行。虽说代码不全,看上去没问题

单五星缩放代码,单上弧宽度代码,单下弧宽度代码都不会闪烁。
问题是三个代码没一起放的话,就缺少没放的图。

afan 发表于 2019-9-22 21:48:15

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

那就肯定不是这里的问题了。
你的问题还是绘图更新到控件的问题,因为你可能更新一次需要设置到控件3次,这样肯定闪烁。
搜索双缓冲,研究下

chzj589 发表于 2019-9-22 21:54:10

afan 发表于 2019-9-22 21:48
那就肯定不是这里的问题了。
你的问题还是绘图更新到控件的问题,因为你可能更新一次需要设置到控件3次 ...

谢谢!这样就有头绪了
页: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14
查看完整版本: 印章图生成 1.9