【Go语言写界面】二、简单美化窗口,设置窗口图标,简单美化信息框,创建按钮和注册事件

twgh · · 1249 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

## 前言 请先获取: ```go go get github.com/twgh/xcgui ``` 然后到网盘下载xcgui.dll,[百度云](https://pan.baidu.com/s/1rC3unQGaxnRUCMm8z8qzvA?pwd=1111) , [蓝奏云](https://wwi.lanzoup.com/b0cqd6nkb) 网盘里有64位的和32位的dll,一般选择64位的,go编译的程序默认也是64位的。 xcgui.dll需要和编译出来的程序放在一起,但每写一个程序都重复放的话就很麻烦了。 在开发时我建议把xcgui.dll放到C:\Windows\System32目录下,这样就不需要每次都把dll和程序放在一起了。 ## 一、设置窗口透明类型,给窗口添加阴影,设置边框大小,窗口透明度,圆角 ![一](https://img-blog.csdnimg.cn/2fa9064b069f43c396b27026db031975.png#pic_center) ```go package main import ( "github.com/twgh/xcgui/app" "github.com/twgh/xcgui/window" "github.com/twgh/xcgui/xcc" ) func main() { // 炫彩_初始化, 参数填true是启用D2D硬件加速, 效果更好. 但xp系统不支持d2d, 这时候你就得填false来关闭d2d了 a := app.New(true) // 创建普通窗口, 宽430, 高300, 标题是"xcgui", xcc.Window_Style_Default是使用默认窗口风格, xcc.Window_Style_Drag_Window是允许拖动窗口 w := window.New(0, 0, 430, 300, "xcgui", 0, xcc.Window_Style_Default|xcc.Window_Style_Drag_Window) // 设置窗口边框大小:标题栏高度34 w.SetBorderSize(0, 34, 0, 0) // 设置窗口透明类型:阴影窗口, 带透明通道, 边框阴影, 窗口透明或半透明 w.SetTransparentType(xcc.Window_Transparent_Shadow) // 设置窗口透明度:255就是不透明 w.SetTransparentAlpha(255) // 设置窗口阴影:阴影大小8, 深度255, 圆角内收大小10, 是否强制直角false, 阴影颜色0也就是黑色 w.SetShadowInfo(8, 255, 10, false, 0) // 显示窗口 w.Show(true) // 运行消息循环, 程序会被阻塞在这里不退出, 当炫彩窗口数量为0时退出 a.Run() // 退出界面库释放资源 a.Exit() } ``` ## 二、设置窗口图标 ![二](https://img-blog.csdnimg.cn/22f6a9bd98054d8f8fb77a5d0307a37a.png#pic_center) ico图标可以自己随便找一个改名为`1.ico`,和源码文件放在一起。 ```go package main import ( _ "embed" "github.com/twgh/xcgui/app" "github.com/twgh/xcgui/window" "github.com/twgh/xcgui/xc" "github.com/twgh/xcgui/xcc" ) //go:embed 1.ico var icon []byte // 窗口图标句柄 var hIcon = 0 func main() { // 炫彩_初始化, 参数填true是启用D2D硬件加速, 效果更好. 但xp系统不支持d2d, 这时候你就得填false来关闭d2d了 a := app.New(true) // 创建普通窗口, 宽430, 高300, 标题是"xcgui", xcc.Window_Style_Default是使用默认窗口风格, xcc.Window_Style_Drag_Window是允许拖动窗口 w := window.New(0, 0, 430, 300, "xcgui", 0, xcc.Window_Style_Default|xcc.Window_Style_Drag_Window) // 设置窗口边框大小:标题栏高度34 w.SetBorderSize(0, 34, 0, 0) // 设置窗口透明类型:阴影窗口, 带透明通道, 边框阴影, 窗口透明或半透明 w.SetTransparentType(xcc.Window_Transparent_Shadow) // 设置窗口透明度:255就是不透明 w.SetTransparentAlpha(255) // 设置窗口阴影:阴影大小8, 深度255, 圆角内收大小10, 是否强制直角false, 阴影颜色0也就是黑色 w.SetShadowInfo(8, 255, 10, false, 0) // 从内存加载图片自适应大小 hIcon = xc.XImage_LoadMemoryAdaptive(icon, 0, 0, 0, 0) // 因为下面写信息框还要用, 所以这里禁止图片自动销毁, 这样就可以复用了, 否则用过之后它会自动释放掉的 xc.XImage_EnableAutoDestroy(hIcon, false) // 设置窗口图标 w.SetIcon(hIcon) // 显示窗口 w.Show(true) // 运行消息循环, 程序会被阻塞在这里不退出, 当炫彩窗口数量为0时退出 a.Run() // 退出界面库释放资源 a.Exit() } ``` ## 三、创建按钮,注册事件,简单美化信息框 ![三](https://img-blog.csdnimg.cn/f46396b58efd4901acabf658dc23dc0a.png#pic_center) - 所有封装好的窗口组件都在**widget**包里。 - 事件函数都是以**Event**开头的。 ```go package main import ( _ "embed" "github.com/twgh/xcgui/app" "github.com/twgh/xcgui/widget" "github.com/twgh/xcgui/window" "github.com/twgh/xcgui/xc" "github.com/twgh/xcgui/xcc" ) //go:embed 1.ico var icon []byte // 窗口图标句柄 var hIcon = 0 func main() { // 炫彩_初始化, 参数填true是启用D2D硬件加速, 效果更好. 但xp系统不支持d2d, 这时候你就得填false来关闭d2d了 a := app.New(true) // 创建普通窗口, 宽430, 高300, 标题是"xcgui", xcc.Window_Style_Default是使用默认窗口风格, xcc.Window_Style_Drag_Window是允许拖动窗口 w := window.New(0, 0, 430, 300, "xcgui", 0, xcc.Window_Style_Default|xcc.Window_Style_Drag_Window) // 设置窗口边框大小:标题栏高度34 w.SetBorderSize(0, 34, 0, 0) // 设置窗口透明类型:阴影窗口, 带透明通道, 边框阴影, 窗口透明或半透明 w.SetTransparentType(xcc.Window_Transparent_Shadow) // 设置窗口透明度:255就是不透明 w.SetTransparentAlpha(255) // 设置窗口阴影:阴影大小8, 深度255, 圆角内收大小10, 是否强制直角false, 阴影颜色0也就是黑色 w.SetShadowInfo(8, 255, 10, false, 0) // 从内存加载图片自适应大小 hIcon = xc.XImage_LoadMemoryAdaptive(icon, 0, 0, 0, 0) // 因为下面写信息框还要用, 所以这里禁止图片自动销毁, 这样就可以复用了, 否则用过之后它会自动释放掉的 xc.XImage_EnableAutoDestroy(hIcon, false) // 设置窗口图标 w.SetIcon(hIcon) // 创建按钮 btn := widget.NewButton(20, 50, 100, 30, "MessageBox", w.Handle) // 注册按钮事件 btn.Event_BnClick(func(pbHandled *bool) int { // 创建信息框, 本质是一个模态窗口 hWindow := a.Msg_Create("标题", "内容", xcc.MessageBox_Flag_Ok|xcc.MessageBox_Flag_Icon_Info, w.GetHWND(), xcc.Window_Style_Modal) // 设置窗口边框大小 xc.XWnd_SetBorderSize(hWindow, 1, 34, 1, 1) // 设置窗口图标 xc.XWnd_SetIcon(hWindow, hIcon) // 显示模态窗口 xc.XModalWnd_DoModal(hWindow) return 0 }) // 显示窗口 w.Show(true) // 运行消息循环, 程序会被阻塞在这里不退出, 当炫彩窗口数量为0时退出 a.Run() // 退出界面库释放资源 a.Exit() } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1249 次点击  ∙  1 赞  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传