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") 就可以。

  • 相关阅读:
    Hash(学习笔记)
    [POI2012]OKR-A Horrible Poe(hash+线性筛素数)
    质数(学习笔记)
    [AHOI2014/JSOI2014]宅男计划(贪心+三分)
    [HEOI2015]定价(贪心+数学)
    Trie字典树(学习笔记)
    CF258D. Little Elephant and Broken Sorting(DP+概率期望)
    矩阵(01背包+滚动数组)
    [2015北大自招夏令营]产品排序(区间DP)
    HTML
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7120655.html
Copyright © 2011-2022 走看看