⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commonfuncs.cpp

📁 游戏音频程序设计-Beginning.Game.Audio.Programming
💻 CPP
字号:
/*
#############################################################################

  CommonFuncs.cpp - a library of common windows functions.

#############################################################################
*/
#include <windows.h>
#include <math.h>
#include <io.h>
#include <fcntl.h>
#include "CommonFuncs.h"

/****************************************************************************

 CenterWindow: centers the given window on the screen.

 ****************************************************************************/
void CenterWindow(HWND hwnd)
{
  // get the width and height of the screen
  int iScreenWidth = GetSystemMetrics(SM_CXFULLSCREEN);
  int iScreenHeight= GetSystemMetrics(SM_CYFULLSCREEN);

  // get the rectangle of the window
  RECT rectWindow;
  GetWindowRect(hwnd, &rectWindow);

  // do the centering math
  int iDestX = (iScreenWidth-(rectWindow.right-rectWindow.left)) / 2;
  int iDestY = (iScreenHeight-(rectWindow.bottom-rectWindow.top)) / 2;

  // center the window
  MoveWindow(hwnd, iDestX, iDestY, 
    rectWindow.right-rectWindow.left,
    rectWindow.bottom-rectWindow.top,
    true);
}

/****************************************************************************

 LoadFileIntoString: loads a file into a STL string.

 ****************************************************************************/
bool LoadFileIntoString(const char *strFilename, std::string &str)
{
	int handle = open(strFilename, O_RDONLY | O_BINARY);
	if (handle == -1) return(false);

	int iFilesize = filelength(handle);
	str.reserve(iFilesize);

	int iPos = 0; str = ""; bool bSuccess = true;
	while (iPos < iFilesize) {
		char buf[1024];
		memset(buf, 0, sizeof(buf));
		int iBytesRead = read(handle, buf, sizeof(buf)-1);
		str += buf;
		iPos += iBytesRead;
		if (iBytesRead == 0) { bSuccess = false; break; }
	}
	close(handle);
	return(bSuccess);
}

/****************************************************************************

 ConvertLastErrorToString: calls GetLastError, then converts it to a string
 using FormatMessage.  Puts up to nMaxStrLen characters of the converted
 error string into szDest.

 ****************************************************************************/
void ConvertLastErrorToString(LPSTR szDest, int nMaxStrLen)
{
  LPVOID lpMsgBuf;
  FormatMessage( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL 
  );
  
  strncpy(szDest, reinterpret_cast<char *>(lpMsgBuf), nMaxStrLen);

  LocalFree( lpMsgBuf );
}

bool IsPowerOf2(int n) { return (!(n & (n - 1))); }

int GetLowestPowerOf2(int n)
{
  int lowest = 1;
  while(lowest < n) lowest <<= 1;
  return lowest;
}

/****************************************************************************

 RandomNumber: returns a random number between iMin and iMax.

 ****************************************************************************/
int RandomNumber(int iMin, int iMax)
{
  if (iMin == iMax) return(iMin);
  return((rand() % (abs(iMax-iMin)+1))+iMin);
}

float RandomNumber(float fMin, float fMax)
{
  if (fMin == fMax) return(fMin);
  float fRandom = (float)rand() / (float)RAND_MAX;
  return((fRandom * (float)fabs(fMax-fMin))+fMin);
}

/****************************************************************************
 *                                                                          *
 * PluckFirstField: pulls the first "field" off of str and puts it in dest  *
 * (uses delim as a delimiter)                                              *
 *                                                                          *
 ****************************************************************************/
void PluckFirstField(char *str, char *dest, int maxlen, 
                     const char *delim)
{
  char *endpos;
  int p;

  if (!strlen(delim)) { strcpy(dest, str); return; }
  endpos = strstr(str, delim);
  if (!endpos) { strcpy(dest, str); return; }
  p = endpos - str;

  memset(dest, 0, maxlen);
  memcpy(dest, str, p);

  // pluck it off of str...
  strcpy(str, &str[p+strlen(delim)]);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -