📄 macro.h
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 预处理
#pragma once
#include "Define.h"
#include <Windows.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 错误捕捉
#define _Try
#define _Finally __Finally:
#define _Leave goto __Finally
#define _LeaveIf(c) if (c) {_Leave;}
#define _LeaveExIf(c, e) if (c) {e; _Leave;}
#define _ExIf(c, e) if (c) {e;}
#define _ExIfElse(c, e, l) if (c) {e;} else {l;}
#define _ReturnIf(c) if (c) {return;}
#define _ReturnExIf(c, e) if (c) {e; return;}
#define _ReturnValIf(c, r) if (c) {return r;}
#define _ReturnValExIf(c, e, r) if (c) {e; return r;}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 安全释放
#define _SafeDelete(p) if (p) {delete p; p = NULL;}
#define _SafeRelease(p) if (p) {(p)->Release(); p = NULL;}
#define _SafeFreeLibrary(h) if (h) {FreeLibrary(h); h = NULL;}
#define _SafeDeleteObject(h) if (h) {DeleteObject(h); h = NULL;}
#define _SafeCloseHandle(h) if (h) {CloseHandle(h); h = NULL;}
#define _SafeDestroyWindow(h) if (h) {DestroyWindow(h); h = NULL;}
#define _SafeCloseValidHandle(h) if ((h) != INVALID_HANDLE_VALUE) {CloseHandle(h); h = INVALID_HANDLE_VALUE;}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Windows 版本
#define _WinVer _winver
#define _WinVerMajor _winmajor
#define _WinVerMinor _winminor
#define _WinVerBuild _osver
#define _WinVerEqualNT() ((GetVersion() & 0x80000000) == 0)
#define _WinVerEqual(a, i) ((_WinVerMajor == a) && (_WinVerMinor == i))
#define _WinVerAbove(a, i) ((_WinVerMajor > a) || ((_WinVerMajor == a) && (_WinVerMinor > i)))
#define _WinVerBelow(a, i) ((_WinVerMajor < a) || ((_WinVerMajor == a) && (_WinVerMinor < i)))
#define _WinVerAboveEqual(a, i) ((_WinVerMajor > a) || ((_WinVerMajor == a) && (_WinVerMinor >= i)))
#define _WinVerBelowEqual(a, i) ((_WinVerMajor < a) || ((_WinVerMajor == a) && (_WinVerMinor <= i)))
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 常用函数简写
#define _HeapAlloc(n) HeapAlloc(GetProcessHeap(), 0, n)
#define _HeapAllocZero(n) HeapAlloc(GetProcessHeap(), HEAP_ZeroMem_MEMORY, n)
#define _HeapFree(p) HeapFree(GetProcessHeap(), 0, (PVOID) p)
#define _ShellOpen(f, p, s) ShellExecute(NULL, TEXT("open"), f, p, NULL, s)
#define _CreateThread(f, p, d) CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) f, (PVOID) p, 0, (PDWORD) d)
#define _BeginThread(f, p) {DWORD dwThread; CloseHandle(_CreateThread(f, p, &dwThread));}
#define _CreateFileForRead(f) CreateFile(f, GENERIC_READ, 3, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL)
#define _CreateFileForWrite(f) CreateFile(f, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL)
#define _CreateFileForAppend(f) CreateFile(f, GENERIC_ALL, FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, NULL)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 交换变量值
#define _Swap(t, x, y) {t m = x; x = y; y = m;}
// 限制数值范围
#define _Bound(v, vMin, vMax) (((v) > (vMax)) ? (vMax) : ((v < vMin) ? (vMin) : (v)))
#define _InBound(v, vMin, vMax) (((v) > (vMin)) && ((v) < (vMax)))
#define _OnBound(v, vMin, vMax) (((v) >= (vMin)) && ((v) <= (vMax)))
#define _IsNum(n) _OnBound((n), '0', '9')
// 矩形宽度和高度
#define _RectWidth(r) ((r).right - (r).left)
#define _RectHeight(r) ((r).bottom - (r).top)
#define _SmallRectWidth(r) ((r).Right - (r).Left)
#define _SmallRectHeight(r) ((r).Bottom - (r).Top)
// DIB 计算
#define _DibPitch(w, i) ((((w * i) + 31) & ~31) / 8)
#define _DibSize(w, i, h) (_DibPitch(w, i) * h)
#define _DibBits(p, w, i, x, y) (p + _DibPitch(w, i) * y + x * 3)
#define _DibPitch24(w) ((w + w + w + 3) & 0xFFFFFFFC)
#define _DibSize24(w, h) (_DibPitch24(w) * h)
#define _DibBits24(p, w, x, y) (p + _DibPitch24(w) * y + x * 3)
// 数组元素个数
#define _NumOf(s) (sizeof(s) / sizeof(s[0]))
// 内存初始化
#define _FillMem(s, c) memset(&(s), c, sizeof(s))
#define _ZeroMem(s) _FillMem(s, 0)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 字符串常量的字符个数
#define _LenOf(s) (_NumOf(s) - 1)
// 字符串常量的零字符位置
#define _EndOf(s) (s + _LenOf(s))
// 字符串占用的字节数
#define _AStrSize(a) (lstrlenA(a) + 1)
#define _WStrSize(w) ((lstrlenW(w) + 1) * sizeof(WCHAR))
#define _StrSize(t) ((lstrlen(t) + 1) * sizeof(TCHAR))
// 字符串的零字符位置
#define _AStrEnd(a) (a + lstrlenA(a))
#define _WStrEnd(w) (w + lstrlenW(w))
#define _StrEnd(t) (t + lstrlen(t))
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 字符串转换
#define _WStrToAStrN(a, w, n) WideCharToMultiByte(CP_ACP, 0, w, -1, a, n, NULL, NULL)
#define _AStrToWStrN(w, a, n) MultiByteToWideChar(CP_ACP, 0, a, -1, w, n)
#define _WStrToAStr(a, w) _WStrToAStrN(a, w, _NumOf(a))
#define _AStrToWStr(w, a) _AStrToWStrN(w, a, _NumOf(w))
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -