57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
|
// Copyright 2019 The Walk Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
// +build windows,walk_use_cgo
|
||
|
|
||
|
package walk
|
||
|
|
||
|
import (
|
||
|
"unsafe"
|
||
|
|
||
|
"github.com/lxn/win"
|
||
|
)
|
||
|
|
||
|
// #include <windows.h>
|
||
|
//
|
||
|
// extern void shimRunSynchronized(uintptr_t fb);
|
||
|
// extern unsigned char shimHandleKeyDown(uintptr_t fb, uintptr_t m);
|
||
|
//
|
||
|
// static int mainloop(uintptr_t handle_ptr, uintptr_t fb_ptr)
|
||
|
// {
|
||
|
// HANDLE *hwnd = (HANDLE *)handle_ptr;
|
||
|
// MSG m;
|
||
|
// int r;
|
||
|
//
|
||
|
// while (*hwnd) {
|
||
|
// r = GetMessage(&m, NULL, 0, 0);
|
||
|
// if (!r)
|
||
|
// return m.wParam;
|
||
|
// else if (r < 0)
|
||
|
// return -1;
|
||
|
// if (m.message == WM_KEYDOWN && shimHandleKeyDown(fb_ptr, (uintptr_t)&m))
|
||
|
// continue;
|
||
|
// if (!IsDialogMessage(*hwnd, &m)) {
|
||
|
// TranslateMessage(&m);
|
||
|
// DispatchMessage(&m);
|
||
|
// }
|
||
|
// shimRunSynchronized(fb_ptr);
|
||
|
// }
|
||
|
// return 0;
|
||
|
// }
|
||
|
import "C"
|
||
|
|
||
|
//export shimHandleKeyDown
|
||
|
func shimHandleKeyDown(fb uintptr, msg uintptr) bool {
|
||
|
return (*FormBase)(unsafe.Pointer(fb)).handleKeyDown((*win.MSG)(unsafe.Pointer(msg)))
|
||
|
}
|
||
|
|
||
|
//export shimRunSynchronized
|
||
|
func shimRunSynchronized(fb uintptr) {
|
||
|
(*FormBase)(unsafe.Pointer(fb)).group.RunSynchronized()
|
||
|
}
|
||
|
|
||
|
func (fb *FormBase) mainLoop() int {
|
||
|
return int(C.mainloop(C.uintptr_t(uintptr(unsafe.Pointer(&fb.hWnd))), C.uintptr_t(uintptr(unsafe.Pointer(fb)))))
|
||
|
}
|