找回密码
 加入
搜索
查看: 4650|回复: 5

[GUI管理] 关于GUI中与用户交互中读取如何写函数问题?

[复制链接]
发表于 2012-11-10 20:48:33 | 显示全部楼层 |阅读模式
本帖最后由 blue_dvd 于 2012-11-10 21:00 编辑

有一段以前的代码
http://autoitx.com/forum.php?mod=viewthread&tid=15521&highlight=ListView%281%29

其中
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR

        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
                Case $hListView
                        Switch $iCode
                                Case $NM_CUSTOMDRAW
        If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
                                        Local $tCustDraw = DllStructCreate('hwnd hwndFrom;int idFrom;int code;dword DrawStage;hwnd hdc;long rect[4];dword ItemSpec;int ItemState;dword Itemlparam;dword clrText;dword clrTextBk;int SubItem; dword ItemType;dword clrFace;int IconEffect;int IconPhase;int PartID;int StateID;long rectText[4];int Align', $lParam)
          Local $iDrawStage, $iItem, $iSubitem, $hDC, $iColor1, $iColor2, $iColor3
                      $iDrawStage = DllStructGetData($tCustDraw, 'DrawStage')
                                        If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW ;request custom drawing of items
                                        If $iDrawStage = $CDDS_ITEMPREPAINT Then Return $CDRF_NOTIFYSUBITEMDRAW ;request drawing each cell separately
                                        If Not BitAND($iDrawStage, $CDDS_SUBITEM) Then Return $CDRF_DODEFAULT
                    $iItem = DllStructGetData($tCustDraw, 'ItemSpec')
                              $iSubitem = DllStructGetData($tCustDraw, 'SubItem')
                                        Select
                           Case _GUICtrlListView_GetItemChecked($hListView, $iItem)
                                       $iColor = RGB2BGR(0x7FFF00)
                                 DllStructSetData($tCustDraw, 'clrTextBk', $iColor)
                   Case Not (_GUICtrlListView_GetItemChecked($hListView, $iItem))
                                         $iColor = RGB2BGR(0xFFFFFF)
                                                        DllStructSetData($tCustDraw, 'clrTextBk', $iColor)
                                        EndSelect
                                        Return $CDRF_NEWFONT
                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func RGB2BGR($iColor)
        Return BitAND(BitShift(String(Binary($iColor)), 8), 0xFFFFFF)
EndFunc   ;==>RGB2BGR
是注册了一个函数,用来检测用户是否点击选项,然后改选行的颜色!那如果我要记住点击所在行号,还有记录共选了几行,要在哪里改代码,谢谢解答!

本帖子中包含更多资源

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

×
 楼主| 发表于 2012-11-10 20:54:06 | 显示全部楼层
里面有个数据结构
Local $tCustDraw = DllStructCreate('hwnd hwndFrom;int idFrom;int code;dword DrawStage;hwnd hdc;long rect[4];dword ItemSpec;int ItemState;dword Itemlparam;dword clrText;dword clrTextBk;int SubItem; dword ItemType;dword clrFace;int IconEffect;int IconPhase;int PartID;int StateID;long rectText[4];int Align', $lParam)
怎么这么长?
发表于 2012-11-10 22:59:21 | 显示全部楼层
回复 1# blue_dvd
变色又不影响其他的操作,不变色怎么写还是怎么写
 楼主| 发表于 2012-11-10 23:11:25 | 显示全部楼层
回复 3# netegg
问题在于:变色的同时要记住该行所在位置,即行号返回,同时能记住选择了多少项,即有多少行被选!然后保存!就是不知道在哪个位置加什么样的函数?
发表于 2012-11-10 23:32:08 | 显示全部楼层
回复 4# blue_dvd
那就再注册一个消息
发表于 2012-11-11 07:48:31 | 显示全部楼层
回复 4# blue_dvd

试试:

    ControlListView ( "窗口标题", "窗口文本", 控件ID, "命令" [, 选项1 [, 选项2]] )
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 06:13 , Processed in 0.075430 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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