138 lines
5 KiB
C
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)
|