<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      用Go寫(xiě)Windows桌面應(yīng)用 - 使用Form

      幾個(gè)月以前看到了Go的消息,讀完入門(mén)PPT之后,便有種感覺(jué),這就是我想象中的語(yǔ)言。語(yǔ)法簡(jiǎn)單,寫(xiě)起來(lái)手感極好,設(shè)計(jì)則處處透著簡(jiǎn)潔。

      隨后便開(kāi)始用它代替python寫(xiě)一些常用小工具,堪稱得心應(yīng)手。幾個(gè)月以后,日益離不開(kāi)了,再用別的語(yǔ)言時(shí)總覺(jué)得缺了點(diǎn)什么。

      我很喜歡寫(xiě)桌面應(yīng)用,之前一直用C++,但實(shí)在不喜歡它那復(fù)雜的設(shè)計(jì),而且也沒(méi)有找到合心意的UI庫(kù)。此時(shí)心里冒出了一個(gè)念頭,用Go寫(xiě)一套UI庫(kù)。很大膽,很冒險(xiǎn),甚至很二。很多人都提醒到,UI庫(kù)這種龐大的東西靠一個(gè)人是不可能完成的。我也經(jīng)常在掙扎,但還是沒(méi)忍住這股沖動(dòng),我動(dòng)手了!

      從零開(kāi)始封裝win32 api,工作量挺大的,但好在已經(jīng)有很多前輩已經(jīng)在C++里面做過(guò)同樣的事情了,所以倒也還順利。

      好了,話不多說(shuō),就先看看代碼吧!是騾子是馬拉出來(lái)溜溜。

      第一步,先安裝gform,也就是我封裝的UI庫(kù)。確認(rèn)用的是最新的Weekly版本的Go,然后打開(kāi)命令行運(yùn)行下面兩行。

      go get github.com/AllenDang/gform

      go install github.com/AllenDang/gform

      搞定,因?yàn)間o命令會(huì)自動(dòng)檢測(cè)庫(kù)依賴,所以也會(huì)順帶把w32,我封裝的win32 api庫(kù),安裝好。

      好了,現(xiàn)在可以創(chuàng)建一個(gè)空窗體。

      package main

      import (
          "github.com/AllenDang/gform"
      )

      func main() {
          gform.Init()

          mainform := gform.NewForm(nil)
          mainform.SetSize(300, 200)
          mainform.Center()
          mainform.Show()

          gform.RunMainLoop()
      }

      用下面命令行編譯

      go tool 8g app.go

      go tool 8l –s –Hwindowsgui –o app.exe app.8

      運(yùn)行app.exe,窗體出來(lái)了,應(yīng)用程序體積706kb,沒(méi)有任何依賴的dll,用upx壓縮后219kb,很好,我滿意了。

      現(xiàn)在來(lái)添加一個(gè)按鈕吧,點(diǎn)擊它之后能彈出一個(gè)“Hello world”的消息框。

      先添加對(duì)"w32”這個(gè)包的應(yīng)用

      import (
          "github.com/AllenDang/gform"
          "github.com/AllenDang/w32"
      )

      然后添加按鈕

      btnOk := gform.NewPushButton(mainform)
      btnOk.SetCaption("點(diǎn)我")
      btnOk.SetPos(100, 10)
      btnOk.OnLBUp().Attach(btnOK_OnLBUp)

      添加事件處理函數(shù)

      func btnOK_OnLBUp(arg *gform.EventArg) {
          gform.MsgBox(arg.Sender(), "消息", "Hello world", w32.MB_OK|w32.MB_ICONINFORMATION)
      }

      搞定!修改后的完整代碼如下

      package main

      import (
          "github.com/AllenDang/gform"
          "github.com/AllenDang/w32"
      )

      func btnOK_OnLBUp(arg *gform.EventArg) {
          gform.MsgBox(arg.Sender(), "消息", "Hello world", w32.MB_OK|w32.MB_ICONINFORMATION)
      }

      func main() {
          gform.Init()

          mainform := gform.NewForm(nil)
          mainform.SetSize(300, 200)
          mainform.Center()

          btnOk := gform.NewPushButton(mainform)
          btnOk.SetCaption("點(diǎn)我")
          btnOk.SetPos(100, 10)
          btnOk.OnLBUp().Attach(btnOK_OnLBUp)

          mainform.Show()

          gform.RunMainLoop()
      }

      運(yùn)行,怎么樣?

      image

      夠簡(jiǎn)單嗎?恩,我承認(rèn),不簡(jiǎn)單,純編碼的方式創(chuàng)建UI很折磨人,特別是控件定位。別著急,gform還支持另外一種方式創(chuàng)建UI,使用資源文件,其實(shí)熟悉win32 gui體系的朋友應(yīng)該很熟悉這種方式。

      另外,大家也可能注意到按鈕的樣式不正常,并沒(méi)有應(yīng)用windows系統(tǒng)的控件樣式,這在下一篇里面會(huì)提到解決方法。

      posted @ 2012-02-15 13:22  AllenDang  閱讀(8326)  評(píng)論(15)    收藏  舉報(bào)
      主站蜘蛛池模板: 欧美乱妇高清无乱码免费| 人妻丰满熟妇无码区免费| 凯里市| 日本乱码在线看亚洲乱码| 九九热热久久这里只有精品| www免费视频com| 亚洲中文字幕日韩精品| 亚洲天堂男人的天堂在线| 亚洲精品日韩精品久久| 秋霞电影网| 国产精品无码久久久久AV| 石原莉奈日韩一区二区三区| 九九在线精品国产| 亚洲国产精品综合久久20| 婷婷色综合成人成人网小说 | 免费无码AV一区二区波多野结衣| 国产成人无码综合亚洲日韩| 欧美黑人巨大videos精品| 亚洲国产成人精品女久久| 91久久精品美女高潮不断| 成人精品一区日本无码网| 少妇高潮激情一区二区三| 狠狠色噜噜狠狠狠狠2021| 国产成人高清亚洲综合| 国产伦精区二区三区视频| 免费黄色大全一区二区三区| 国产精品伦人视频免费看| 色熟妇人妻久久中文字幕| 最新的国产成人精品2020| 无码中文字幕人妻在线一区| 亚洲男人天堂东京热加勒比| 国产成人精品1024免费下载| 毛片亚洲AV无码精品国产午夜| 石原莉奈日韩一区二区三区| 在线天堂最新版资源| 极品无码国模国产在线观看| 国产亚洲av夜间福利香蕉149| 亚洲国产av剧一区二区三区 | 亚洲中文字幕伊人久久无码| h动态图男女啪啪27报gif| 国内自拍偷拍福利视频看看|