📄 cwindows.h
字号:
#define CC_URG u
#else
#define CC_USZ
#define CC_URG
#endif
typedef struct _mpvkeyid
{
WORD vkey;
WORD idItem;
} MPVKEYID;
#define VkeyOfVkKk(vk, kk) ((vk) | (kk))
typedef struct _menuitem
{
WORD idItem; /* id for menuitem */
BITS fEnabled:1; /* TRUE => enabled, FALSE => greyed */
BITS fChecked:1; /* TRUE => checked */
BITS fSeparator:1; /* TRUE => separator */
BITS fHandle:1; /* TRUE => use pszItem, else szItem */
BITS ichHilite:4; /* index of prefix character */
BITS bParamUser:8; /* available for application use */
union
{
char *szItem;
char **pszItem;
} CC_USZ;
WORD wParamUser; /* available for application use */
} MENUITEM;
typedef struct _menu
{
WORD idMenu;
BITS rxTitle:8;
BITS ichHilite:4; /* index of prefix character */
BITS fHandle:1;
BITS fEnabled:1; /* is menu 'enabled' (not greyed) */
BITS filler:2;
WORD cchTitle;
char *pchTitle;
WORD citem;
WORD cchitemMax;
union
{
MENUITEM *rgmenuitem;
MENUITEM **prgmenuitem;
} CC_URG;
WORD wParamUser; /* available for application use */
} MENU;
typedef struct _menubar
{
WORD cmenu;
MENU *rgmenu;
MPVKEYID *rgmpvkeyid;
} MENUBAR;
typedef MENU *PMENU;
typedef MENUITEM *PMENUITEM;
typedef MENUBAR *PMENUBAR;
/* menu item define macros :
D => disabled
H => string handle
X => with index (otherwise default to 0)
*/
/* enabled simple item */
#define menuitem(mid, sz, w) {(mid), TRUE, FALSE, FALSE, FALSE,\
0, 0, {(sz)}, (WORD) (w)},
#define menuitemD(mid, sz, w) {(mid), FALSE, FALSE, FALSE, FALSE,\
0, 0, {(sz)}, (WORD) (w)},
#define menuitemDH(mid, psz, w) {(mid), FALSE, FALSE, FALSE, TRUE,\
0, 0, {(char *)(psz)}, (WORD)(w)},
#define menuitemX(mid, sz, ich, w) {(mid), TRUE, FALSE, FALSE, FALSE,\
(ich), 0, {(sz)}, (WORD) (w)},
#define menuitemDX(mid, sz, ich, w) {(mid), FALSE, FALSE, FALSE, FALSE,\
(ich), 0, {(sz)}, (WORD) (w)},
/* separator */
#define menuitemSep {0, FALSE, FALSE, TRUE, FALSE, 0, 0, {NULL}, 0},
#endif /*!NOMENUS*/
VOID FARPUBLIC InitMenu(PWND, PMENUBAR);
BOOL FARPUBLIC FEnableMenuBar(BOOL);
VOID FARPUBLIC EnableMenu(WORD, BOOL);
VOID FARPUBLIC EnableMenuItem(WORD, BOOL);
VOID FARPUBLIC CheckMenuItem(WORD, BOOL);
BOOL FARPUBLIC FMenuItemChecked(WORD);
PMENUITEM FARPUBLIC FindMenuItem(WORD);
VOID FARPUBLIC DrawMenubar(void);
VOID FARPUBLIC OpenMenu(WORD); /*OPTIONAL*/
#ifndef NOCOLOR
#define DiMake(dm, isa) ((WORD) ((dm) | (isa)))
/* -- non-special modes -- */
#define dmNormal 0
#define DiNormal(isa) ((WORD) dmNormal | (isa))
#define dmText 0x100
#define dmTextOnly dmText
#define dmForeBack 0x200
#define dmAttrOnly dmForeBack
#define dmFore 0x300
#define dmBack 0x400
#define dmTextFore 0x500
#define dmTextBack 0x600
/* -- special modes -- */
#define dmSpecialMin 0x700
#define dmTextMapB 0x700
#define dmTextMapF 0x800
#define dmMapB 0x900
#define dmMapF 0xA00
/* special FFONT control */
#define fdmKeepFfont 0x8000
#endif /*!NOCOLOR*/
extern BYTE PASCAL fMonochrome; /* TRUE => monochrome screen */
extern char PASCAL chShadow; /* shadow character */
extern WORD PASCAL diShadow; /* shadow draw mode, 0 => no shadow */
VOID FARPUBLIC SetCursorBlock(BOOL);
#ifndef NOSUBSTYLES
/* Scroll bar constants */
#define SBS_HORZ 0
#define SBS_VERT 1
#endif /*!NOSTYLES*/
#ifndef NOSCROLL
/* Scroll Commands */
#define SB_LINEUP 0
#define SB_LINEDOWN 1
#define SB_PAGEUP 2
#define SB_PAGEDOWN 3
#define SB_THUMBPOSITION 4
#define SB_THUMBTRACK 5
#define SB_TOP 6
#define SB_BOTTOM 7
#define SB_ENDSCROLL 8
/* define SB_UPCLICK 15 (private message) */
#endif /*!NOSCROLL*/
#ifndef NOWNDMACROS
DWORD FARPUBLIC ScrollBarWndProc(PWND, WORD, WORD, DWORD);
#ifdef CC
#ifndef cwExtraWnd
#define cwExtraWnd 5
#endif /*no extra size*/
#endif /*CC*/
#define wndScrollBar(id, fVert, fEnabled, ax, ay, dax, day, pwndParent, pwndSibbling, ctickRep) { \
id, WS_CHILD | WS_SCROLL | (fVert ? SBS_VERT : SBS_HORZ), \
0, fEnabled, {ax, ay, ax+dax, ay+day}, {ax, ay, ax+dax, ay+day}, \
(PLFN) ScrollBarWndProc, pwndParent, pwndSibbling, NULL, 0, 0, \
{ctickRep, 0, 0, 1, 1}}
#endif /* !NOWNDMACROS */
short FARPUBLIC SetScrollPos(PWND, short, BOOL);
short FARPUBLIC GetScrollPos(PWND);
VOID FARPUBLIC SetScrollRange(PWND, short, short, BOOL);
VOID FARPUBLIC AddChild(PWND, PWND);
VOID FARPUBLIC RemoveChild(PWND);
VOID FARPUBLIC EnableWindow(PWND, BOOL);
VOID FARPUBLIC GetClientRrc(PWND, RRC *);
VOID FARPUBLIC SetWindowStyle(PWND, WORD);
VOID FARPUBLIC SetWindowSize(PWND, BYTE, BYTE);
VOID FARPUBLIC DrawWindow(PWND);
VOID FARPUBLIC DrawBorder(PWND, BOX *, WORD, char *);
VOID FARPUBLIC TextOut(PWND, RX, RY, char *, short, WORD);
VOID FARPUBLIC CharOut(PWND, RX, RY, ACHAR, WORD);
VOID FARPUBLIC FillRrc(PWND, PRRC, ACHAR, WORD);
VOID FARPUBLIC BltRrc(PWND, RX, RY, BYTE, BYTE, RX, RY);
VOID FARPUBLIC DrawBox(PWND, PRRC, BOX *, WORD);
VOID FARPUBLIC SaveRrc(PWND, PRRC, BYTE FAR *);
VOID FARPUBLIC RestoreRrc(PWND, PRRC, BYTE FAR *);
VOID FARPUBLIC EnableCursor(PWND, BOOL);
VOID FARPUBLIC MoveCursor(PWND, RX, RY);
VOID FARPUBLIC MoveWindow(PWND, AX, AY);
BOOL FARPUBLIC IntersectRect(PRRC, PRRC, PRRC);
VOID FARPUBLIC UnionRect(PRRC, PRRC, PRRC);
BOOL FARPUBLIC IsRectEmpty(PRRC);
VOID FARPUBLIC SetRect(PRRC, RX, RY, RX, RY);
BOOL FARPUBLIC PtInRect(PRRC, RX, RY);
WORD FARPUBLIC CwSizeRrc(PRRC);
VOID FARPUBLIC ShadowArc(PARC);
/* * for overlap windows */
VOID FARPUBLIC AddChildHead(PWND, PWND); /*OPTIONAL*/
VOID FARPUBLIC AddChildTail(PWND, PWND); /*OPTIONAL*/
VOID FARPUBLIC RethinkDisplay(void); /*OPTIONAL*/
BOOL FARPUBLIC FWindowToTop(PWND); /*OPTIONAL*/
VOID FARPUBLIC RedrawDamagedRegions(void); /*OPTIONAL*/
BOOL FARPUBLIC FMoveSizeWithKeyboard(PWND, BOOL); /*OPTIONAL*/
BOOL FARPUBLIC FIsTopWindow(PWND); /*OPTIONAL*/
PWND FARPUBLIC PwndGetTopWindow(PWND); /*OPTIONAL*/
VOID FARPUBLIC DrawOverlapShadow(PWND); /*OPTIONAL*/
/* Listbox routines */
DWORD FARPUBLIC ListBoxWndProc(PWND, WORD, WORD, DWORD);
VOID FARPUBLIC InitListBox(PWND, PWFN); /*OPTIONAL*/
VOID FARPUBLIC InitListBoxOriented(PWND, PWFN, WORD *, WORD *);/*OPTIONAL*/
VOID FARPUBLIC GetListBoxOrientation(PWND, WORD *, WORD *);/*OPTIONAL*/
#define FMoveOverlapWithKeyboard(pwnd) FMoveSizeWithKeyboard(pwnd,TRUE);
#define FSizeOverlapWithKeyboard(pwnd) FMoveSizeWithKeyboard(pwnd,FALSE);
#ifndef NORECT
#define CopyRect(prrcDest, prrcSrc) {*(prrcDest) = *(prrcSrc) }
#define SetRectEmpty(prrc) {*((long *) prrc) = 0; }
#endif /*!NORECT*/
#ifndef NOWNDMACROS
#define wndGeneric(id, style, fEnabled, ax, ay, dax, day, pfnWndProc, pwndParent, pwndSibling, pwndChild) { \
id, style, 0, fEnabled, \
{ax, ay, ax+dax, ay+day}, \
{((style) & WS_BORDER) ? ax+1 : ax, \
((style) & WS_BORDER) ? ay+1 : ay, \
((style) & (WS_BORDER | WS_VSCROLL)) ? ax+dax-1 : ax+dax, \
((style) & (WS_BORDER | WS_HSCROLL)) ? ay+day-1 : ay+day}, \
(PLFN) pfnWndProc, pwndParent, pwndSibling, pwndChild, 0, 0,
#define wndGenericCursor(id, style, fEnabled, ax, ay, dax, day, pfnWndProc, pwndParent, pwndSibling, pwndChild, axCurs, ayCurs) { \
id, style, TRUE, fEnabled, \
{ax, ay, ax+dax, ay+day}, \
{((style) & WS_BORDER) ? ax+1 : ax, \
((style) & WS_BORDER) ? ay+1 : ay, \
((style) & (WS_BORDER | WS_VSCROLL)) ? ax+dax-1 : ax+dax, \
((style) & (WS_BORDER | WS_HSCROLL)) ? ay+day-1 : ay+day}, \
(PLFN) pfnWndProc, pwndParent, pwndSibling, pwndChild, axCurs, ayCurs,
#define endWndGeneric }
#define wndListBox(id,fBorder,fSorted,fEnabled,ax,ay,dax,day,pfnWndProc,pwndParent,pwndSibling,pwndChild,color,isaHilite,ctickRep) { \
id, (WS_CHILD | WS_LISTBOX | WS_VSCROLL | \
(fSorted ? LBS_SORT : 0) | (fBorder ? WS_BORDER : 0)), \
TRUE, fEnabled, {ax, ay, ax+dax, ay+day}, \
{ (fBorder ? ax+1 : ax), \
(fBorder ? ay+1 : ay), \
((TRUE) ? ax+dax-1 : ax+dax), \
(fBorder ? ay+day-1 : ay+day) }, \
(PLFN) pfnWndProc, pwndParent, pwndSibling, \
pwndChild, \
(fBorder ? ax+2 : ax+1), 1 \
,{0,0,0,0,0,0,0,0,0,1,0,0,color,isaHilite,ctickRep,0} }
#define SetWindowProc(pwnd, pfn) {(pwnd)->pfnWndProc = pfn;}
#define GetWindowWord(pwnd, iw) ((pwnd)->rgwExtra[(iw)])
#define SetWindowWord(pwnd, iw, w) {(pwnd)->rgwExtra[(iw)] = (w);}
#define PwndParent(pwnd) ((pwnd)->pwndParent)
#define PwndChild(pwnd) ((pwnd)->pwndChild)
#define PwndSibling(pwnd) ((pwnd)->pwndSibling)
#endif /*NOWNDMACROS*/
#ifndef NODRAW
/* Window Drawing support */
#define AxOfRx(pwnd,rx) ((pwnd)->arcClipping.axLeft+(rx))
#define AyOfRy(pwnd,ry) ((pwnd)->arcClipping.ayTop+(ry))
#define RxOfAx(pwnd,ax) ((ax)-(pwnd)->arcClipping.axLeft)
#define RyOfAy(pwnd,ay) ((ay)-(pwnd)->arcClipping.ayTop)
#define CbSizeRrc(prrc) (CwSizeRrc(prrc) << 1)
#endif /*!NODRAW*/
#ifndef NOWINSTYLES
/* Window styles */
#define WS_TILED 0x0000
#define WS_CHILD 0x0000 /* note : no distinction */
#define WS_BORDER 0x0100
#define WS_VSCROLL 0x0200
#define WS_HSCROLL 0x0400
#define WS_SUBSTYLE 0x003f
#define WS_OVERLAP 0x0040
#define WS_CLIPOUT 0x0080
#define WS_TYPE 0x3800 /* type mask */
#define WS_EDIT 0x0800
#define WS_LISTBOX 0x1000
#define WS_BUTTON 0x1800
#define WS_STATIC 0x2000
#define WS_DIALOG 0x2800
#define WS_SCROLL 0x3000
#define WS_STATIC_NOACCEL 0x3800
#define LBS_SORT 0x0001
#endif /*!NOWINSTYLES*/
/* codes for listbox item indices */
#define iszMin ((WORD) 0)
#define iszNil ((WORD) -1) /* invalid isz */
/* System Specifics */
VOID FARPUBLIC DoSound(WORD);
DWORD FARPUBLIC ClockTicks(void);
extern BYTE PASCAL fSingleFloppy; /* TRUE => 1 floppy system */
extern BYTE PASCAL fInt24Error; /* Set if INT 24 error detected */
/* Sound Facilities */
#define Beep() DoSound(0)
#define Click() DoSound(1)
BOOL FARPUBLIC FValidDrive(char);
#ifndef NOVIRTUALKEYCODES
#define VK_MIN 0x100
#define VK_LBUTTON 0x101
#define VK_RBUTTON 0x102
#define VK_CANCEL 0x103
#define VK_MBUTTON 0x104 /* NOT contiguous with L & RBUTTON */
#define VK_BACK 0x108
#define VK_TAB 0x109
#define VK_CLEAR 0x10C
#define VK_RETURN 0x10D
#define VK_SHIFT 0x110
#define VK_CONTROL 0x111
#define VK_ALT 0x112
#define VK_PAUSE 0x113
#define VK_CAPLOCK 0x114
/* special VK_s for Kanji and Kana-Kanji conversion */
#define VK_KANA 0x115
#define VK_ROMAJI 0x116
#define VK_ZENKAKU 0x117
#define VK_HIRAGANA 0x118
#define VK_KANJI 0x119
/* note: hole for 1A and 1B */
#define VK_CONVERT 0x11C
#define VK_NONCONVERT 0x11D
#define VK_ACCEPT 0x11E
#define VK_MODECHANGE 0x11F
#define VK_ESCAPE 0x11B
#define VK_SPACE 0x120
#define VK_PRIOR 0x121
#define VK_NEXT 0x122
#define VK_END 0x123
#define VK_HOME 0x124
#define VK_LEFT 0x125
#define VK_UP 0x126
#define VK_RIGHT 0x127
#define VK_DOWN 0x128
#define VK_0 0x130
/* 1..8 */
#define VK_9 0x139
#define VK_A 0x141
/* B..Y */
#define VK_Z 0x15A
#define VK_SELECT 0x129
#define VK_PRINT 0x12A
#define VK_EXECUTE 0x12B
#define VK_INSERT 0x12D
#define VK_DELETE 0x12E
#define VK_HELP 0x12F
#define VK_NUMPAD0 0x160
#define VK_NUMPAD1 0x161
#define VK_NUMPAD2 0x162
#define VK_NUMPAD3 0x163
#define VK_NUMPAD4 0x164
#define VK_NUMPAD5 0x165
#define VK_NUMPAD6 0x166
#define VK_NUMPAD7 0x167
#define VK_NUMPAD8 0x168
#define VK_NUMPAD9 0x169
#define VK_MULTIPLY 0x16A
#define VK_ADD 0x16B
#define VK_SEPARATOR 0x16C
#define VK_SUBTRACT 0x16D
#define VK_DECIMAL 0x16E
#define VK_DIVIDE 0x16F
#define VK_F1 0x170
#define VK_F2 0x171
#define VK_F3 0x172
#define VK_F4 0x173
#define VK_F5 0x174
#define VK_F6 0x175
#define VK_F7 0x176
#define VK_F8 0x177
#define VK_F9 0x178
#define VK_F10 0x179
#define VK_F11 0x17A
#define VK_F12 0x17B
#define VK_F13 0x17C
#define VK_F14 0x17D
#define VK_F15 0x17E
#define VK_F16 0x17F
#define VK_OAX 0x180
#define VK_NUMLOCK 0x190
#define VK_SCRLOCK 0x191
/* alternative names */
#define VK_MENU VK_ALT
#define VK_CAPITAL VK_CAPLOCK
#define VK_OEM_NUMBER VK_NUMLOCK
#define VK_OEM_SCROLL VK_SCRLOCK
#define VK_SEPARATER VK_SEPARATOR
#endif /*!NOVIRTUALKEYCODES*/
BOOL FARPUBLIC FIsDbcsChar(ACHAR); /* OPTIONAL */
WORD FARPUBLIC CchLenDbcs(char *); /* OPTIONAL */
char * FARPUBLIC PchNextDbcs(char *); /* OPTIONAL */
char * FARPUBLIC PchPrevDbcs(char *, char *); /* OPTIONAL */
#define SetSysColor(isa, coBack, coFore, fBlink, fHilite) \
SetIsaColor(isa, \
(coFore) + ((fHilite) ? 8 : 0), \
(coBack) + ((fBlink) ? 8 : 0))
VOID FARPUBLIC SetIsaColor(ISA, WORD, WORD);
VOID FARPUBLIC GetIsaColor(ISA, WORD *, WORD *);
VOID FARPUBLIC SetIsaRgca(ISA, BYTE *);
VOID FARPUBLIC SetIsaFfont(ISA, WORD); /*OPTIONAL*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -