找回密码
 加入
搜索
查看: 9585|回复: 24

[GUI管理] 父子窗口中, 子窗口(美化)样式的问题(已解决)

 火... [复制链接]
发表于 2012-3-19 00:33:20 | 显示全部楼层 |阅读模式
本帖最后由 user3000 于 2012-3-23 15:08 编辑

如标题, 下面代码如何达到父子看起来'和谐'美观点?
有图有码, 希望真相能尽快大白...
简略代码(完成后再放源码区...):
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)
Opt('GuiOnEventMode', 1)
Global $Title = '定时关机工具', $Command_Code = 0 ; 动作标志, 0 关机, 1 重启, 3 执行程序
Global $MainForm, $nMsg, $w = 388, $h = 137
Global $Week_Form, $ch_Box[7], $but[4], _
                $box_Text[7] = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'], _
                $but_Text[4] = ['查看计划', '加入计划', '删除计划', '执行计划']
Global $Radios[4], $R_Text[4] = ['延时', '今日', '每日', '每周'], $R_id
Global $uRadios[3]
Global $Plan_Form, $iHour, $iMin, $L_id, $view_Task, $Execute_Task
Global $iR_Text[3] = ['关闭机器', '重启机器', '运行程序']

$MainForm = GUICreate($Title, $w, $h, -1, -1, -1, 0x00000100)
GUISetOnEvent(-3, '_Exit')
GUICtrlCreateGroup("模式选择", 32, 24, 329, 89, 0x0300); 文本居中
GUICtrlSetFont(-1, 12)
For $i = 0 To 3
        $Radios[$i] = GUICtrlCreateRadio($R_Text[$i], 56 + $i * 76, 61, 55, 25)
        ;GUICtrlSetOnEvent(-1, '_Set_Mode')
        GUICtrlSetFont(-1, 10)
Next
GUICtrlSetState($Radios[0], $GUI_CHECKED)
$R_id = 0

_Set_Plan()

GUISetState(@SW_SHOW, $MainForm)
GUISetState(@SW_SHOW, $Plan_Form)

While 1
        Sleep(88)
WEnd

Func _Set_Plan()
        $Plan_Form = GUICreate('', $w + 3, 100, -2, $h + 4, 0x80880000, 0x00000040, $MainForm) ; 样式 无标题, 建立于父窗口内
        $iHour = GUICtrlCreateInput("0", 38, 16, 25, 21, BitOR(0x2000, 0x0002)) ;数字 右端显示
        GUICtrlCreateLabel("时", 70, 20, 36, 17)
        $iMin = GUICtrlCreateInput("5", 94, 16, 25, 21, BitOR(0x2000, 0x0002))
        GUICtrlCreateLabel("分", 125, 20, 36, 17)
        $L_id = GUICtrlCreateLabel('[' & $R_Text[$R_id] & ']', 165, 20, 36, 17)
        For $i = 0 To 2
                $uRadios[$i] = GUICtrlCreateRadio($iR_Text[$i], 35 + $i * 70, 55)
        Next
        GUICtrlSetState($uRadios[0], 1)
        $view_Task = GUICtrlCreateButton('查看修改', 300, 18, 65, 22)
        GUICtrlSetState(-1, $gui_focus)
        $Execute_Task = GUICtrlCreateButton('执行计划', 300, 55, 65, 22)
EndFunc   ;==>_Set_Plan

Func _Exit()
        Exit
EndFunc   ;==>_Exit
现在效果图:

极不'和谐'吧?
有没子窗口用样式让它尽量和父窗口般配点...
或者有什么别的思路不?

本帖子中包含更多资源

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

×
 楼主| 发表于 2012-3-19 00:36:35 | 显示全部楼层
再上个大点的, 跟桌面背景比较的图..
那凹痕和黑线更明显了...

本帖子中包含更多资源

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

×
发表于 2012-3-19 00:55:48 | 显示全部楼层
要么主窗口也用无标题栏的细边框
要么不用子窗口,在同一窗口解决
发表于 2012-3-19 01:46:43 | 显示全部楼层
本帖最后由 lixiaolong 于 2012-3-19 01:48 编辑

这样是不是好看点?


以前在论坛里看过的代码(win7测试)

_GUIRoundCorners($Plan_Form, 1, 3, 20, 20)
Func _GUIRoundCorners($h_win, $i_x1, $i_y1, $i_x3, $i_y3)
        Local $XS_pos, $XS_ret, $XS_ret2
        $XS_pos = WinGetPos($h_win)
        $XS_ret = DllCall("gdi32.dll", "long", "CreateRoundRectRgn", "long", $i_x1, "long", $i_y1, "long", $XS_pos[2], "long", $XS_pos[3], "long", $i_x3, "long", $i_y3)
        If $XS_ret[0] Then
                $XS_ret2 = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $XS_ret[0], "int", 1)
        EndIf
EndFunc

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +20 收起 理由
user3000 + 20 是好看多了...

查看全部评分

发表于 2012-3-19 07:59:09 | 显示全部楼层
本帖最后由 haijie1223 于 2012-3-19 08:59 编辑

回复 4# lixiaolong


    不错 挺好看的,我也来一个:

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)
Opt('GuiOnEventMode', 1)
Global $Title = '定时关机工具', $Command_Code = 0 ; 动作标志, 0 关机, 1 重启, 3 执行程序
Global $MainForm, $nMsg, $w = 388, $h = 137
Global $Week_Form, $ch_Box[7], $but[4], _
                $box_Text[7] = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'], _
                $but_Text[4] = ['查看计划', '加入计划', '删除计划', '执行计划']
Global $Radios[4], $R_Text[4] = ['延时', '今日', '每日', '每周'], $R_id
Global $uRadios[3]
Global $Plan_Form, $iHour, $iMin, $L_id, $view_Task, $Execute_Task
Global $iR_Text[3] = ['关闭机器', '重启机器', '运行程序']
Global $sui
$MainForm = GUICreate($Title, $w, $h, -1, -1, -1, 0x00000100)
GUISetOnEvent(-3, '_Exit')
GUICtrlCreateGroup("模式选择", 32, 24, 329, 89, 0x0300); 文本居中
GUICtrlSetFont(-1, 12)
For $i = 0 To 3
        $Radios[$i] = GUICtrlCreateRadio($R_Text[$i], 56 + $i * 76, 61, 55, 25)
        ;GUICtrlSetOnEvent(-1, '_Set_Mode')
        GUICtrlSetFont(-1, 10)
Next
GUICtrlSetState($Radios[0], $GUI_CHECKED)
$R_id = 0

_Set_Plan()

GUISetState(@SW_SHOW, $MainForm)
GUISetState(@SW_SHOW, $Plan_Form)

While 1
        move()
        Sleep(200)
WEnd

Func _Set_Plan()
        $Plan_Form = GUICreate('', $w, $h, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), $WS_EX_TOOLWINDOW)
        $iHour = GUICtrlCreateInput("0", 38, 16, 25, 21, BitOR(0x2000, 0x0002)) ;数字 右端显示
        GUICtrlCreateLabel("时", 70, 20, 36, 17)
        $iMin = GUICtrlCreateInput("5", 94, 16, 25, 21, BitOR(0x2000, 0x0002))
        GUICtrlCreateLabel("分", 125, 20, 36, 17)
        $L_id = GUICtrlCreateLabel('[' & $R_Text[$R_id] & ']', 165, 20, 36, 17)
        For $i = 0 To 2
                $uRadios[$i] = GUICtrlCreateRadio($iR_Text[$i], 35 + $i * 70, 55)
        Next
        GUICtrlSetState($uRadios[0], 1)
        $view_Task = GUICtrlCreateButton('查看修改', 300, 18, 65, 22)
        GUICtrlSetState(-1, $gui_focus)
        $Execute_Task = GUICtrlCreateButton('执行计划', 300, 55, 65, 22)
        WinSetOnTop($Plan_Form, "", 1)
        WinSetOnTop($MainForm, "", 1)
EndFunc   ;==>_Set_Plan

Func move() ;跟随主窗口
        Local $x = WinGetPos($MainForm)
        Local $y = WinGetPos($Plan_Form)
        If $y[1] - ($x[1] + $x[3]) <> 0 Or $y[0] - ($x[0] + $x[2]) <> 0 Then
                WinMove($Plan_Form, "", $x[0], $x[1] + $x[3])
        EndIf
EndFunc   ;==>move

Func _Exit()
        Exit
EndFunc   ;==>_Exit

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +10 收起 理由
user3000 + 10 可惜子窗口有标题栏的...

查看全部评分

发表于 2012-3-19 09:01:06 | 显示全部楼层
本帖最后由 haijie1223 于 2012-3-19 09:17 编辑

如果下边的窗口有跟随卡顿的现象,请将38行的sleep值改小。
发表于 2012-3-19 09:02:23 | 显示全部楼层
这个没有更好的解决方法吗?延长窗口不就行了吗?
发表于 2012-3-19 09:26:07 | 显示全部楼层
回复 6# haijie1223

改成消息效果很好,不卡顿~
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)
Opt('GuiOnEventMode', 1)

Global $Title = '定时关机工具', $Command_Code = 0 ; 动作标志, 0 关机, 1 重启, 3 执行程序
Global $MainForm, $nMsg, $w = 388, $h = 137
Global $Week_Form, $ch_Box[7], $but[4], _
                $box_Text[7] = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'], _
                $but_Text[4] = ['查看计划', '加入计划', '删除计划', '执行计划']
Global $Radios[4], $R_Text[4] = ['延时', '今日', '每日', '每周'], $R_id
Global $uRadios[3]
Global $Plan_Form, $iHour, $iMin, $L_id, $view_Task, $Execute_Task
Global $iR_Text[3] = ['关闭机器', '重启机器', '运行程序']
Global $sui
$MainForm = GUICreate($Title, $w, $h, -1, -1, -1, 0x00000100)
GUISetOnEvent(-3, '_Exit')
GUICtrlCreateGroup("模式选择", 32, 24, 329, 89, 0x0300); 文本居中
GUICtrlSetFont(-1, 12)
For $i = 0 To 3
        $Radios[$i] = GUICtrlCreateRadio($R_Text[$i], 56 + $i * 76, 61, 55, 25)
        ;GUICtrlSetOnEvent(-1, '_Set_Mode')
        GUICtrlSetFont(-1, 10)
Next
GUICtrlSetState($Radios[0], $GUI_CHECKED)
$R_id = 0

_Set_Plan()
GUISetState(@SW_SHOW, $MainForm)
GUISetState(@SW_SHOW, $Plan_Form)

;添加的值
GUIRegisterMsg($WM_MOVE, "WM_MOVE")

While 1
        Sleep(200)
WEnd

Func _Set_Plan()
        $Plan_Form = GUICreate('', $w, $h, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), $WS_EX_TOOLWINDOW)
        $iHour = GUICtrlCreateInput("0", 38, 16, 25, 21, BitOR(0x2000, 0x0002)) ;数字 右端显示
        GUICtrlCreateLabel("时", 70, 20, 36, 17)
        $iMin = GUICtrlCreateInput("5", 94, 16, 25, 21, BitOR(0x2000, 0x0002))
        GUICtrlCreateLabel("分", 125, 20, 36, 17)
        $L_id = GUICtrlCreateLabel('[' & $R_Text[$R_id] & ']', 165, 20, 36, 17)
        For $i = 0 To 2
                $uRadios[$i] = GUICtrlCreateRadio($iR_Text[$i], 35 + $i * 70, 55)
        Next
        GUICtrlSetState($uRadios[0], 1)
        $view_Task = GUICtrlCreateButton('查看修改', 300, 18, 65, 22)
        GUICtrlSetState(-1, $gui_focus)
        $Execute_Task = GUICtrlCreateButton('执行计划', 300, 55, 65, 22)
        WinSetOnTop($Plan_Form, "", 1)
        WinSetOnTop($MainForm, "", 1)
        
        ;添加的值
        Local $pos = WinGetPos($MainForm)
        WinMove($Plan_Form, "", $pos[0], $pos[1] + $pos[3])
EndFunc   ;==>_Set_Plan

;添加的值
Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
Local $x = WinGetPos($MainForm)
        Local $y = WinGetPos($Plan_Form)
        If $y[1] - ($x[1] + $x[3]) <> 0 Or $y[0] - ($x[0] + $x[2]) <> 0 Then
                WinMove($Plan_Form, "", $x[0], $x[1] + $x[3])
        EndIf
EndFunc

Func _Exit()
        Exit
EndFunc   ;==>_Exit

评分

参与人数 1金钱 +20 收起 理由
haijie1223 + 20 学习 一直不明白系统消息怎么用,今天学习了 ...

查看全部评分

发表于 2012-3-19 10:13:13 | 显示全部楼层

没必要用子窗口啊,怪了,要用象我这样放里面不就行了
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)
Opt('GuiOnEventMode', 1)
Global $Title = '定时关机工具', $Command_Code = 0 ; 动作标志, 0 关机, 1 重启, 3 执行程序
Global $MainForm, $nMsg, $w = 388, $h = 237
Global $Week_Form, $ch_Box[7], $but[4], _
                $box_Text[7] = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'], _
                $but_Text[4] = ['查看计划', '加入计划', '删除计划', '执行计划']
Global $Radios[4], $R_Text[4] = ['延时', '今日', '每日', '每周'], $R_id
Global $uRadios[3]
Global $Plan_Form, $iHour, $iMin, $L_id, $view_Task, $Execute_Task
Global $iR_Text[3] = ['关闭机器', '重启机器', '运行程序']

$MainForm = GUICreate($Title, $w, $h, -1, -1, -1, 0x00000100)
GUISetOnEvent(-3, '_Exit')
GUICtrlCreateGroup("模式选择", 32, 24, 329, 89, 0x0300); 文本居中
GUICtrlSetFont(-1, 12)
For $i = 0 To 3
        $Radios[$i] = GUICtrlCreateRadio($R_Text[$i], 56 + $i * 76, 61, 55, 25)
        ;GUICtrlSetOnEvent(-1, '_Set_Mode')
        GUICtrlSetFont(-1, 10)
Next
GUICtrlSetState($Radios[0], $GUI_CHECKED)
$R_id = 0

_Set_Plan()

GUISetState(@SW_SHOW, $MainForm)
GUISetState(@SW_SHOW, $Plan_Form)

While 1
        Sleep(88)
WEnd

Func _Set_Plan()
        $Plan_Form = GUICreate('', $w , 100, 0, $h -100, 0x80000000, 0x00000040, $MainForm) ; 样式 无标题, 建立于父窗口内
        $iHour = GUICtrlCreateInput("0", 38, 16, 25, 21, BitOR(0x2000, 0x0002)) ;数字 右端显示
        GUICtrlCreateLabel("时", 70, 20, 36, 17)
        $iMin = GUICtrlCreateInput("5", 94, 16, 25, 21, BitOR(0x2000, 0x0002))
        GUICtrlCreateLabel("分", 125, 20, 36, 17)
        $L_id = GUICtrlCreateLabel('[' & $R_Text[$R_id] & ']', 165, 20, 36, 17)
        For $i = 0 To 2
                $uRadios[$i] = GUICtrlCreateRadio($iR_Text[$i], 35 + $i * 70, 55)
        Next
        GUICtrlSetState($uRadios[0], 1)
        $view_Task = GUICtrlCreateButton('查看修改', 300, 18, 65, 22)
        GUICtrlSetState(-1, $gui_focus)
        $Execute_Task = GUICtrlCreateButton('执行计划', 300, 55, 65, 22)
EndFunc   ;==>_Set_Plan

Func _Exit()
        Exit
EndFunc   ;==>_Exit

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

发表于 2012-3-19 10:44:08 | 显示全部楼层
9楼的可以。
发表于 2012-3-19 12:31:55 | 显示全部楼层
论坛搜索she皮肤不是就可以吗?
发表于 2012-3-19 12:57:33 | 显示全部楼层
回复 9# seniors


    这个同等窗口 很不错
发表于 2012-3-19 14:45:16 | 显示全部楼层
楼主要的是每选择一个按钮出现相应的菜单。。。。。。
 楼主| 发表于 2012-3-19 15:47:41 | 显示全部楼层
楼主要的是每选择一个按钮出现相应的菜单。。。。。。
卫和谐 发表于 2012-3-19 14:45



    正是, 如果同一窗口, 当以星期来做计划任务的话,
    窗口几乎要全部绘制吧?
发表于 2012-3-19 16:36:12 | 显示全部楼层
正是, 如果同一窗口, 当以星期来做计划任务的话,
    窗口几乎要全部绘制吧?
user3000 发表于 2012-3-19 15:47



    真是如此,更没必要外面拖个子窗口了~
TAB 选项卡、内嵌子窗口的显隐、甚至控件组的显隐都可以完成这个简单的要求

评分

参与人数 1金钱 +25 收起 理由
user3000 + 25 好想法...好经验!

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-16 23:54 , Processed in 0.105828 second(s), 32 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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