• 我的Go语言学习之旅七:创建一个GUI窗口


    在上次中,刚刚学过了  弹窗效果。这里再接着学习一下怎样创建一个窗口。

    还是老路子,先上代码:

    package main
    
    import (
    "github.com/lxn/go-winapi"
    "syscall"
    "strconv"
    "unsafe"
    )
    
    var (
    orainWndProc winapi.HWND
    )
    
    const(
    winWidth int32 = 500
    winHeight int32 = 300
    )
    
    func _TEXT(_str string) *uint16{
    return syscall.StringToUTF16Ptr(_str)
    }
    
    func _toString(_n int32) string{
    return strconv.Itoa(int(_n))
    }
    
    func WndProc(hwnd winapi.HWND,msg uint32,wparam uintptr,lparam uintptr) uintptr{
    return winapi.CallWindowProc(uintptr(orainWndProc),hwnd,msg,wparam,lparam)
    }
    
    func main(){
    var message winapi.MSG
    var hwnd winapi.HWND
    var wproc uintptr
    hwnd = winapi.CreateWindowEx(
    winapi.WS_EX_CLIENTEDGE,
    _TEXT("EDIT"),
    _TEXT("Hello World"),
    winapi.WS_OVERLAPPEDWINDOW,
    (winapi.GetSystemMetrics(winapi.SM_CXSCREEN)-winWidth)>>1,
    (winapi.GetSystemMetrics(winapi.SM_CYSCREEN)-winHeight)>>1,
    winWidth,
    winHeight,
    0,
    0,
    winapi.GetModuleHandle(nil),
    unsafe.Pointer(nil))
    wproc = syscall.NewCallback(WndProc)
    orainWndProc = winapi.HWND(winapi.SetWindowLong(hwnd,winapi.GWL_WNDPROC, int32(wproc)))
    winapi.ShowWindow(hwnd,winapi.SW_SHOW)
    for{
    if winapi.GetMessage(&message,0,0,0) == 0{break}
    winapi.TranslateMessage(&message)
    winapi.DispatchMessage(&message)
    }
    }
    看起来非常复杂,细心的话会发现事实上这些都是引用了WINDOW提供的API,咱们能够阅读WIN提供的各API生成我们所须要的界面窗口。

    值得一提的是,这里你会看到 _TEXT("EDIT") 这说明创建的是一个编辑框,假设想要创建一个button则改为 _TEXT("BUTTON") 就可以。

  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7120655.html
Copyright © 2020-2023  润新知