文档章节

golang 开发windows应用

KelvinQ
 KelvinQ
发布于 2015/02/05 17:45
字数 545
阅读 1033
收藏 14

闲着无聊又玩go语言找虐。。。——用go开发windows应用程序

想要用go开发windows应用必须先要安装必要的组件:

   walk集成了很多windows的控件

go get github.com/lxn/walk

   win是go调用windowsApi的一种实现

go get github.com/lxn/win

  rsrc是连接walk/win和windows动态连接的工具

go get github.com/akavel/rsrc

  有了这些我们就能实际的编码了

  先测试一下winApi的有效性:

  看了一下这位写的,比较到位,把之前编译运行报错的问题也找到了,恩感谢,但是源码里有段字符串拼错了

  更正一下:

// GoWin project GoWin.go
package main

import (
    "github.com/lxn/win"
    "strconv"
    "syscall"
)

func _TEXT(_str string) *uint16 {
    return syscall.StringToUTF16Ptr(_str)
}
func _toString(_n int32) string {
    return strconv.Itoa(int(_n))
}
func main() {
    var hwnd win.HWND
    cxScreen := win.GetSystemMetrics(win.SM_CXSCREEN)
    cyScreen := win.GetSystemMetrics(win.SM_CYSCREEN)
    win.MessageBox(hwnd, _TEXT("屏幕长-:"+_toString(cxScreen)+"宽:"+_toString(cyScreen)), _TEXT("消息<a target=\"_blank\" href=\"http://blog.csdn.net/songbohr\">http://blog.csdn.net/songbohr</a>"), win.MB_OK)
}

注意:win组件里的phd.go中,

//这行要注释,如果你不是WIN7的狂热爱好者的话
//pdh_AddEnglishCounterW = libpdhDll.MustFindProc("PdhAddEnglishCounterW")

  

  http://blog.csdn.net/songbohr/article/details/10511041

编译运行成功,注意这里必须是package main不然不会生产exe

package main

接下来试一下walk能不能行:

package main

import (
    "github.com/lxn/walk"
    . "github.com/lxn/walk/declarative"
    "strings"
)

func main() {
    var inTE, outTE *walk.TextEdit

    MainWindow{
        Title:   "SCREAMO",
        MinSize: Size{600, 400},
        Layout:  VBox{},
        Children: []Widget{
            HSplitter{
                Children: []Widget{
                    TextEdit{AssignTo: &inTE},
                    TextEdit{AssignTo: &outTE, ReadOnly: true},
                },
            },
            PushButton{
                Text: "SCREAM",
                OnClicked: func() {
                    outTE.SetText(strings.ToUpper(inTE.Text()))
                },
            },
        },
    }.Run()
}

编译运行成功,但是运行没结果,

搞了半天,仔细看了一下walk的文档

原来是要这样搞:

首先新建一个文件比如test.manifest(感觉做着绝对是个android粉)填入如下代码

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
        <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
        <dependency>
            <dependentAssembly>
                <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
            </dependentAssembly>
        </dependency>
    </assembly>

运行如下命令

rsrc -manifest 你应用的名字.manifest -o rsrc.syso
go build
go build -ldflags="-H windowsgui"

运行生成的exe,就能看到熟悉的windows界面了

感觉go开发windows应用还是不怎么方便,而且不太经济,调试和编译耗费的精力很大,

期待以后开发工具能再进一步优化一下


© 著作权归作者所有

共有 人打赏支持
KelvinQ

KelvinQ

粉丝 8
博文 180
码字总数 15452
作品 2
苏州
程序员
私信 提问
在Windows上运行Linux

之前了解过一些适用于linux的Windows子系统,最近又听人提起,于是在自己的Windows 10专业版上安装了一个Ubuntu。运行起来还真方便,以后在windows上开发Linux程序就不需要安装桌面虚拟化应用...

Airship
2018/05/06
0
0
golang: Baa框架文章列表

database: mongodb服务启动脚本 golang: Baa框架中的依赖注入(DI)是个什么鬼? golang go get出现unrecognized import path 微服务实践 - golang Thrift 开发一个月的感受 Algorithm: 移动...

d_watson
2016/06/13
33
0
Golang资料集

该资源的github地址:Qix 《Platform-native GUI library for Go》 介绍:跨平台的golang GUI库,支持Windows(xp以上),Unix,Mac OS X(Mac OS X 10.7以上) 《Gopm 快速入门》 介绍:Gopm(Go 包管...

ty4z2008
2016/03/11
0
0
windows 下的 eclipse安装goclipse 配置golang开发环境

下载goclipse eclipse plugins http://goclipse.googlecode.com/svn/trunk/goclipse-update-site/ (建议使用proxy下载,除非你能直接访问;)) 我在百度网盘上传了最新的goclipse插件包,提...

hotkit
2014/11/22
0
0
使用SWIG桥接Golang和Windows DLL

最近看了下Go语言,利用Dynamsoft Barcode SDK做了一个简单的Golang条形码扫描。这里分享下如何使用SWIG来快速封装底层C/C++接口。 参考原文:How to Use SWIG to Link Windows DLL with Go...

yushulx
2015/11/24
273
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的Async I/O

序 本文主要研究一下flink的Async I/O 实例 // This example implements the asynchronous request and callback with Futures that have the// interface of Java 8's futures (which is t......

go4it
13分钟前
0
0
一文详解微服务架构的数据设计

微服务是一个软件架构模式,对微服务的讨论大多集中在容器或其他技术是否能很好的实施微服务这些方面。 本文将从以下几个角度来和大家分享在微服务架构下进行数据设计需要关注的地方,旨在帮...

java菜分享
23分钟前
2
0
Java并发编程之美读书笔记-并发编程基础1

线程 进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,比如idea运行代码时的jvm是一个进程,但是CPU资源比较特殊,它是被分配到线程的,线程是进程的一个执行路...

hensemlee
36分钟前
1
0
【剑指offer纪念版】--10 进制1的个数

10. 题目 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。 解题思路   把一个整数减去1,再和原整...

细节探索者
51分钟前
2
0
本科毕业平均年薪 30 万!经济寒冬挡不住 AI 人才的火热!

互联网行业遭遇寒冬,企业纷纷裁员缩招,而 BAT 和硅谷明星公司对 AI 人才的投入却并不见放缓。为争夺相关人才,给应届毕业生开出的平均年薪高达 30 万。 而 TensorFlow 作为当下最流行的深度...

AI女神
56分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部