github.com/as/shiny@v0.8.2/driver/windriver/doc.go (about) 1 // Copyright 2015 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package windriver provides the Windows driver for accessing a screen. 6 package windriver // import "github.com/as/shiny/driver/windriver" 7 8 /* 9 Implementation Details 10 11 On Windows, GUI is managed via user code and OS sending messages to 12 a window. These messages include paint events, input events and others. 13 Any thread that hosts GUI must handle incoming window messages through 14 a "message loop". 15 16 windriver designates the thread that calls Main as the GUI thread. 17 It locks this thread, creates a special window to handle screen.Screen 18 calls and runs message loop. All new windows are created by the 19 same thread, so message loop above handles all their window messages. 20 21 Some general Windows rules about thread affinity of GUI objects: 22 23 part 1: Window handles 24 https://blogs.msdn.microsoft.com/oldnewthing/20051010-09/?p=33843 25 26 part 2: Device contexts 27 https://blogs.msdn.microsoft.com/oldnewthing/20051011-10/?p=33823 28 29 part 3: Menus, icons, cursors, and accelerator tables 30 https://blogs.msdn.microsoft.com/oldnewthing/20051012-00/?p=33803 31 32 part 4: GDI objects and other notes on affinity 33 https://blogs.msdn.microsoft.com/oldnewthing/20051013-11/?p=33783 34 35 part 5: Object clean-up 36 https://blogs.msdn.microsoft.com/oldnewthing/20051014-19/?p=33763 37 38 How to build Windows GUI articles: 39 40 http://www.codeproject.com/Articles/1988/Guide-to-WIN-Paint-for-Beginners 41 http://www.codeproject.com/Articles/2078/Guide-to-WIN-Paint-for-Intermediates 42 http://www.codeproject.com/Articles/224754/Guide-to-Win-Memory-DC 43 44 */