Go語言Windows程序設計(2)--第一個窗口程序

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

如上,首先是導入一些須要用到的包,其中github

github.com/lxn/go-winapi 就是封裝了windows api的一個開源包,和前一篇的同樣哈,originWndProc聲明瞭一個窗口句柄後面要用。windows

再後面是聲明瞭窗口的高度和寬度的常量。分別是500和300,最下面的_TEXT方法的做用是將string類型數據轉換成無符號16位整數指針的,後面將文字寫到窗口上時須要調用。api

 

再看剩下的:函數

上面的是一個窗口消息處理程序。它主要用來接收窗口消息,並根據消息類型來進行處理,若是不是很明白不要緊,目前只要知道它是處理窗口消息的一個方法就好了,具體的機制之後專門講。ui

 

最後寫上主函數:spa

 

 

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窗口?那就趕忙行動吧!最後上最終運行結果:指針

相關文章
相關標籤/搜索