[Go語言寫介面]二、簡單美化視窗,設定視窗圖示,簡單美化資訊框,建立按鈕和註冊事件

twgh發表於2022-08-27

前言

請先獲取:

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()
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章