windows-nt/Source/XPSP1/NT/multimedia/media/avi/inc.16/woahack.h
2020-09-26 16:20:57 +08:00

138 lines
5 KiB
C

/* Defines for WinOldAppHackoMatic flags which win386 oldapp can send to us.
* These are kept in user's global variable winOldAppHackoMaticFlags
*/
/*
* WOAHACK_CHECKALTKEYSTATE
*
* This is sent from WinOldAp to USER when the user has just pressed
* Alt+Space. When the user does that, keyboard focus shifts from
* the DOS box to Windows. This is particularly weird because the
* focus is changing while the user has a key down. The message is
* sent to USER to let it know that the Alt key may be in a funky
* state right now.
*
* The value of this must be a power of two because it is used
* in the winOldAppHackoMaticFlags variable as a bitmask.
*
* WOAHACK_IGNOREALTKEYDOWN
*
* This is used internally by USER to keep track of the Alt key
* state, triggered by the WOAHACK_CHECKALTKEYSTATE message.
*
* The value of this must be a power of two because it is used
* in the winOldAppHackoMaticFlags variable as a bitmask.
*
* WOAHACK_DISABLEREPAINTSCREEN
*
* This is sent from WinOldAp to USER when the user has initiated
* an Alt+Tab sequence from a fullscreen VM. This causes USER to
* defer the RepaintScreen that will be sent by the display driver.
* This speeds up Alt+Tab'ing. When the Alt+Tab is complete,
* if the user selected another fullscreen DOS box, USER will ignore
* the RepaintScreen altogether, since it's about to lose the
* display focus anyway. In all other cases, the RepaintScreen will
* be performed once the Alt+Tab is complete.
*
* WOAHACK_LOSINGDISPLAYFOCUS
* WOAHACK_GAININGDISPLAYFOCUS
*
* These messages are sent from WinOldAp to USER when the display
* focus is changing. The WOAHACK_LOSINGDISPLAYFOCUS message is
* sent *before* Windows is about to lose focus, and the
* WOAHACK_GAININGDISPLAYFOCUS is sent *after* Windows has regained
* the display focus.
*
* WinOldAp sends these messages whenever it is about to set the
* VM focus. It doesn't check if the message is a repeat of a
* previous message. (So, for example, USER may receive three
* copies of WOAHACK_GAININGDISPLAYFOCUS.) USER maintains an
* internal variable to keep track of whether each receipt of the
* message is a change in the focus or just a redundant notification.
*
* USER uses these messages to turn off the timer that is normally
* used to trigger the mouse drawing code in the display driver
* while Windows does not have the display focus, and to turn the
* timer back on once Windows gets the display back.
*
* This is needed to make sure the display driver is otherwise
* quiet when the int 2F is dispatched from the VDD to notify the
* display driver that the focus has changed. Not doing this
* opens the possibility of re-entrancy in the display driver.
*
* WOAHACK_IMAWINOLDAPSORTOFGUY
*
* WinOldAp needs to call this API once with this flag set so that
* USER can mark winoldap's queue as being winoldap. USER needs
* to know that a particular queue is winoldap for several reasons
* having to do with task switching and priorities.
*/
#define WOAHACK_CHECKALTKEYSTATE 1
#define WOAHACK_IGNOREALTKEYDOWN 2
#define WOAHACK_DISABLEREPAINTSCREEN 3
#define WOAHACK_LOSINGDISPLAYFOCUS 4
#define WOAHACK_GAININGDISPLAYFOCUS 5
#define WOAHACK_IAMAWINOLDAPSORTOFGUY 6
/* ------ After this point comes information that can be publicized ------- */
/* WinOldApp related flags and Macros */
/*
* These property bits are stored in the flWinOldAp property of
* WinOldAp's main window. They are provided so that USER and other
* applications can query the state of the DOS box.
*
* These properties are read-only. Changing them will cause Windows
* to get confused.
*
* woapropIsWinOldAp
*
* This bit is always set.
*
* woapropFullscreen
*
* Set if this a fullscreen DOS box rather than a windowed DOS box.
* Note that this bit is set even if WinOldAp does not have focus.
* (E.g., when iconic.) Its purpose is to indicate what the state
* of the DOS box would be *if* it were to be activated.
*
* woapropActive
*
* Set if WinOldAp is active. Note that one cannot merely
* check IsIconic(hwnd) because fullscreen DOS boxes are always
* iconic.
*
* None of the other bits are used, although names for some of them
* have been chosen. This does not represent any commitment to use
* them for the purpose the name suggests.
*
* Other properties we may think of adding...
*
* hvm
*
* This extended property contains the 32-bit VM handle.
*
* hprop
*
* This property contains the property handle being used
* by the DOS box. (For utilities which want to be able
* to modify the properties of a running DOS box, perhaps.)
*
*/
#define WINOLDAP_PROP_NAME "flWinOldAp"
extern ATOM atmWinOldAp;
#define WinOldApFlag(hwnd, flag) ((UINT)GetPropEx(hwnd, MAKEINTATOM(atmWinOldAp)) & woaprop##flag)
#define woapropIsWinOldAp 1
#define woapropFullscreen 2
#define woapropActive 4
#define woapropIdle 8
#define woapropClosable 64
#define IsWinOldApHwnd(hwnd) WinOldApFlag(hwnd, IsWinOldAp)
#define IsFullscreen(hwnd) WinOldApFlag(hwnd, Fullscreen)