[已解决]请教,怎么在Tab页里加入垂直滚动条,我试了内嵌窗口但试不明白,求教了。
本帖最后由 回家路上 于 2015-11-30 16:59 编辑我想在第二个TabItem里面加上垂直滚动条,试了好久没是成功,请教大家,能帮帮忙。
#include <GUIConstantsEx.au3>
#include <GuiScrollBars.au3>
#include <SendMessage.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <GuiTab.au3>
Example()
Func Example()
GUICreate("标签页控件 GUI", 785, 375);
;GUISetBkColor(0x00E0FFFF)
GUISetFont(9, 300)
Local $idTab = GUICtrlCreateTab(15, 8, 760, 355)
_GUICtrlTab_SetMinTabWidth($idTab, 80)
GUICtrlCreateTabItem("选项页 0")
GUICtrlCreateGroup("组框 1", 25, 40, 740, 135)
For $i=0 to 13
$iX = 35 + Mod($i, 4)*185
$iY = 55 + Int($i/4)*25
GUICtrlCreateCheckbox("标准复选框" & ($i+1) & "|" & $iX & $iY, $iX, $iY, 165, 25)
Next
GUICtrlCreateGroup("组框 1", 25, 180, 740, 135)
For $i=0 to 13
$iX = 35 + Mod($i, 4)*185
$iY = 195 + Int($i/4)*25
GUICtrlCreateCheckbox("标准复选框" & ($i+1) & "|" & $iX & $iY, $iX, $iY, 165, 25)
Next
GUICtrlCreateButton("测试按钮", 675, 325, 85, 25)
GUICtrlCreateButton("测试按钮", 580, 325, 85, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1) ;关闭组框控件
$tabItem2 = GUICtrlCreateTabItem("选项页 1")
;$tabItem2InnerGUI = GUICreate("", 300, 300, 0,0, $WS_CHILD, -1, $tabItem2)
;_WinAPI_SetParent($tabItem2InnerGUI,$tabItem2)
;_GUIScrollBars_Init($tabItem2InnerGUI)
;_GUIScrollBars_ShowScrollBar($tabItem2InnerGUI, $SB_HORZ)
;GUISetState(@SW_SHOW, $tabItem2InnerGUI)
GUICtrlCreateGroup("组框 1", 25, 40, 740, 135)
For $i=0 to 13
$iX = 35 + Mod($i, 4)*185
$iY = 55 + Int($i/4)*25
GUICtrlCreateCheckbox("标准复选框" & ($i+1) & "|" & $iX & $iY, $iX, $iY, 165, 25)
Next
GUICtrlCreateGroup("组框 1", 25, 180, 740, 135)
For $i=0 to 13
$iX = 35 + Mod($i, 4)*185
$iY = 195 + Int($i/4)*25
GUICtrlCreateCheckbox("标准复选框" & ($i+1) & "|" & $iX & $iY, $iX, $iY, 165, 25)
Next
GUICtrlCreateGroup("组框 1", 25, 320, 740, 135)
GUICtrlCreateButton("测试按钮", 675, 465, 85, 25)
_SendMessage($tabItem2, 0x0194)
GUICtrlCreateTabItem("选项页 2")
GUICtrlCreateGroup("组框 1", 25, 40, 740, 135)
For $i=0 to 13
$iX = 35 + Mod($i, 4)*185
$iY = 55 + Int($i/4)*25
GUICtrlCreateCheckbox("标准复选框" & ($i+1) & "|" & $iX & $iY, $iX, $iY, 165, 25)
Next
GUICtrlCreateGroup("组框 1", 25, 180, 740, 135)
For $i=0 to 13
$iX = 35 + Mod($i, 4)*185
$iY = 195 + Int($i/4)*25
GUICtrlCreateCheckbox("标准复选框" & ($i+1) & "|" & $iX & $iY, $iX, $iY, 165, 25)
Next
GUICtrlCreateButton("测试按钮", 675, 325, 85, 25)
GUICtrlCreateTabItem(""); 结束选项标签页的定义
;GUICtrlCreateLabel("点击标签页并查看标题", 20, 130, 250, 20)
GUISetState(@SW_SHOW)
Local $idMsg
While 1
$idMsg = GUIGetMsg()
If $idMsg = $GUI_EVENT_CLOSE Then ExitLoop
If $idMsg = $idTab Then
WinSetTitle("标签页控件 GUI", "", "标签页控件 GUI" & GUICtrlRead($idTab))
EndIf
WEnd
EndFunc ;==>Example
====================================================================
解决方案在 9楼---------http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&pid=638286&ptid=50873
感谢提供帮助。 自己顶一下。新手,正在动手学习,希望有人能指点指点,谢谢。 自己顶一下。希望看到的论坛前辈指点一下。
====================================
我每次都删除上一次顶的,都扣钱了,还是没人O__O "…。。。 你可以参考早几天的帖子,就有你需要的内容
http://www.autoitx.com/forum.php?mod=viewthread&tid=50682
9# 10# 的代码
你这个应该比那贴对滚动条的需求更有意义点,但如果可以不用的话最好不用,调试很麻烦。就算那贴给出的答案也只建议你参考,因为两个代码都会出现滚动不够或滚动过多的问题。如果你用了TAB分页,不如再用TAB细分,看你需要滚动的部分也是一组一组的。 本帖最后由 回家路上 于 2015-11-30 14:22 编辑
回复 4# afan
谢谢afan超版,嗯确实大思路的正确会少很多功夫,在论坛学习,一半是学技术,一半是学思路。
看了您推荐的帖子,试了试子窗口滚动条的效果,确实好使。
可是我在Tab页里内嵌窗口还没整好,能不能麻烦给个例子,我昨天今天在论坛搜“tab”“滚动条”了,好多帖子也没搜到tab内嵌滚动条的例子。希望有时间的话能指教一下。谢谢。
================================
关于分组的想法,确实很好,只是我这目前是写了个测试样例,实际上可能有十几组,内部分组的话Tab也太多,就不好了。 是这样吗?
回复 6# 水木子
挖厉害啊给个源码呗 回复 6# 水木子
嗯嗯,就是这个效果,我就是搜索看到14年的一个帖子,afan版主在那个帖子中建议如此实现,然后你也说这样可行切不难,我就动手试,结果参考文档也没试成,好吧,是我心急了,学习中。
谢谢水木子超版关注,请指教。谢啦O(∩_∩)O! 本帖最后由 水木子 于 2015-11-30 16:17 编辑
哦!是吗!afan前辈说的那个帖子我还没来得及看,这是我根据你的要求写的。
以前也没有写过关于滚动条的东西,看你提问,我正好也对这个有兴趣,所以就试试呗!
思路比较简单,就是在Tab中内嵌子窗口,然后给子窗口添加滚动条。
代码如下,希望对你有帮助。
#include <GuiTab.au3>
#include 'GUIScrollbars_Ex.au3'
$MyGui0 = GUICreate('标签页控件 GUI', 800, 400)
GUISetFont(9)
$Tab = GUICtrlCreateTab(10, 10, 780, 380)
_GUICtrlTab_SetMinTabWidth($Tab, 80)
$TabItem1 = GUICtrlCreateTabItem('第一页')
$Button1_1 = GUICtrlCreateButton('测试按钮1-1', 420, 350, 85, 25)
$TabItem2 = GUICtrlCreateTabItem('第二页')
$Button2_1 = GUICtrlCreateButton('测试按钮2-1', 420, 350, 85, 25)
$Button2_2 = GUICtrlCreateButton('测试按钮2-2', 550, 350, 85, 25)
$TabItem3 = GUICtrlCreateTabItem('第三页')
$Button3_1 = GUICtrlCreateButton('测试按钮3-1', 420, 350, 85, 25)
$Button3_2 = GUICtrlCreateButton('测试按钮3-2', 550, 350, 85, 25)
$Button3_3 = GUICtrlCreateButton('测试按钮3-3', 680, 350, 85, 25)
GUICtrlCreateTabItem('')
Global $aCtrlCount1
Global $iNumber = 4
Global $iSpacingX = 200, $iSpacingY = 50
$MyGui1 = GUICreate('', 776, 300, 11, 31, $WS_POPUP, $WS_EX_MDICHILD, $MyGui0)
For $i = 0 To UBound($aCtrlCount1) - 1
$aCtrlCount1[$i] = GUICtrlCreateCheckbox('复选框 1 - ' & $i + 1, $iSpacingX * Mod($i, $iNumber) + 30, $iSpacingY * Floor($i / $iNumber) + 40, 100, 20)
Next
GUICtrlCreateGroup('组框 1 - 1', 10, 10, 740, UBound($aCtrlCount1) * 12.5 + 40)
If UBound($aCtrlCount1) > 20 Then _GUIScrollbars_Generate($MyGui1, 0, UBound($aCtrlCount1) * 12.5 + 40, 0, 0, True)
Global $aCtrlCount2
$MyGui2 = GUICreate('', 776, 300, 11, 31, $WS_POPUP, $WS_EX_MDICHILD, $MyGui0)
For $i = 0 To UBound($aCtrlCount2) - 1
$aCtrlCount2[$i] = GUICtrlCreateCheckbox('复选框 2 - ' & $i + 1, $iSpacingX * Mod($i, $iNumber) + 30, $iSpacingY * Floor($i / $iNumber) + 40, 100, 20)
Next
GUICtrlCreateGroup('组框 2 - 1', 10, 10, 740, UBound($aCtrlCount2) * 12.5 + 40)
If UBound($aCtrlCount2) > 20 Then _GUIScrollbars_Generate($MyGui2, 0, UBound($aCtrlCount2) * 12.5 + 40, 0, 0, True)
Global $aCtrlCount3
$MyGui3 = GUICreate('', 776, 300, 11, 31, $WS_POPUP, $WS_EX_MDICHILD, $MyGui0)
For $i = 0 To UBound($aCtrlCount3) - 1
$aCtrlCount3[$i] = GUICtrlCreateCheckbox('复选框 3 - ' & $i + 1, $iSpacingX * Mod($i, $iNumber) + 30, $iSpacingY * Floor($i / $iNumber) + 40, 100, 20)
Next
GUICtrlCreateGroup('组框 3 - 1', 10, 10, 740, UBound($aCtrlCount3) * 12.5 + 40)
If UBound($aCtrlCount3) > 20 Then _GUIScrollbars_Generate($MyGui3, 0, UBound($aCtrlCount3) * 12.5 + 40, 0, 0, True)
GUISetState(@SW_SHOW, $MyGui1)
GUISetState(@SW_SHOW, $MyGui0)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $Button1_1
MsgBox(0, 0, 'Test')
EndSwitch
WEnd
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTab
$hWndTab = GUICtrlGetHandle($Tab)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndTab
Switch $iCode
Case $NM_CLICK
$iTabItemIndex = _GUICtrlTab_GetCurFocus($hWndTab)
Switch $iTabItemIndex
Case 0
GUISetState(@SW_HIDE, $MyGui2)
GUISetState(@SW_HIDE, $MyGui3)
GUISetState(@SW_SHOW, $MyGui1)
Case 1
GUISetState(@SW_HIDE, $MyGui1)
GUISetState(@SW_HIDE, $MyGui3)
GUISetState(@SW_SHOW, $MyGui2)
Case 2
GUISetState(@SW_HIDE, $MyGui1)
GUISetState(@SW_HIDE, $MyGui2)
GUISetState(@SW_SHOW, $MyGui3)
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
附上UDF函数,不好意思,我已经忘了出处了,感谢作者!
顺便提一下,_GUIScrollbars_Generate 这个函数也可以创建水平滚动条。
回复 9# 水木子
一下子就醒悟了,通过事件处理和逻辑控制实现假内嵌。记下了。
横向的也试了
UDF也很强大,收藏学习了。
再次感谢帮助O(∩_∩)O! 收藏,收藏,后消化 感谢大大 学习了 以学习感谢分享 感谢分享 学习了 感谢分享 学习了
页:
[1]
2