zoukankan      html  css  js  c++  java
  • 我的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") 就可以。

  • 相关阅读:
    MQTT学习笔记——Yeelink MQTT维修 采用mqtt.js和paho-mqtt
    ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
    于iOS跳转到应用程序AppStore
    C++学习笔记33 转换操作符
    Win32 Windows规划 三
    [2014 Regional]牡丹江 H Hierarchical Notation 做题记录
    序言树,为了,序后,(递归)
    Visual Studio Code尝试体验
    2015第40周二Node学习
    2015第40周一Node学习
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7120655.html
Copyright © 2011-2022 走看看