382 lines
9.9 KiB
C
382 lines
9.9 KiB
C
//==========================================================================//
|
|
// Constants //
|
|
//==========================================================================//
|
|
|
|
|
|
#define ThreeDPad 2
|
|
#define NOCHANGE -1
|
|
|
|
#define MENUCLOSING (0xFFFF0000)
|
|
|
|
#define WM_DLGSETFOCUS (WM_USER + 0x201)
|
|
#define WM_DLGKILLFOCUS (WM_USER + 0x202)
|
|
|
|
|
|
|
|
//==========================================================================//
|
|
// Macros //
|
|
//==========================================================================//
|
|
|
|
|
|
#define PinInclusive(x, lo, hi) \
|
|
(max (lo, min (x, hi)))
|
|
|
|
|
|
#define PinExclusive(x, lo, hi) \
|
|
(max ((lo) + 1, min (x, (hi) - 1)))
|
|
|
|
|
|
#define BoolEqual(a, b) \
|
|
((a == 0) == (b == 0))
|
|
|
|
|
|
//=============================//
|
|
// Window Instance Accessors //
|
|
//=============================//
|
|
|
|
#define WindowParent(hWnd) \
|
|
((HWND) GetWindowLongPtr (hWnd, GWLP_HWNDPARENT))
|
|
|
|
#define WindowID(hWnd) \
|
|
GetWindowLong (hWnd, GWL_ID)
|
|
|
|
#define WindowInstance(hWnd) \
|
|
GetWindowWord (hWnd, GWW_HINSTANCE)
|
|
|
|
#define WindowStyle(hWnd) \
|
|
GetWindowLong (hWnd, GWL_STYLE)
|
|
|
|
#define WindowSetStyle(hWnd, lStyle) \
|
|
SetWindowLong (hWnd, GWL_STYLE, lStyle)
|
|
|
|
#define WindowExStyle(hWnd) \
|
|
GetWindowLong (hWnd, GWL_EXSTYLE)
|
|
|
|
#define WindowSetID(hWnd, wID) \
|
|
SetWindowLong (hWnd, GWL_ID, wID)
|
|
|
|
|
|
// All modeless dialogs need to be dispatched separately in the WinMain
|
|
// message loop, but only if the dialog exists.
|
|
|
|
|
|
#define ModelessDispatch(hDlg, lpMsg) \
|
|
(hDlg ? IsDialogMessage (hDlg, lpMsg) : FALSE)
|
|
|
|
|
|
#define strclr(szString) \
|
|
(szString [0] = TEXT('\0'))
|
|
|
|
|
|
#define strempty(lpszString) \
|
|
(!(lpszString) || !(lpszString[0]))
|
|
|
|
#define pstrsame(lpsz1, lpsz2) \
|
|
((!lpsz1 && !lpsz2) || (lpsz1 && lpsz2 && strsame (lpsz1, lpsz2)))
|
|
|
|
#define pstrsamei(lpsz1, lpsz2) \
|
|
((!lpsz1 && !lpsz2) || (lpsz1 && lpsz2 && strsamei (lpsz1, lpsz2)))
|
|
|
|
#define StringLoad(wID, szText) \
|
|
(LoadString (hInstance, wID, \
|
|
szText, (sizeof (szText) / sizeof(TCHAR)) - 1))
|
|
|
|
|
|
#define WindowInvalidate(hWnd) \
|
|
(InvalidateRect (hWnd, NULL, TRUE))
|
|
|
|
|
|
#define WindowShow(hWnd, bShow) \
|
|
(ShowWindow (hWnd, (bShow) ? SW_SHOW : SW_HIDE))
|
|
|
|
|
|
#define MenuCheck(hMenu, wID, bCheck) \
|
|
(CheckMenuItem (hMenu, wID, (bCheck) ? \
|
|
(MF_BYCOMMAND | MF_CHECKED) : (MF_BYCOMMAND | MF_UNCHECKED)))
|
|
|
|
#define DeleteFont(hFont) \
|
|
(DeleteObject (hFont))
|
|
|
|
#define DeleteBitmap(hBitmap) \
|
|
(DeleteObject (hBitmap))
|
|
|
|
#define DialogControl(hDlg, wControlID) \
|
|
GetDlgItem (hDlg, wControlID)
|
|
|
|
|
|
#define DialogSetInt(hDlg, wControlID, iValue) \
|
|
(SetDlgItemInt (hDlg, wControlID, iValue, TRUE))
|
|
|
|
|
|
#define DialogText(hDlg, wControlID, szText) \
|
|
(GetDlgItemText (hDlg, wControlID, szText, sizeof (szText) / sizeof(TCHAR) - 1))
|
|
|
|
#define DialogInt(hDlg, wControlID) \
|
|
(GetDlgItemInt (hDlg, wControlID, NULL, TRUE))
|
|
|
|
#define strsame(szText1, szText2) \
|
|
(!lstrcmp (szText1, szText2))
|
|
|
|
#define strsamei(szText1, szText2) \
|
|
(!lstrcmpi (szText1, szText2))
|
|
|
|
#define strnsame(szText1, szText2, iLen) \
|
|
(!lstrncmp (szText1, szText2, iLen))
|
|
|
|
|
|
#define CreateScreenDC() \
|
|
CreateDC (TEXT("DISPLAY"), NULL, NULL, NULL)
|
|
|
|
|
|
|
|
#define RectContract(lpRect, xAmt, yAmt) \
|
|
{ \
|
|
(lpRect)->left += (xAmt) ; \
|
|
(lpRect)->top += (yAmt) ; \
|
|
(lpRect)->right -= (xAmt) ; \
|
|
(lpRect)->bottom -= (yAmt) ; \
|
|
}
|
|
|
|
#define IsBW(hDC) \
|
|
(DeviceNumColors (hDC) <= 2)
|
|
|
|
#ifdef KEEP_PRINT
|
|
#define IsPrinterDC(hDC) \
|
|
(GetDeviceCaps (hDC, TECHNOLOGY) != DT_RASDISPLAY)
|
|
#else
|
|
#define IsPrinterDC(hDC) \
|
|
(FALSE)
|
|
#endif
|
|
|
|
#define VertInchPixels(hDC, iNumerator, iDenominator) \
|
|
((iNumerator * GetDeviceCaps (hDC, LOGPIXELSY)) / iDenominator)
|
|
|
|
|
|
#define HorzInchPixels(hDC, iNumerator, iDenominator) \
|
|
((iNumerator * GetDeviceCaps (hDC, LOGPIXELSX)) / iDenominator)
|
|
|
|
|
|
#define VertPointPixels(hDC, iPoints) \
|
|
((iPoints * GetDeviceCaps (hDC, LOGPIXELSY)) / 72)
|
|
|
|
|
|
|
|
#define SimulateButtonPush(hDlg, wControlID) \
|
|
(PostMessage (hDlg, WM_COMMAND, \
|
|
(WPARAM) MAKELONG (wControlID, BN_CLICKED), \
|
|
(LPARAM) DialogControl (hDlg, wControlID)))
|
|
|
|
|
|
// convert an unicode string to OEM string
|
|
#define ConvertUnicodeStr(pOemStr, pUnicodeStr) \
|
|
CharToOemBuff(pUnicodeStr, pOemStr, lstrlen(pUnicodeStr) + 1)
|
|
|
|
#define CallWinHelp(ContextID, WND) \
|
|
if (*pszHelpFile != 0) { \
|
|
WinHelp(hWndMain, pszHelpFile, HELP_CONTEXT, ContextID); \
|
|
} else { \
|
|
DlgErrorBox (WND, ERR_HELP_NOT_AVAILABLE); \
|
|
}
|
|
|
|
|
|
|
|
//==========================================================================//
|
|
// Exported Functions //
|
|
//==========================================================================//
|
|
|
|
void Fill (HDC hDC,
|
|
DWORD rgbColor,
|
|
LPRECT lpRect) ;
|
|
|
|
void ScreenRectToClient (HWND hWnd,
|
|
LPRECT lpRect) ;
|
|
|
|
int TextWidth (HDC hDC, LPTSTR lpszText) ;
|
|
|
|
|
|
void ThreeDConcave (HDC hDC,
|
|
int x1, int y1,
|
|
int x2, int y2,
|
|
BOOL bFace) ;
|
|
|
|
|
|
void ThreeDConvex (HDC hDC,
|
|
int x1, int y1,
|
|
int x2, int y2) ;
|
|
|
|
|
|
void ThreeDConcave1 (HDC hDC,
|
|
int x1, int y1,
|
|
int x2, int y2) ;
|
|
|
|
|
|
void ThreeDConvex1 (HDC hDC,
|
|
int x1, int y1,
|
|
int x2, int y2) ;
|
|
|
|
|
|
int _cdecl mike (TCHAR *szFormat, ...) ;
|
|
|
|
int _cdecl DlgErrorBox (HWND hDlg, UINT id, ...) ;
|
|
|
|
int _cdecl mike1 (TCHAR *szFormat, ...) ;
|
|
int _cdecl mike2 (TCHAR *szFormat, ...) ;
|
|
|
|
int FontHeight (HDC hDC,
|
|
BOOL bIncludeLeading) ;
|
|
|
|
|
|
int TextAvgWidth (HDC hDC,
|
|
int iNumChars) ;
|
|
|
|
|
|
|
|
void WindowCenter (HWND hWnd) ;
|
|
|
|
|
|
|
|
BOOL DialogMove (HDLG hDlg,
|
|
WORD wControlID,
|
|
int xPos,
|
|
int yPos,
|
|
int xWidth,
|
|
int yHeight) ;
|
|
|
|
|
|
int DialogWidth (HDLG hDlg,
|
|
WORD wControlID) ;
|
|
|
|
|
|
int DialogXPos (HDLG hDlg,
|
|
WORD wControlID) ;
|
|
|
|
int DialogYPos (HDLG hDlg,
|
|
WORD wControlID) ;
|
|
|
|
|
|
void DialogShow (HDLG hDlg,
|
|
WORD wID,
|
|
BOOL bShow) ;
|
|
|
|
|
|
BOOL _cdecl DialogSetText (HDLG hDlg,
|
|
WORD wControlID,
|
|
WORD wStringID,
|
|
...) ;
|
|
#if 0
|
|
BOOL _cdecl DialogSetString (HDLG hDlg,
|
|
WORD wControlID,
|
|
LPTSTR lpszFormat,
|
|
...) ;
|
|
#endif
|
|
#define DialogSetString(hDlg, wControlID, lpszFormat) \
|
|
SetDlgItemText (hDlg, wControlID, lpszFormat)
|
|
|
|
LPTSTR LongToCommaString (LONG lNumber,
|
|
LPTSTR lpszText) ;
|
|
|
|
|
|
BOOL MenuSetPopup (HWND hWnd,
|
|
int iPosition,
|
|
WORD wControlID,
|
|
LPTSTR lpszResourceID) ;
|
|
|
|
void DialogEnable (HDLG hDlg,
|
|
WORD wID,
|
|
BOOL bEnable) ;
|
|
|
|
|
|
LPTSTR FileCombine (LPTSTR lpszFileSpec,
|
|
LPTSTR lpszFileDirectory,
|
|
LPTSTR lpszFileName) ;
|
|
|
|
LPTSTR ExtractFileName (LPTSTR pFileSpec) ;
|
|
|
|
int CBAddInt (HWND hWndCB,
|
|
int iValue) ;
|
|
|
|
FLOAT DialogFloat (HDLG hDlg,
|
|
WORD wControlID,
|
|
BOOL *pbOK) ;
|
|
|
|
|
|
LPTSTR StringAllocate (LPTSTR lpszText1) ;
|
|
|
|
|
|
int DivRound (int iNumerator, int iDenominator) ;
|
|
|
|
|
|
|
|
BOOL MenuEnableItem (HMENU hMenu,
|
|
WORD wID,
|
|
BOOL bEnable) ;
|
|
|
|
|
|
|
|
void DrawBitmap (HDC hDC,
|
|
HBITMAP hBitmap,
|
|
int xPos,
|
|
int yPos,
|
|
LONG lROPCode) ;
|
|
|
|
void BitmapDimemsion (HBITMAP hBitmap, int *pHeight, int *pWidth) ;
|
|
|
|
|
|
void WindowResize (HWND hWnd,
|
|
int xWidth,
|
|
int yHeight) ;
|
|
|
|
|
|
int WindowHeight (HWND hWnd) ;
|
|
|
|
|
|
|
|
void WindowSetTopmost (HWND hWnd, BOOL bTopmost) ;
|
|
|
|
|
|
void WindowEnableTitle (HWND hWnd, BOOL bTitle) ;
|
|
|
|
|
|
void Line (HDC hDC,
|
|
HPEN hPen,
|
|
int x1, int y1,
|
|
int x2, int y2) ;
|
|
|
|
|
|
|
|
#define HLine(hDC, hPen, x1, x2, y) \
|
|
Line (hDC, hPen, x1, y, x2, y) ;
|
|
|
|
|
|
#define VLine(hDC, hPen, x, y1, y2) \
|
|
Line (hDC, hPen, x, y1, x, y2) ;
|
|
|
|
|
|
int DialogHeight (HDLG hDlg,
|
|
WORD wControlID) ;
|
|
|
|
|
|
|
|
void DialogSetFloat (HDLG hDlg,
|
|
WORD wControlID,
|
|
FLOAT eValue) ;
|
|
|
|
void DialogSetInterval (HDLG hDlg,
|
|
WORD wControlID,
|
|
int IntervalMSec ) ;
|
|
|
|
int MessageBoxResource (HWND hWndParent,
|
|
WORD wTextID,
|
|
WORD wTitleID,
|
|
UINT uiStyle) ;
|
|
|
|
void WindowPlacementToString (PWINDOWPLACEMENT pWP,
|
|
LPTSTR lpszText) ;
|
|
|
|
void StringToWindowPlacement (LPTSTR lpszText,
|
|
PWINDOWPLACEMENT pWP) ;
|
|
|
|
DWORD MenuIDToHelpID (DWORD MenuID) ;
|
|
|
|
|