Go語言Windows程式設計(2)–第一個視窗程序

來源:互聯網
上載者:User

上一篇中,通過winapi,我們成功的建立了一個彈出訊息視窗,其中用到了MessageBox(...)這個介面。今天,正式開始寫視窗程序,如果你熟悉C語言的windows程式,你就會發現後面的程式和C語言的很像,沒錯,其實就是用Go的文法去調用windows的api罷了,其基本結構還是類似的。說了那麼多,還是先上些代碼吧:

如上,首先是匯入一些需要用到的包,其中

github.com/lxn/go-winapi 就是封裝了windows api的一個開源包,和前一篇的一樣哈,originWndProc聲明了一個視窗控制代碼後面要用。

再後面是聲明了視窗的高度和寬度的常量。分別是500和300,最下面的_TEXT方法的作用是將string類型資料轉換成無符號16位整數指標的,後面將文字寫到視窗上時需要調用。

 

再看剩下的:

上面的是一個視窗訊息處理常式。它主要用來接收視窗訊息,並根據訊息類型來進行處理,如果不是很明白沒關係,目前只要知道它是處理視窗訊息的一個方法就行了,具體的機制以後專門講。

 

最後寫上主函數:

 

 

func main(){
    var message MSG
    var hwnd HWND
    var wproc uintptr
    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        _TEXT("EDIT"),
        _TEXT("HELLO GUI"),
        WS_OVERLAPPEDWINDOW,
        (GetSystemMetrics(SM_CXSCREEN)-winWidth)>>1,
        (GetSystemMetrics(SM_CYSCREEN)-winHeight)>>1,
        winWidth,
        winHeight,
        0,
        0,
        GetModuleHandle(nil),
        unsafe.Pointer(nil))
        wproc = syscall.NewCallback(WndProc)
        originWndProc = HWND(SetWindowLong(hwnd,GWL_WNDPROC, int32(wproc)))
        ShowWindow(hwnd,SW_SHOW)
        for{
            if GetMessage(&message,0,0,0) == 0{break}
            TranslateMessage(&message)
            DispatchMessage(&message)
        }
    os.Exit(int(message.WParam))
}

 

其中的CreateWindowEx方法就是建立了一個視窗,方法的參數具體參考windows的api。建立後視窗後會返回一個視窗控制代碼hwnd,最後調用ShowWindow將hwnd控制代碼傳給它,就能成功顯示視窗了

最後的一個for迴圈就是迴圈接收接收到訊息佇列中的視窗訊息,並交給之前的訊息處理訊息處理。當然實際過程沒那麼簡單,目前,主要先實現功能,嘿嘿。最近忙著很多項目而且人也越來越懶,所以文章寫得有些簡單,千萬別扔磚啊。。。。。。以後會逐漸補上具體的知識細節,當然,如果你等不及了,可以自己研究,其實和c的Windows程式設計一樣的。是不是心動了?想看看go語言的Windows視窗?那就趕緊行動吧!最後上最終運行結果:

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.