前言
請先獲取:
go get github.com/twgh/xcgui
網盤裡有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()
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結