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


上一篇中,通過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窗口?那就趕緊行動吧!最后上最終運行結果:


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM