func MustRegisterWindowClassWithWndProcPtr(className string, wndProcPtr uintptr) { if registeredWindowClasses[className] { panic("window class already registered") } hInst := win.GetModuleHandle(nil) if hInst == 0 { panic("GetModuleHandle") } hIcon := win.LoadIcon(0, (*uint16)(unsafe.Pointer(uintptr(win.IDI_APPLICATION)))) if hIcon == 0 { panic("LoadIcon") } hCursor := win.LoadCursor(0, (*uint16)(unsafe.Pointer(uintptr(win.IDC_ARROW)))) if hCursor == 0 { panic("LoadCursor") } var wc win.WNDCLASSEX wc.CbSize = uint32(unsafe.Sizeof(wc)) wc.LpfnWndProc = wndProcPtr wc.HInstance = hInst wc.HIcon = hIcon wc.HCursor = hCursor wc.HbrBackground = win.COLOR_BTNFACE + 1 wc.LpszClassName = syscall.StringToUTF16Ptr(className) if atom := win.RegisterClassEx(&wc); atom == 0 { panic("RegisterClassEx") } registeredWindowClasses[className] = true }
func MyRegisterClass(hInstance win.HINSTANCE) (atom win.ATOM) { var wc win.WNDCLASSEX wc.CbSize = uint32(unsafe.Sizeof(wc)) wc.Style = win.CS_HREDRAW | win.CS_VREDRAW wc.LpfnWndProc = syscall.NewCallback(WndProc) wc.CbClsExtra = 0 wc.CbWndExtra = 0 wc.HInstance = hInstance wc.HbrBackground = win.GetSysColorBrush(win.COLOR_WINDOWFRAME) wc.LpszMenuName = syscall.StringToUTF16Ptr("") wc.LpszClassName = syscall.StringToUTF16Ptr(wndClassName) wc.HIconSm = win.LoadIcon(0, win.MAKEINTRESOURCE(win.IDI_APPLICATION)) wc.HIcon = win.LoadIcon(0, win.MAKEINTRESOURCE(win.IDI_APPLICATION)) wc.HCursor = win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_ARROW)) return win.RegisterClassEx(&wc) }