📄 utils.h
字号:
/* * * utils.h * Copyright (C) 2006 Michael H. Overlin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact at poster_printer@yahoo.com */#ifndef UTILS_H#define UTILS_H#include "debug.h"#include <windows.h>#include <winspool.h>#include <malloc.h>#include <string>#include <stdlib.h>#if DBG#define SHOULD(b) { if (!(b)) DEBUGMESSAGE( ("FAILURE CONDITION ENCOUNTERED") ); }#else#define SHOULD(b)#endif#if DBG#define ASSERT(b) { if (!(b)) DebugBreak(); }#else#define ASSERT(b)#endif#ifdef DBG#define ASSERTFAIL() { ASSERT(0); }#else#define ASSERTFAIL()#endif//#define MAX(x,y) ( ( (x) > (y) ) ? (x) : (y) )#define ARRCOUNT(a) ( sizeof(a) / sizeof( (a)[0] ) )#define AnsiToUniCode(pstr,pwstr,cch) \ MultiByteToWideChar(CP_ACP,0,(pstr),(cch),(pwstr),(cch))#define UniCodeToAnsi(pstr,pwstr,cch) \ WideCharToMultiByte(CP_ACP,0,(pwstr),(cch),(pstr),(cch),NULL,NULL)template<class T> void swap(T& a, T& b) { T temp = a; a = b; b = temp; }// LOGICAL EXCLUSIVE ORinline BOOL lxor(const BOOL b1, const BOOL b2) { return (!b1) != (!b2); }class EnumWindows {public: EnumWindows(void); virtual ~EnumWindows(); BOOL EnumChildWindows(HWND hwndParent); virtual BOOL EnumProc(HWND hwndEnum) = 0;private: static BOOL CALLBACK TheirEnumProc(HWND hwndEnum, LPARAM lParam);};// CALLER IS RESPONSIBLE FOR FREEING THE MALLOC'D BUFFER RETURNED// lptstrExt MUST INLCUDE A PERIOD// FUNCTION CAN DEAL WITH FILE NAME ENDING IN A SINGLE PERIOD // (IT MAY BE THAT THE OS CONSIDERS MULTIPLE ADJACENT PERIODS TO BE EQUIVALENT TO A SINGLE PERIOD, NOT SURE)LPTSTR AddExtToFileName(LPCTSTR lptstrFileName, LPCTSTR lptstrExt) ;BOOL CenterWindowAboveParent(HWND hwnd) ;BOOL CenterWindowHorizontallyInDialog(HWND hwndCtrl, HWND hDlg) ;// WORKS BY TRYING TO OPEN THE FILE FOR READING (FLAG OPEN_EXISTING)BOOL FileExists(LPCTSTR lptstrFileName) ;// FUNCTOIN RETURNS TRUE IF FILE NAME CONTAINS A PERIOD IN THE PORTION AFTER ANY DIRECTORY// NAME AND DRIVE NAMEBOOL FileNameSpecifiesExt(LPCTSTR lptstrFileName) ;// CALLER IS RESPONSIBLE FOR FREEING THE MALLOC'D BUFFER RETURNEDLPTSTR GetSystemErrorMessage(IN DWORD dwErr) ; // CALLER IS RESPONSIBLE FOR FREEING THE MALLOC'D BUFFER RETURNEDLPTSTR GetFileNameAndExt(LPCTSTR lptstrFilePath) ;// CALLER IS RESPONSIBLE FOR FREEING THE MALLOC'D BUFFER RETURNEDLPTSTR GetFileExt(LPCTSTR lptstrFilePath) ;// WORKS BY FIRST TESTING IF THE FILE EXISTS USING "FileExists". IF SO, RETURNS TRUE,// ELSE IT TRIES TO CREATE THE FILE USING THE FLAGE "CREATE_NEW" WHICH WILL ONLY CREATE A NON-EXISTING// FILE AND WON'T OPEN AN EXISTING ONE. IF THIS SUCCEEDS, IT CLOSES THEN DELETES THE FILE AND RETURNS TRUE.// OTHERWISE RETURNS FALSEBOOL IsFileNameValid(LPCTSTR lptstrFileName) ;// CALLER IS RESPONSIBLE FOR FREEING THE MALLOC'D BUFFER RETURNEDLPTSTR MakeFullFileName(IN LPCTSTR lptstrDir, IN LPCTSTR lptstrFileName, IN LPCTSTR lptstrExt = NULL) ;// CALLER IS RESPONSIBLE FOR FREEING THE MALLOC'D BUFFER RETURNED// THE LAST ARGUMENT MUST BE NULLLPTSTR MyCatStrings(LPCTSTR lptstrArg, ...) ;// CALLER IS RESPONSIBLE FOR FREEING THE MALLOC'D BUFFER RETURNED// THE LAST ARGUMENT MUST BE NULL// IF bIncludeNullTerms IS TRUE, BUFFER RETURNED IS SEQUENCE OF STRINGS NULL TERMINATED, WITH AN EXTRA FINAL NULL TERMINATION// TO INDICATE THE END// IF bIncludeNullTerms IS FALSE, BUFFER RETURNED IS THE NORMAL CONCATENATION OF ALL STRINGS// THE SAME AS RETURNED BY ABOVE "MyCatStrings"LPTSTR MyCatStringsString(BOOL bIncludeNullTerms, LPCTSTR lptstrArg, ...) ;// va_list VERSION OF ABOVELPTSTR vMyCatStringsString(BOOL bIncludeNullTerms, LPCTSTR lptstrArg, va_list& in_vaList) ;// THE LAST ARGUMENT MUST BE NULL// CALLER IS RESPONSIBLE FOR FREEING RETURNED MALLOC'D BUFF // WHICH IS A NULL-TERMINATED ARRAY OF LPSTSTR STRING PTRS// "MyFreeStringPtrs" WILL FREE THE BUFFERS AND THE STRING PTRS IT CONTAINS AS WELLLPTSTR *MyCatStringPtrs(LPTSTR lptstrArg, ...) ;// FREES A NULL-TERMINATED ARRAY OF POINTERS AND THE POINTER TO THE ARRAY ALSOvoid MyFreeStringPtrs(LPTSTR *plptstr) ;LPTSTR MyGetWindowText(IN HWND hwnd);void MyProcessMessage(MSG& msg);BOOL ScreenToClient(OUT RECT& r, IN HWND hwnd);size_t StringBufferSize(IN LPCTSTR lptstr);LPTSTR StringDuplicate(IN LPCTSTR lptstr);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -