我的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") 就可以。
我的Go语言学习之旅七:创建一个GUI窗口的更多相关文章
- Go语言学习笔记(七)杀手锏 Goroutine + Channel
		加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 Goroutine Go语言的主要的功能在于令人简易使用的并行设计,这个方法叫做Goroutine,通过Gorou ... 
- maven学习3,如何创建一个web项目
		Maven学习 (三) 使用m2eclipse创建web项目 1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 ... 
- 我的Go语言学习之旅二:入门初体验 Hello World
		好吧,全部的程序猿们都已经习惯了.学习不论什么一门语言,我们都会以Hello World实例開始我们的学习,我也不例外.先来一个简单的样例 打开编辑器 (能够用记事本,我已经习惯 Notepad++了 ... 
- C语言学习笔记(七)——其它运算符
		 第七章 其它运算符 逗号运算符 逗号运算符:即顺序点,逗号前先运行.后再运行. for循环的运行次数: for(i=n; i<m; + ... 
- [原创] zabbix学习之旅七:如何远程操作被监控机器
		虽然我们已经创建了一个报警系统,但在实际场景中,运维人员从得到报警到实际解决问题有一定的时差,若业务系统没有做高可用,那业务不得不中断,对于某些要求严格的企业级环境,这是不可容忍的,那有没有方法能让z ... 
- R语言学习笔记(七): 排序函数:sort(), rank(), order()
		sort() sort()函数直接对函数进行排序,并返回排序结果. > a <- c(12,4,6,5) > sort(a) [1] 4 5 6 12 rank() rank()函数 ... 
- 我的Go语言学习之旅三:Go语言中的for循环
		这个但是为难我了,我一直是走在WEB前的程序猿,各种循环用起来得心应手.突然间发现到了Go这里竟然行不通了,查阅后才发现,原来Go的for是这样写的. for i:=0;i<10;i++{ fm ... 
- Spring学习之旅(七)--SpringMVC视图
		在之前的实例中我们只是在 Controller 中返回了 home 字符类型的值,而没有直接生成可以在浏览器中直接渲染的 HTML,这是因为 SpringMVC 将请求处理的逻辑和视图渲染的实现进行了 ... 
- dotnet Core学习之旅(三):创建项目
		[重要:文中所有外链不能确保永久有效]>创建解决方案 在VSCode上,可以使用来自开源力量的vscode扩展vscode-solution-explorer来增强VSCode对.NET项目的支 ... 
随机推荐
- 锐动SDK应用于在线教育方面的解决方案
			在线教育 PC端.Android端的屏幕.摄像头录制和直播功能,教师不再拘泥于专业的视频教室进行直播授课. 强大的视频编辑功能,便于课件的制作和不断修改升级. 在线课堂实现了教学视频内容在PC.PAD ... 
- java对于07excel的读、改、写、并触发计算
			InputStream is = null; try { is = new FileInputStream(filePath); } catch (FileNotFoundException e1) ... 
- VMWare 支持的网络连接类型 (VMWare Virtual Network Connection Types)
- POJ_3565_Ants
			题意:给出N个白点和N个黑点,要求用N条不相交的线段把它们连接起来,其中每条线段恰好连接一个白点和一个黑点,每个点恰好连接到一条线段. 分析:因为有结点黑白两色,我们不难想到构造一个二分图,其中每个白 ... 
- 【maven】Description	Resource	Path	Location	Type An error occurred while filtering resources	TESTVIDEO	line
			在maven中构建项目的时候发现了如下错误: Description Resource Path Location Type An error occurred while filtering res ... 
- 【计算几何】二维凸包——Graham's Scan法
			凸包 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内.右图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包. 一组平面上的点, ... 
- 使用Postman Interceptor发送带cookie的请求一直loading的解决法案
			很多web网页开发人员都知道Postman限制由于chrome安全的限制,发不出带cookie和带有自定义头部标签的请求.想要发出由于chrome安全的限制,发不出带cookie和带有自定义头部标签的 ... 
- 热词解析(9) — hangry
			今天给大家介绍一个非常有趣.又超级实用的词!!中文叫"饿极而怒",英文叫... 不知道你有没有这样的经历,当你饿着肚子等着你妈做饭,结果你妈却在麻将桌上不下来,你就越来越饿,越饿越 ... 
- radial profiles of mean streamwise velocity at X/D=3
			matlab code: load aver_ux_array.dat; load z_array.dat; r=z_array(:,); r=r.' r_j=0.00125; r_nor=r/d; ... 
- Ajax_数据格式_JSON
			[JSON] 1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSO ... 
