标签:
闲着无聊又玩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应用还是不怎么方便,而且不太经济,调试和编译耗费的精力很大,
期待以后开发工具能再进一步优化一下
标签:
原文地址:http://my.oschina.net/u/252343/blog/375837