我的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项目的支 ...
随机推荐
- Java反射机制实战——字段篇
首先,我们来认识几个类. Class(java.lang.Class) Class对象是一个特殊对象,每一个类都有一个Class对象,用来创建该类的“常规”对象.可以通过对象的getClass()方法 ...
- Java:一个简捷的可分页的ResultSet实现
内容 前言 JDBC和分页 和具体数据库相关的实现方法 另一种繁琐的实现方法 使用Vector进行分页 一个新的Pageable接口及其实现 Pageable的使用方法 总结 参考资料 关于作者 前言 ...
- 主从 binlog_format 设置关系
1. 主库是row,从库必须是row/mixed.如果是statement,主库有变更时,从库报如下错误(无论什么变更都报错,如insert/update/delete/alter等): La ...
- handlesocket.md
[介绍](http://www.uml.org.cn/sjjm/201211093.asp ) * 查看启动参数 `service mariadb status > st.txt` ...
- ArcGIS 坐标系 整理
刚使用ArcGIS的时候,对坐标系的点一直很混乱,今天想要整理整理. 一.地理坐标系与投影坐标系的区分 首先要能区分地理坐标系(GCS)和投影坐标系(PCS). 上面的是地理坐标系的举例,简单理解为不 ...
- jstree -- 使用JSON 数据组装成树
概述: 前面主要是html数据,这里主要是json数组 1.格式 jsTree需要一个具体格式JSON数据,在标准的语法没有那个字段是必须的-而是那些是你需要的.请记住你可以获取任何你请求的其他属性, ...
- Java线程处理
Java线程处理 创建线程 继承Thread类 public class TestThread extends Thread{ public void run(){ System.out.printl ...
- 02JavaScript基础语法及数据类型
JavaScript基础语法及数据类型 2.1数据类型 2.1.1字符串(String) 用单引号或双引号括起来的零个或多个单一的字符所组成. 2.1.2数值(Number) 包含整数或浮点数. 2. ...
- wpf mvvm模式下 在ViewModel关闭view
本文只是博主用来记录笔记,误喷 使用到到了MVVM中消息通知功能 第一步:在需要关闭窗体中注册消息 public UserView() { this.DataContext = new UserVie ...
- 攻破javascript面试的完美指南【译】
攻破javascript面试的完美指南(开发者视角) 0. 前言 本文适合有一定js基础的前端开发人员阅读.原文是我google时无意发现的, 被一些知识点清晰的解析所打动, 决定翻译并记录下来.这个 ...