func (s *Window) Run() { // for system drag-n-drop // win.OleInitialize() // defer win.OleUninitialize() s.run() // start main gui message loop var msg win.MSG for win.GetMessage(&msg, 0, 0, 0) > 0 { win.TranslateMessage(&msg) win.DispatchMessage(&msg) } }
func WinMain(Inst win.HINSTANCE) int32 { // 1. 注册窗口类 atom := MyRegisterClass(Inst) if atom == 0 { fmt.Println("注册窗口类失败:", win.GetLastError()) return 0 } fmt.Println("注册窗口类成功", atom) // 2. 创建窗口 wnd := win.CreateWindowEx(win.WS_EX_APPWINDOW, syscall.StringToUTF16Ptr("主窗口类"), nil, win.WS_OVERLAPPEDWINDOW|win.WS_CLIPSIBLINGS, win.CW_USEDEFAULT, win.CW_USEDEFAULT, win.CW_USEDEFAULT, win.CW_USEDEFAULT, 0, 0, Inst, nil) if wnd == 0 { fmt.Println("创建窗口失败", win.GetLastError()) return 0 } fmt.Println("创建窗口成功", wnd) win.ShowWindow(wnd, win.SW_SHOW) win.UpdateWindow(wnd) // load file gohl.EnableDebug() if err := gohl.LoadFile(wnd, "a.html"); err != nil { println("LoadFile failed", err.Error()) return 0 } ui(wnd) // 3. 主消息循环 var msg win.MSG msg.Message = win.WM_QUIT + 1 // 让它不等于 win.WM_QUIT for win.GetMessage(&msg, 0, 0, 0) > 0 { win.TranslateMessage(&msg) win.DispatchMessage(&msg) } return int32(msg.WParam) }
func WinMain(Inst win.HINSTANCE) int32 { // RegisterClass atom := MyRegisterClass(Inst) if atom == 0 { fmt.Println("RegisterClass failed:", win.GetLastError()) return 0 } fmt.Println("RegisterClass ok", atom) // CreateWindowEx wnd := win.CreateWindowEx(win.WS_EX_APPWINDOW, syscall.StringToUTF16Ptr(wndClassName), nil, win.WS_OVERLAPPEDWINDOW|win.WS_CLIPSIBLINGS, win.CW_USEDEFAULT, win.CW_USEDEFAULT, win.CW_USEDEFAULT, win.CW_USEDEFAULT, 0, 0, Inst, nil) if wnd == 0 { fmt.Println("CreateWindowEx failed:", win.GetLastError()) return 0 } fmt.Println("CreateWindowEx done", wnd) win.ShowWindow(wnd, win.SW_SHOW) win.UpdateWindow(wnd) // load file gohl.EnableDebug() if err := gohl.LoadFile(wnd, "a.html"); err != nil { println("LoadFile failed", err.Error()) return 0 } // main message loop var msg win.MSG for win.GetMessage(&msg, 0, 0, 0) > 0 { win.TranslateMessage(&msg) win.DispatchMessage(&msg) } return int32(msg.WParam) }
func (fb *FormBase) Run() int { fb.startingPublisher.Publish() var msg win.MSG for fb.hWnd != 0 { switch win.GetMessage(&msg, 0, 0, 0) { case 0: return int(msg.WParam) case -1: return -1 } if !win.IsDialogMessage(fb.hWnd, &msg) { win.TranslateMessage(&msg) win.DispatchMessage(&msg) } runSynchronized() } return 0 }