Skip to content
twgh edited this page Jul 2, 2022 · 3 revisions

前言

请先获取:

go get github.com/twgh/xcgui

然后到网盘下载xcgui.dll,百度云 , 蓝奏云

网盘里有64位的和32位的dll,一般选择64位的,go编译的程序默认也是64位的。

xcgui.dll需要和编译出来的程序放在一起,但每写一个程序都重复放的话就很麻烦了。

在开发时我建议把xcgui.dll放到C:\Windows\System32目录下,这样就不需要每次都把dll和程序放在一起了。

一、设置窗口透明类型,给窗口添加阴影,设置边框大小,窗口透明度,圆角

一

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()
}

二、设置窗口图标

二

ico图标可以自己随便找一个改名为1.ico,和源码文件放在一起。

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()
}

三、创建按钮,注册事件,简单美化信息框

三

  • 所有封装好的窗口组件都在widget包里。
  • 事件函数都是以Event开头的。
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()
}