lxsh010 发表于 2011-4-1 21:38:50

关于工具栏(已解决)

本帖最后由 lxsh010 于 2011-4-4 01:56 编辑

论坛大大们:你们好

菜鸟在这里求助,想在一款软件 写一个工具栏,像IE浏览器,像资源管理器那样,,应该怎么做?

期待高手显身帮忙。

谢谢

lxsh010 发表于 2011-4-1 21:53:10



各位兄弟们,这个是我正在写的工具箱。

系统工具 和常用软件,,还在那儿太难看了。

所以,想 把他们写成工具栏的 模样,但无从下手。。

真诚等待中。。。。

qq82015930 发表于 2011-4-2 00:03:33

你上面排不是?

pusofalse 发表于 2011-4-2 08:21:03

#include <GUIToolbar.au3>
_GUICtrlToolbar_Create

lxsh010 发表于 2011-4-2 18:56:45

回复 4# pusofalse

非常感谢P版。谢谢你的提示,我终于找到相关的代码。界面算是折腾出来了,,可事件如何注册呢?

lxsh010 发表于 2011-4-2 18:59:31

本帖最后由 lxsh010 于 2011-4-2 19:10 编辑

#include <GuiConstantsEx.au3>
#include <GuiTab.au3>
#include <IE.au3>
#include "ModernMenuRaw.au3"
#Include <Date.au3>
#include <Clipboard.au3>
#include <ScreenCapture.au3>
#include <GuiToolBar.au3>
#Include <GuiImageList.au3>

Dim $cleanform,$clean1,$clean2,$clean3,$ShowForm, _
$tqybform,$calenForm,$DIYForm,$speedForm,$musicForm,$pptvForm,$SFCForm,$systemFrom, _
$Timecheck1,$TimecheckForm,$sys4,$sys5,$sys6,$sys7,$sys8, _
$kshutdown01,$shutstart,$shuttime,$leftTime,$date,$result,$type,$kshutdownform,$BS_CENTER, _
$MoveFile1,$Tab1Check1,$Tab1Check2,$Tab1Check3,$Tab1Check4,$Tab1Check5,$Tab1Check6,$MoveFile2, _
$Tab3Check1,$Tab3Check2,$Tab3Check3, $Tab3Check4, $Tab3Check5, $Tab3Check6,$Tab3Check7,$Tab3Check8, _
$Tab3Check9,$Tab3Check10,$tab1combo1,$re2,$reg3,$re1,$MoveForm,$Tab_6_Radio_;声明变量

Global Const $TRAY_EVENT_PRIMARYDOUBLE = -13


;工具栏
Global Enum $ToolBar_Open = 1000, $ToolBar_Close, $ToolBar_Extract, $ToolBar_View, $ToolBar_Test, $ToolBar_Decrypt



$skins=@SystemDir & "\seafile\QQ2009.she"   ;皮肤
$Dll = DllOpen(@SystemDir & "\seafile\Skin.dll")
DllCall($Dll, "int", "SkinH_AttachEx", "str", $skins, "str", "mhgd")
DllCall($Dll, "int", "SkinH_SetAero", "int",1);1玻璃效果

Opt("GUIOnEventMode", 1) ;GUI事件响应模式
Opt("GUIEventOptions",1) ;修改特殊的 GUI 函数的返回值类型 1=立即通知
;Opt("WinTitleMatchMode",2);标题的任意子串皆可匹配
Opt("GUICloseOnESC",0);在按下 ESC 时不退出

$HwndC = WinGetHandle("Program Manager");桌面也是一个窗口,标题为Program Manager
$g_szVersion = "拾零装机工具箱"   ;不重复运行本程序
If WinExists($g_szVersion) Then ;检测是否有同一程序运行
        MsgBox(48, "提示 - 拾零装机工具箱", "温馨提示:[拾零装机工具箱]已在运行了,请勿重复运行! ",5,$HwndC)
        Exit ; 此脚本已经运行了
EndIf

$Gui_w = 360
$gui_h = 420
$hGUI = GUICreate("拾零装机工具箱", $Gui_w, $gui_h, @DesktopWidth - $Gui_w, Default, Default, Default)
$guiRect = _WinAPI_GetWindowRect($hGUI)
GUISetFont(9.7, 0, 0, "Tahoma") ;窗口默认字体

;--------------------工具栏------------
Global $MSG_NOTIFY
$hToolBar = _GUICtrlToolbar_Create($hGUI, $TBSTYLE_FLAT)
$hToolBar_Image = _GUIImageList_Create(32, 32, 5, 3)
_GUIImageList_AddIcon($hToolBar_Image, @SystemDir & "\seafile\Sealin.DLL", -2,True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 2, True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 3, True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 4, True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 5, True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 6, True)
_GUICtrlToolbar_SetImageList($hToolBar, $hToolBar_Image)

$OpenString = _GUICtrlToolbar_AddString($hToolbar, "系统工具")
$CloseString = _GUICtrlToolbar_AddString($hToolbar, "常用软件")
;GUICtrlSetOnEvent(-1,"_TabButton2")
$ExtractString = _GUICtrlToolbar_AddString($hToolbar, "垃圾清理")
$ViewString = _GUICtrlToolbar_AddString($hToolbar, "系统安全   ")
$TestString = _GUICtrlToolbar_AddString($hToolbar, "   Test   ")

_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_Open, 0, $OpenString) ;窗口管理
_GUICtrlToolbar_AddButtonSep ($hToolbar)
_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_Close, 1, $CloseString)
_GUICtrlToolbar_AddButtonSep ($hToolbar)
_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_Extract, 2, $ExtractString)
_GUICtrlToolbar_AddButtonSep ($hToolbar)
_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_Test, 5, $TestString)
_GUICtrlToolbar_AddButtonSep ($hToolbar)
_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_View, 3, $ViewString)
_GUICtrlToolbar_SetButtonState($hToolBar, $ToolBar_Decrypt, $TBSTATE_INDETERMINATE)

If $CmdLine > 0 Then          ; 每个事件都需建这个东东
        _TabButton2($CmdLine); 关联第95行
EndIf   

;------------标签设置--------------
$hTab = GUICtrlCreateTab(2, 80, 376, 400, BitOR($TCS_BOTTOM, $TCS_FIXEDWIDTH, $TCS_BUTTONS))
_GUICtrlTab_SetItemSize($hTab, 1, 1)
DirCreate (@ProgramFilesDir & "\Sealin")

Global $hTray = ControlGetHandle('', '', 'TrayNotifyWnd1')
Global $trayRect = _WinAPI_GetWindowRect($hTray)


;GUICtrlCreatePic(@SystemDir & "\seafile\XLOGO.JPG", 0, 0, 380, 60)
$Label1 = GUICtrlCreateLabel(" Sealin Home ", 20, 404, 80, 30, 0)
GUICtrlSetTip($Label1, " 拾零技术 永不止步 ")
GUICtrlSetCursor($Label1, 0)

GuiCtrlCreatePic(@ProgramFilesDir &"\Sealin\XLOGO.JPG",10,10, 360,60)
GUICtrlCreateGroup ("", 10, 85, 340, 140)
GUICtrlCreateGroup ("", 10, 240, 340, 140)





;-----------------------------GUI菜单---------------------------------
$MuF1 = GUICtrlCreateMenu("控制面板(&C)");--------控制面板-------


$MuF2 = GUICtrlCreateMenu("在线贴士(&R)");-------在线小贴士---------



;=============================GUI界面-第一分页=============================

$Tab1 = GUICtrlCreateTabItem("系统工具")

$hGUI001 = GUICtrlCreateRadio("Word Wrong 修复", 40, 110, 130, 25, 0)
GUICtrlSetOnEvent(-1, "_Wordbug")

;------------------------第二分页-------------------------

$Tab2 = GUICtrlCreateTabItem("常用软件")

$Button21 = GUICtrlCreateRadio("电脑时间校准工具", 40, 110, 130, 25, 0)
GUICtrlSetTip(-1, " 请确保上网状态,再进行时间校准 ")
GUICtrlSetOnEvent(-1,"_Timecheck")
$Button22 = GUICtrlCreateRadio("软件快速卸载工具", 40, 145, 130, 25, 0)
GUICtrlSetOnEvent(-1,"_uninstall")


;为指定控件GUI的点击行为定义一个用户函数
GUICtrlSetOnEvent($Label1, "Gui")

GUISetOnEvent($GUI_EVENT_CLOSE, "_Quit")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "TrayClick")
GUISetOnEvent($GUI_EVENT_RESTORE, "restore")
GUISetState()
WinMove("", "", @DesktopWidth / 2 - $Gui_w / 2, Default, Default, Default, 2)



GUICtrlSetOnEvent(-1, "_Quit")
_TrayIconSetState();显示托盘
$nTaskBarCreated = DllCall("user32.dll", "uint", "RegisterWindowMessageA", "str", "TaskbarCreated")
GUIRegisterMsg($nTaskBarCreated, "RecreateIcons");防托盘图标被删

While 1       
       
        Sleep(900)
WEnd



Func _TabButton1() ;系统工具事件
        GUICtrlSetState($Tab1, $GUI_SHOW)
EndFunc

Func _TabButton2() ;常用软件事件
        GUICtrlSetState($Tab2, $GUI_SHOW)       
EndFuncP版大大,再往下,怎么注册,我就真的不懂了!!!恳请赐教

zitoy 发表于 2011-4-2 21:02:56

GUIToolbar 这个还没用过。

freedom 发表于 2011-4-3 05:07:44

好东西,谢谢分享。。可不可以弄成竖排呢?

lxsh010 发表于 2011-4-3 09:35:08

唉,高手们都见首不见尾,不肯来帮帮我们这些菜鸟们。。

hbwazxf 发表于 2011-4-3 11:00:36

学习一下吧。。。

jinefo 发表于 2011-4-3 16:51:34

试试看,#include <GuiConstantsEx.au3>
#include <GuiTab.au3>
#include <IE.au3>
;#include "ModernMenu.au3"
#Include <Date.au3>
#include <Clipboard.au3>
#include <ScreenCapture.au3>
#include <GuiToolBar.au3>
#Include <GuiImageList.au3>

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TabConstants.au3>

Dim $cleanform,$clean1,$clean2,$clean3,$ShowForm, _
$tqybform,$calenForm,$DIYForm,$speedForm,$musicForm,$pptvForm,$SFCForm,$systemFrom, _
$Timecheck1,$TimecheckForm,$sys4,$sys5,$sys6,$sys7,$sys8, _
$kshutdown01,$shutstart,$shuttime,$leftTime,$date,$result,$type,$kshutdownform,$BS_CENTER, _
$MoveFile1,$Tab1Check1,$Tab1Check2,$Tab1Check3,$Tab1Check4,$Tab1Check5,$Tab1Check6,$MoveFile2, _
$Tab3Check1,$Tab3Check2,$Tab3Check3, $Tab3Check4, $Tab3Check5, $Tab3Check6,$Tab3Check7,$Tab3Check8, _
$Tab3Check9,$Tab3Check10,$tab1combo1,$re2,$reg3,$re1,$MoveForm,$Tab_6_Radio_;声明变量

Global Const $TRAY_EVENT_PRIMARYDOUBLE = -13


;工具栏
Global Enum $ToolBar_Open = 1000, $ToolBar_Close, $ToolBar_Extract, $ToolBar_View, $ToolBar_Test, $ToolBar_Decrypt


$skins=@SystemDir & "\seafile\QQ2009.she"   ;皮肤
$Dll = DllOpen(@SystemDir & "\seafile\Skin.dll")
DllCall($Dll, "int", "SkinH_AttachEx", "str", $skins, "str", "mhgd")
DllCall($Dll, "int", "SkinH_SetAero", "int",1);1玻璃效果

Opt("GUIOnEventMode", 1) ;GUI事件响应模式
Opt("GUIEventOptions",1) ;修改特殊的 GUI 函数的返回值类型 1=立即通知
;Opt("WinTitleMatchMode",2);标题的任意子串皆可匹配
Opt("GUICloseOnESC",0);在按下 ESC 时不退出

$HwndC = WinGetHandle("Program Manager");桌面也是一个窗口,标题为Program Manager
$g_szVersion = "拾零装机工具箱"   ;不重复运行本程序
If WinExists($g_szVersion) Then ;检测是否有同一程序运行
      MsgBox(48, "提示 - 拾零装机工具箱", "温馨提示:[拾零装机工具箱]已在运行了,请勿重复运行! ",5,$HwndC)
      Exit ; 此脚本已经运行了
EndIf

$Gui_w = 360
$gui_h = 420
$hGUI = GUICreate("拾零装机工具箱", $Gui_w, $gui_h, @DesktopWidth - $Gui_w, Default, Default, Default)
$guiRect = _WinAPI_GetWindowRect($hGUI)
GUISetFont(9.7, 0, 0, "Tahoma") ;窗口默认字体

;--------------------工具栏------------
Global $MSG_NOTIFY
$hToolBar = _GUICtrlToolbar_Create($hGUI, $TBSTYLE_FLAT)
$hToolBar_Image = _GUIImageList_Create(32, 32, 5, 3)
_GUIImageList_AddIcon($hToolBar_Image, @SystemDir & "\Sealin.DLL", 1, True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 2, True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 4, True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 5, True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 6, True)
_GUIImageList_AddIcon($hToolBar_Image, @ScriptDir & "\sicon.DLL", 7, True)
_GUICtrlToolbar_SetImageList($hToolBar, $hToolBar_Image)

$OpenString = _GUICtrlToolbar_AddString($hToolbar, "系统工具")
$CloseString = _GUICtrlToolbar_AddString($hToolbar, "常用软件")
;GUICtrlSetOnEvent(-1,"_TabButton2")
$ExtractString = _GUICtrlToolbar_AddString($hToolbar, "垃圾清理")
$ViewString = _GUICtrlToolbar_AddString($hToolbar, "系统安全   ")
$TestString = _GUICtrlToolbar_AddString($hToolbar, "   Test   ")

_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_Open, 0, $OpenString) ;窗口管理
_GUICtrlToolbar_AddButtonSep ($hToolbar)
_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_Close, 1, $CloseString)
_GUICtrlToolbar_AddButtonSep ($hToolbar)
_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_Extract, 2, $ExtractString)
_GUICtrlToolbar_AddButtonSep ($hToolbar)
_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_Test, 5, $TestString)
_GUICtrlToolbar_AddButtonSep ($hToolbar)
_GUICtrlToolbar_AddButton($hToolBar, $ToolBar_View, 3, $ViewString)
_GUICtrlToolbar_SetButtonState($hToolBar, $ToolBar_Decrypt, $TBSTATE_INDETERMINATE)


GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
;If $CmdLine > 0 Then          ; 每个事件都需建这个东东
;       _TabButton2($CmdLine); 关联第95行
;EndIf   


;------------标签设置--------------
$hTab = GUICtrlCreateTab(2, 80, 376, 400, BitOR($TCS_BOTTOM, $TCS_FIXEDWIDTH, $TCS_BUTTONS))
_GUICtrlTab_SetItemSize($hTab, 1, 1)
DirCreate (@ProgramFilesDir & "\Sealin")

Global $hTray = ControlGetHandle('', '', 'TrayNotifyWnd1')
Global $trayRect = _WinAPI_GetWindowRect($hTray)


;GUICtrlCreatePic(@SystemDir & "\seafile\XLOGO.JPG", 0, 0, 380, 60)
$Label1 = GUICtrlCreateLabel(" Sealin Home ", 20, 404, 80, 30, 0)
GUICtrlSetTip($Label1, " 拾零技术 永不止步 ")
GUICtrlSetCursor($Label1, 0)

GuiCtrlCreatePic(@ProgramFilesDir &"\Sealin\XLOGO.JPG",10,10, 360,60)
GUICtrlCreateGroup ("", 10, 85, 340, 140)
GUICtrlCreateGroup ("", 10, 240, 340, 140)





;-----------------------------GUI菜单---------------------------------
$MuF1 = GUICtrlCreateMenu("控制面板(&C)");--------控制面板-------


$MuF2 = GUICtrlCreateMenu("在线贴士(&R)");-------在线小贴士---------



;=============================GUI界面-第一分页=============================

$Tab1 = GUICtrlCreateTabItem("系统工具")

$hGUI001 = GUICtrlCreateRadio("Word Wrong 修复", 40, 110, 130, 25, 0)


;------------------------第二分页-------------------------

$Tab2 = GUICtrlCreateTabItem("常用软件")

$Button21 = GUICtrlCreateRadio("电脑时间校准工具", 40, 110, 130, 25, 0)
GUICtrlSetTip(-1, " 请确保上网状态,再进行时间校准 ")
GUICtrlSetOnEvent(-1,"_Timecheck")
$Button22 = GUICtrlCreateRadio("软件快速卸载工具", 40, 145, 130, 25, 0)
GUICtrlSetOnEvent(-1,"_uninstall")


;为指定控件GUI的点击行为定义一个用户函数
GUICtrlSetOnEvent($Label1, "Gui")

GUISetOnEvent($GUI_EVENT_CLOSE, "_Quit")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "TrayClick")
GUISetOnEvent($GUI_EVENT_RESTORE, "restore")
GUISetState()
WinMove("", "", @DesktopWidth / 2 - $Gui_w / 2, Default, Default, Default, 2)



GUICtrlSetOnEvent(-1, "_Quit")
;_TrayIconSetState();显示托盘
$nTaskBarCreated = DllCall("user32.dll", "uint", "RegisterWindowMessageA", "str", "TaskbarCreated")
GUIRegisterMsg($nTaskBarCreated, "RecreateIcons");防托盘图标被删


If $CmdLine > 0 Then          ; 每个事件都需建这个东东
        _TabButton2($CmdLine); 关联第95行
EndIf   




;;;;==========================上面是你弄的,先不动,等你明白了就行了。看=号中的
If $CmdLine > 0 Then   ;;;;这里就是图标一的事件
        _newopen($CmdLine)
EndIf

If $CmdLine > 0 Then   ;;;;这里就是图标二的事件
        _newopen2($CmdLine)
EndIf
;;;;这里也就是说如果我现在要弄图标二那我也要像图标二新建一个
;;;;;如果要弄很多事件的话,就按照上面跟着走
;;;;;;===================================================
While 1

        _GetMsgNotify()
        Sleep(100)
WEnd



Func _TabButton1() ;系统工具事件
      GUICtrlSetState($Tab1, $GUI_SHOW)
EndFunc

Func _TabButton2() ;常用软件事件
      GUICtrlSetState($Tab2, $GUI_SHOW)      
EndFunc


Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
        Local $tNMHDR, $hWndFrom, $iCode, $tNMTOOLBAR, $iItem
       
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
       
        $tNMTOOLBAR = DllStructCreate($tagNMTOOLBAR, $lParam)
        $iItem = DllStructGetData($tNMTOOLBAR ,"iItem")
       
        Switch $hWndFrom
                Case $hToolBar
                        Switch $iCode
                                Case $NM_LDOWN
                                        Switch $iItem
                                                Case $ToolBar_Open
                                                        $MSG_NOTIFY = "newOpen"
                                                Case $ToolBar_Close
                                                        $MSG_NOTIFY = "newOpen2"
                                                       
                                        EndSwitch
                        EndSwitch
        EndSwitch
       
        Return $GUI_RUNDEFMSG
EndFunc


;;;=======================这就是就事件 图标一的动作
Func _newopen()
GUICtrlCreateListView("图标1", 40, 180, 220, 120)
EndFunc

;;;=======================这就是就事件 图标二的动作
Func _newopen2()
;;;====这个里面我悲剧了,能执行事件1,却无法执行事件2的的GUI动作,能执行外部命令和MsgBox
;;;;=========就先不研究了,希望高手指教这里
GUICtrlCreateListView("图标2", 40, 180, 220, 120)
Run(@WindowsDir & "\notepad.exe")
EndFunc

;;;;;============================
Func _GetMsgNotify()
        Switch $MSG_NOTIFY
                Case "newOpen"
                        _newopen()
                                        Case "newOpen2"
                        _newopen2()
        EndSwitch
        $MSG_NOTIFY = ""
EndFunc

;;;;;;;;;====================================== 这个=号里是我新加的

lxsh010 发表于 2011-4-4 01:52:31

试试看,
jinefo 发表于 2011-4-3 16:51 http://www.autoitx.com/images/common/back.gif

谢谢楼上的朋友。我已经解决了。

lxsh010 发表于 2011-4-4 01:53:35

jinefo 发表于 2011-4-4 11:25:02

回复 13# lxsh010


    不知楼主弄的是否是
当鼠标点击系统工具就显示_tab1 第二个点击就显示_tab2
如果是,能给我份源码吗?练习下~~~ jinefo@qq.com

1043101064 发表于 2011-4-4 18:20:25

写的不错也给我一个学习学习1043101064@qq,com
页: [1] 2
查看完整版本: 关于工具栏(已解决)