找回密码
 加入
搜索
查看: 6424|回复: 8

[原创] skin 皮肤与tab 标签 不兼容的解决方案

  [复制链接]
发表于 2010-4-20 12:51:00 | 显示全部楼层 |阅读模式
本帖最后由 doshowyam 于 2010-4-20 16:00 编辑

在使用皮肤后,如果当前焦点在两edit 控件上时切换标签项到客户端时,当前的焦点控件不能隐藏。而且即使选其它焦点让他们隐藏后切换到客户端之后,用GUICtrlsetData()设置edit 控件数据,此控件也要在客户端标签上显示出来。
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

$skin = "D:\公共\au3\Au3皮肤\Skin\Gloss_ST.skf"
$SkinDll = "D:\公共\au3\Au3皮肤\Skin\SkinCrafterDll.dll"
Func _SkinGUI($SkincrafterDll, $SkincrafterSkin, $Handle)
        $Dll = DllOpen($SkincrafterDll)
        DllCall($Dll, "int:cdecl", "InitLicenKeys", "wstr", "1", "wstr", "", "wstr", "1@1.com", "wstr", "1")
        DllCall($Dll, "int:cdecl", "InitDecoration", "int", 1)
        DllCall($Dll, "int:cdecl", "LoadSkinFromFile", "wstr", $SkincrafterSkin)
        DllCall($Dll, "int:cdecl", "DecorateAs", "int", $Handle, "int", 25)
        DllCall($Dll, "int:cdecl", "ApplySkin")
EndFunc   ;==>_SkinGUI

$RootWindows = GUICreate("Server -- TCP Talke Server", @DesktopWidth * 0.6, @DesktopHeight * 0.6, @DesktopWidth * 0.2, @DesktopHeight * 0.2)
_SkinGUI($SkinDll, $skin, $RootWindows)

;========================================================================================
;                                                        各控件边界设置
;tab签
$tab_lf = 8
$tab_tp = 10
$tab_wd = @DesktopWidth * 0.6 - 20
$tab_ht = @DesktopHeight * 0.6 - 50
$tab_sty = ""
;接收栏
$RvEdit_lf = 11
$RvEdit_tp = 30
$RvEdit_wd = @DesktopWidth * 0.6 - 26
$RvEdit_ht = @DesktopHeight * 0.6 - 220
$RvEdit_sty = BitOR($ES_MULTILINE, $ES_AUTOVSCROLL, $ES_WANTRETURN, $ES_READONLY, $ws_VSCROLL)
;IP地址
$Ipedit_tp = @DesktopHeight * 0.6 - 180
$Ipedit_lf = 40
$Ipedit_sty = $ES_NUMBER
;发送栏
$SdEdit_tp = @DesktopHeight * 0.6 - 150
$SdEdit_lf = 11
$SdEdit_wd = @DesktopWidth * 0.6 - 26
$SdEdit_ht = 50
$SdEdit_sty = BitOR($ES_MULTILINE, $ES_AUTOVSCROLL, $ES_WANTRETURN, $ws_VSCROLL)
;按钮
$Bu_sd_tp = $SdEdit_tp + $SdEdit_ht + 10
$Bu_sd_lf = @DesktopWidth * 0.15 - 10
$Bu_ext_lf = @DesktopWidth * 0.45 - 150
;
;
;========================================================================================

$tab = GUICtrlCreateTab($tab_lf, $tab_tp, $tab_wd, $tab_ht, $tab_sty) ;创建TAB标签

$tb_Rs = GUICtrlCreateTabItem(" 收发信息 ") ; 收发 tab 标签

$RvEdit = GUICtrlCreateEdit("", $RvEdit_lf, $RvEdit_tp, $RvEdit_wd, $RvEdit_ht, $RvEdit_sty) ; 接收栏

$SdEdit = GUICtrlCreateEdit("", $SdEdit_lf, $SdEdit_tp, $SdEdit_wd, $SdEdit_ht, $SdEdit_sty) ; 发送栏

$Bu_sd = GUICtrlCreateButton("发送[&Enter]", $Bu_sd_lf, $Bu_sd_tp, 113, 25, 0)
$Bu_ext = GUICtrlCreateButton("退出[&Esc]", $Bu_ext_lf, $Bu_sd_tp, 113, 25, 0)
;                        tab 1
;---------------------------------------------------------------------------
$tb_cl = GUICtrlCreateTabItem(" 客户端 ")

$Bu_ext_cl = GUICtrlCreateButton("退出[&Esc]", $Bu_ext_lf, $Bu_sd_tp, 113, 25, 0)

GUICtrlCreateTabItem("") ; TAB 标签结束
GUICtrlSetState($tb_Rs, $GUI_SHOW)
GUISetState(@SW_SHOW)
GUICtrlSetState($RvEdit, $GUI_FOCUS)
GUICtrlSetState($SdEdit, $GUI_FOCUS)

GUIRegisterMsg($WM_SETFOCUS, "MSG_WM_SETFOCUS")
While 1
        $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
        If $msg = $tab Then tabhide()

WEnd

Func tabhide()
        Switch GUICtrlRead($tab, 1)
                Case $tb_Rs
                        GUICtrlSetState($RvEdit, $GUI_SHOW + $GUI_ENABLE + $GUI_FOCUS)
                        GUICtrlSetState($SdEdit, $GUI_SHOW + $GUI_ENABLE + $GUI_FOCUS)
                Case $tb_cl
                Case Else
                        Return
        EndSwitch
EndFunc   ;==>tabhide



Func MSG_WM_SETFOCUS($hWnd, $msg, $wParam, $lParam)        
        Local $sel_tab = GUICtrlRead($tab, 1)        
        If $sel_tab <> $tb_Rs And ($wParam = GUICtrlGetHandle($SdEdit) Or $wParam = GUICtrlGetHandle($RvEdit)) Then
                        ControlFocus ($RootWindows,"",$sel_tab)
                        GUICtrlSetState($sel_tab, $GUI_SHOW + $GUI_FOCUS)
        EndIf
        Return $GUI_RUNDEFMSG
EndFunc   ;==>MSG_WM_SETFOCUS
 楼主| 发表于 2010-4-20 12:51:57 | 显示全部楼层
好不容易解决
发表于 2010-4-21 11:11:49 | 显示全部楼层
厉害 这都被你研究出来了
关键就是SkinCrafterDll 刷新问题
发表于 2010-9-26 20:48:28 | 显示全部楼层
先收藏了,等要做皮肤的时候,在借鉴一下。
发表于 2010-9-27 16:55:08 | 显示全部楼层
用其他的皮肤哈
发表于 2011-12-16 07:45:25 | 显示全部楼层
先收藏了,等要做皮肤的时候,在借鉴一下.谢谢
发表于 2012-3-13 13:38:55 | 显示全部楼层
收藏了,好东西
发表于 2012-8-20 16:36:21 | 显示全部楼层
收藏了.好好学习下
发表于 2013-10-28 07:46:21 | 显示全部楼层
学习了哦。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-28 18:15 , Processed in 0.244586 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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