617 lines
14 KiB
C++
617 lines
14 KiB
C++
#include "stdafx.h"
|
||
#include "PublicFunc.h"
|
||
//#include "UI_INI.h"
|
||
//#include "DirectshowCaptureVideo.h"
|
||
//#include "DirectshowCaptureVideoUvc.h"
|
||
//#include "WatermarkDataType.h"
|
||
//#include "SupperDevType.h"
|
||
#include "CTwainMutex.h"
|
||
#include <io.h>
|
||
|
||
|
||
|
||
BOOL g_b_show_ui_flg = FALSE;
|
||
|
||
//WATER_PRO g_st_water_pro = {0};
|
||
BOOL g_add_water_flg = FALSE;
|
||
DWORD g_dw_white_bright_count = 40000;
|
||
|
||
//CDirectshowCaptureVideoUvc g_dc_uvc_video;
|
||
BOOL g_b_use_uvc_dev = FALSE;
|
||
TWAIN_IMAGE_DATA_INFO g_st_twain_bmp_info = {0};
|
||
BOOL g_b_brigth_show_flg = TRUE;
|
||
HWND g_hwnd_dlg = NULL;
|
||
|
||
//CDirectshowCaptureVideo g_dc_video;
|
||
|
||
TCHAR* GetUserCustomFilePath(HWND hWin, TCHAR* lpFilePath, TCHAR *lp_head_text )
|
||
{
|
||
if ( lpFilePath == NULL )
|
||
{
|
||
return NULL;
|
||
}
|
||
|
||
BROWSEINFO bi = {0};
|
||
TCHAR szBuffer[MAX_PATH] = {0};
|
||
|
||
memset(&bi, 0, sizeof(BROWSEINFO));
|
||
|
||
|
||
bi.hwndOwner = hWin;
|
||
bi.pszDisplayName = GetExistFileDir(lpFilePath);
|
||
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_SHAREABLE | BIF_USENEWUI | BIF_RETURNFSANCESTORS ;
|
||
|
||
LPITEMIDLIST pIDList = NULL;
|
||
LPMALLOC lpMalloc = NULL;
|
||
//m_pUI_INI->GetMessageBoxStr(szBuffer, sizeof(szBuffer), 1041);
|
||
//bi.lpszTitle = szBuffer;//1041=请选择文件存储路径
|
||
bi.lpszTitle = lp_head_text;//TEXT("请选择新建文件夹");
|
||
bi.lpfn = (BFFCALLBACK)BrowserCallbackProc; //回调函数
|
||
bi.lParam = (LPARAM)lpFilePath; //回调函数的使用的参数,用来设定默认路径
|
||
|
||
pIDList = SHBrowseForFolder(&bi);
|
||
if ( pIDList != NULL )
|
||
{
|
||
SHGetPathFromIDList(pIDList, lpFilePath);
|
||
}
|
||
if ( SHGetMalloc( &lpMalloc ) )
|
||
{
|
||
return NULL; //释放内存
|
||
}
|
||
if ( pIDList == NULL )
|
||
{
|
||
return NULL; //释放内存
|
||
}
|
||
lpMalloc->Free(pIDList);
|
||
lpMalloc->Release();
|
||
pIDList = NULL;
|
||
lpMalloc = NULL;
|
||
//_tcscpy(lpFilePath, szBuffer2);
|
||
return lpFilePath;
|
||
}
|
||
|
||
TCHAR* GetCurExeFilePath(HINSTANCE hInstance, TCHAR* lpPath, DWORD dwSize)
|
||
{
|
||
INT nRet = 0x0L;
|
||
TCHAR *p = NULL;
|
||
if ( lpPath == NULL || dwSize == 0 )
|
||
{
|
||
return NULL;
|
||
}
|
||
nRet = GetModuleFileName(hInstance, lpPath, dwSize);
|
||
if (nRet > 0)
|
||
{
|
||
p = _tcsrchr(lpPath, TEXT('\\'));
|
||
if ( p != NULL )
|
||
{
|
||
*(p+1) = TEXT('\0');
|
||
}
|
||
else
|
||
{
|
||
return NULL;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
return NULL;
|
||
}
|
||
return lpPath;
|
||
}
|
||
|
||
TCHAR* GetExistFileDir(TCHAR* p_file_path)
|
||
{
|
||
WIN32_FIND_DATA wfd = {0};
|
||
LPSTR p_test = NULL;
|
||
HANDLE hFindFile = INVALID_HANDLE_VALUE;
|
||
|
||
if ( p_file_path == NULL )
|
||
return NULL;
|
||
|
||
hFindFile = FindFirstFile(p_file_path, &wfd);
|
||
if (hFindFile != NULL)
|
||
{
|
||
FindClose(hFindFile);
|
||
hFindFile= INVALID_HANDLE_VALUE;
|
||
}
|
||
if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
|
||
{
|
||
return p_file_path;
|
||
}
|
||
|
||
p_test = _tcsrchr(p_file_path, '\\');
|
||
if ( p_test != NULL )
|
||
{
|
||
*p_test = 0;
|
||
return GetExistFileDir(p_file_path);
|
||
}
|
||
else
|
||
{
|
||
return NULL;
|
||
}
|
||
}
|
||
|
||
DWORD CALLBACK BrowserCallbackProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||
{
|
||
switch(uMsg)
|
||
{
|
||
case BFFM_INITIALIZED: //LPARAM(TEXT("D:\\test_adf_project"))
|
||
SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lParam); //lpData就是上一个函数的 info.lParam ,也就是默认路径
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
BOOL CheckAndCreateFileDir(TCHAR* p_file_path, BOOL flg)
|
||
{
|
||
TCHAR szTmp[MAX_PATH] = {0};
|
||
WIN32_FIND_DATA wfd = {0};
|
||
INT len = 0;
|
||
INT pos = 0;
|
||
BOOL bFlg = FALSE;
|
||
HANDLE hFindFile = INVALID_HANDLE_VALUE;
|
||
|
||
if ( p_file_path == NULL )
|
||
return FALSE;
|
||
|
||
if ( *p_file_path >= 'a' && *p_file_path <= 'z' || *p_file_path >= 'A' && *p_file_path <= 'Z')
|
||
{
|
||
if ( *(p_file_path+1) != ':' && *(p_file_path+2) != '\\')
|
||
{
|
||
return FALSE;
|
||
}
|
||
}
|
||
if ( _access(p_file_path, 0) == 0)
|
||
{
|
||
return TRUE;
|
||
}
|
||
|
||
if ( !flg )
|
||
return FALSE;
|
||
|
||
if ( CreateDirectory(p_file_path, NULL) )
|
||
return TRUE;
|
||
|
||
_tcscpy(szTmp, p_file_path);
|
||
|
||
len = (INT)_tcslen(szTmp);
|
||
|
||
bFlg = FALSE;
|
||
while(len)
|
||
{
|
||
if ( *(szTmp+len-1) == '\\' )
|
||
{
|
||
bFlg = TRUE;
|
||
break;
|
||
}
|
||
len--;
|
||
}
|
||
if ( bFlg )
|
||
{
|
||
*(szTmp+len-1) = 0;
|
||
CheckAndCreateFileDir(szTmp, flg);
|
||
return CreateDirectory(p_file_path, NULL);
|
||
}
|
||
else
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL CheckDiskFreeBitM(HWND hWin, TCHAR *p_disk_name, DWORD dw_min_bit_m)
|
||
{
|
||
TCHAR *p = NULL;
|
||
TCHAR sz_root_path_name[MAX_PATH + 1] = {0};
|
||
INT len = 0;
|
||
|
||
DWORD dwTotalDiskSpace = 0;
|
||
DWORD dwFreeDiskSpace = 0;
|
||
DWORD dwUsedDiskSpace = 0;
|
||
|
||
ULARGE_INTEGER uiFreeBytesAvailableToCaller;
|
||
ULARGE_INTEGER uiTotalNumberOfBytes;
|
||
ULARGE_INTEGER uiTotalNumberOfFreeBytes;
|
||
|
||
UINT un_ret = 0;
|
||
if ( p_disk_name == NULL )
|
||
return FALSE;
|
||
|
||
len = _tcslen(p_disk_name);
|
||
if ( len > MAX_PATH )
|
||
{
|
||
len = MAX_PATH;
|
||
}
|
||
|
||
memcpy(sz_root_path_name, p_disk_name, (size_t)len);
|
||
|
||
p = _tcsstr(sz_root_path_name, "\\");
|
||
if ( p == NULL )
|
||
{
|
||
if ( len == 2 )
|
||
{
|
||
if ( !((sz_root_path_name[0] >= 'A' && sz_root_path_name[0] <= 'Z' || sz_root_path_name[0] >= 'a' && sz_root_path_name[0] <= 'z') && sz_root_path_name[1]== ':') )
|
||
return FALSE;
|
||
}
|
||
else
|
||
return FALSE;
|
||
}
|
||
if ( p != NULL )
|
||
*(p+1) = 0;
|
||
un_ret = GetDriveType(sz_root_path_name);
|
||
if ( un_ret == 0 || un_ret == 1)
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
if(GetDiskFreeSpaceEx(sz_root_path_name, &uiFreeBytesAvailableToCaller, &uiTotalNumberOfBytes, &uiTotalNumberOfFreeBytes))
|
||
{
|
||
//dwTotalDiskSpace = (DWORD)(uiTotalNumberOfBytes.QuadPart / 1024 / 1024);
|
||
dwFreeDiskSpace = (DWORD)(uiFreeBytesAvailableToCaller.QuadPart >> 20);
|
||
//dwUsedDiskSpace = dwTotalDiskSpace - dwFreeDiskSpace;
|
||
if ( dwFreeDiskSpace < dw_min_bit_m )
|
||
{
|
||
//ShowErrorStr(hWin, 1101);//1101=磁盘空间不足
|
||
MyMessageBox( TEXT("磁盘分区可用空间不足"), 0, MB_ICONWARNING);
|
||
return FALSE;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MyMessageBox( TEXT("磁盘分区可用空间不足"), 0, MB_ICONWARNING);
|
||
//GetErrorMessage(NULL, 0, FALSE);
|
||
return FALSE;
|
||
}
|
||
//ShowErrorStr(hWin, 1101);//1101=磁盘空间不足
|
||
//return FALSE;
|
||
return TRUE;
|
||
}
|
||
|
||
HBITMAP SetButtonStaticBkBmp(HINSTANCE hInst, HWND hWin, UINT id, UINT iamge_id)
|
||
{
|
||
|
||
UINT ctr_msg = 0;
|
||
UINT str_iamge_type = 0;
|
||
HBITMAP hBitmap = NULL;
|
||
HBITMAP hOldBitmap = NULL;
|
||
//BS_ICON BS_BITMAP
|
||
//SS_BITMAP|SS_CENTERIMAGE SS_ICON
|
||
|
||
LONG ctr_s = 0;
|
||
ctr_s = GetWindowLong(GetDlgItem(hWin, id), GWL_STYLE);
|
||
|
||
ctr_msg = STM_SETIMAGE;
|
||
ctr_s |= SS_BITMAP | SS_CENTERIMAGE | SS_RIGHT;
|
||
|
||
hBitmap = LoadBitmap(hInst, MAKEINTRESOURCE(iamge_id));
|
||
|
||
if ( hBitmap == NULL )
|
||
{
|
||
return NULL;
|
||
}
|
||
|
||
SetWindowLong(GetDlgItem(hWin, id), GWL_STYLE, ctr_s);
|
||
hOldBitmap = (HBITMAP)SendDlgItemMessage(hWin, id, ctr_msg, IMAGE_BITMAP, (LPARAM)hBitmap);
|
||
if ( hOldBitmap != NULL )
|
||
{
|
||
DeleteObject(hOldBitmap);
|
||
hOldBitmap = NULL;
|
||
}
|
||
DeleteObject(hBitmap);
|
||
hBitmap = NULL;
|
||
return hBitmap;
|
||
}
|
||
|
||
|
||
VOID FreeTwainFileListMem()
|
||
{
|
||
if ( g_st_twain_bmp_info.p_wifl != NULL )
|
||
{
|
||
free(g_st_twain_bmp_info.p_wifl);
|
||
g_st_twain_bmp_info.p_wifl = NULL;
|
||
}
|
||
|
||
//if ( g_st_twain_bmp_info.st_bmp_info.p_image_data != NULL )
|
||
//{
|
||
// free(g_st_twain_bmp_info.st_bmp_info.p_image_data);
|
||
// g_st_twain_bmp_info.st_bmp_info.p_image_data = NULL;
|
||
//}
|
||
//memset(&g_st_twain_bmp_info, 0, sizeof(TWAIN_IMAGE_DATA_INFO));
|
||
}
|
||
|
||
BOOL MallocTwainFileListMem()
|
||
{
|
||
if ( g_st_twain_bmp_info.p_wifl == NULL )
|
||
{
|
||
memset(&g_st_twain_bmp_info, 0, sizeof(TWAIN_IMAGE_DATA_INFO));
|
||
}
|
||
else if ( g_st_twain_bmp_info.n_wifl_count != 0 && g_st_twain_bmp_info.p_wifl == NULL )
|
||
{
|
||
memset(&g_st_twain_bmp_info, 0, sizeof(TWAIN_IMAGE_DATA_INFO));
|
||
}
|
||
|
||
if ( g_st_twain_bmp_info.n_wifl_cur_count +3 > g_st_twain_bmp_info.n_wifl_count)
|
||
{
|
||
if ( SHGetSpecialFolderPath(NULL, g_st_twain_bmp_info.sz_path_dir, CSIDL_LOCAL_APPDATA, TRUE) )
|
||
{
|
||
INT len = _tcslen(g_st_twain_bmp_info.sz_path_dir);
|
||
if ( len > 0 )
|
||
{
|
||
//if ( g_st_twain_bmp_info.sz_path_dir[len -1] != '\\' )
|
||
// _tcscat(g_st_twain_bmp_info.sz_path_dir, TEXT("\\"));
|
||
//_tcscat(g_st_twain_bmp_info.sz_path_dir, TWAIN_DATA_PATH);
|
||
//CheckAndCreateFileDir(g_st_twain_bmp_info.sz_path_dir, TRUE);
|
||
}
|
||
}
|
||
else
|
||
return FALSE;
|
||
if ( g_st_twain_bmp_info.p_wifl == NULL )
|
||
{
|
||
g_st_twain_bmp_info.p_wifl = (PTWAIN_IMAGE_FILE_LIST)malloc(sizeof(TWAIN_IMAGE_FILE_LIST)* (g_st_twain_bmp_info.n_wifl_count + 20));
|
||
if ( g_st_twain_bmp_info.p_wifl != NULL )
|
||
{
|
||
memset(g_st_twain_bmp_info.p_wifl, 0, sizeof(TWAIN_IMAGE_FILE_LIST)* (g_st_twain_bmp_info.n_wifl_count + 20));
|
||
g_st_twain_bmp_info.n_wifl_count += 20;
|
||
|
||
|
||
}
|
||
else
|
||
return FALSE;
|
||
}
|
||
else
|
||
{
|
||
PTWAIN_IMAGE_FILE_LIST p_wifl = (PTWAIN_IMAGE_FILE_LIST)malloc(sizeof(TWAIN_IMAGE_FILE_LIST)* (g_st_twain_bmp_info.n_wifl_count + 20));
|
||
if ( g_st_twain_bmp_info.p_wifl != NULL )
|
||
{
|
||
memset(p_wifl, 0, sizeof(TWAIN_IMAGE_FILE_LIST)* (g_st_twain_bmp_info.n_wifl_count + 20));
|
||
memcpy(p_wifl, g_st_twain_bmp_info.p_wifl, sizeof(TWAIN_IMAGE_FILE_LIST)* g_st_twain_bmp_info.n_wifl_cur_count );
|
||
g_st_twain_bmp_info.n_wifl_count += 20;
|
||
free(g_st_twain_bmp_info.p_wifl);
|
||
g_st_twain_bmp_info.p_wifl = p_wifl;
|
||
p_wifl = NULL;
|
||
}
|
||
else
|
||
return FALSE;
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL WriteTwianImageData(TCHAR *p_file_path, PBYTE p_data, DWORD dw_size)
|
||
{
|
||
DWORD dw_write_size = 0;
|
||
|
||
if ( p_file_path == NULL || p_data == NULL )
|
||
return FALSE;
|
||
if ( _msize(p_data) < dw_size )
|
||
return FALSE;
|
||
|
||
DeleteFile(p_file_path);
|
||
HANDLE h_file = CreateFile(p_file_path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, NULL, NULL);
|
||
if ( h_file == INVALID_HANDLE_VALUE )
|
||
{
|
||
return FALSE;
|
||
}
|
||
BOOL b_flg = WriteFile(h_file, p_data, dw_size, &dw_write_size,0);
|
||
if ( !b_flg || dw_size != dw_write_size )
|
||
{
|
||
b_flg = FALSE;
|
||
}
|
||
CloseHandle(h_file);
|
||
h_file = INVALID_HANDLE_VALUE;
|
||
if ( !b_flg )
|
||
{
|
||
DeleteFile(p_file_path);
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
DWORD ReadTwianImageData(TCHAR *p_file_path)
|
||
{
|
||
if ( p_file_path == NULL )
|
||
return 0;
|
||
|
||
DWORD dw_size = 0;
|
||
|
||
HANDLE h_file = CreateFile(p_file_path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
|
||
if ( h_file == INVALID_HANDLE_VALUE )
|
||
{
|
||
return 0;
|
||
}
|
||
dw_size = GetFileSize(h_file, 0);
|
||
if ( dw_size == 0 )
|
||
{
|
||
CloseHandle(h_file);
|
||
return 0;
|
||
}
|
||
//if ( g_st_twain_bmp_info.st_bmp_info.p_image_data != NULL )
|
||
//{
|
||
// free(g_st_twain_bmp_info.st_bmp_info.p_image_data);
|
||
// g_st_twain_bmp_info.st_bmp_info.p_image_data = NULL;
|
||
//}
|
||
//DWORD dw_read_size = 0;
|
||
//g_st_twain_bmp_info.st_bmp_info.p_image_data = (PBYTE)malloc(dw_size);
|
||
//if ( g_st_twain_bmp_info.st_bmp_info.p_image_data == NULL )
|
||
//{
|
||
// CloseHandle(h_file);
|
||
// return 0;
|
||
//}
|
||
|
||
//BOOL b_flg = ReadFile(h_file, ////g_st_twain_bmp_info.st_bmp_info.p_image_data, dw_size, /&dw_read_size,/ 0);
|
||
////CloseHandle(h_file);
|
||
//h_file = INVALID_HANDLE_VALUE;
|
||
//if ( !b_flg || dw_size != dw_read_size)
|
||
//{
|
||
// //free(g_st_twain_bmp_info.st_bmp_info.p_image_data);
|
||
// dw_size = 0;
|
||
//}
|
||
//else
|
||
// DeleteFile(p_file_path);
|
||
|
||
return dw_size;
|
||
}
|
||
|
||
|
||
std::string UtfToString(std::string strValue)
|
||
{
|
||
int nwLen = ::MultiByteToWideChar(CP_ACP, 0, strValue.c_str(), -1, NULL, 0);
|
||
wchar_t * pwBuf = new wchar_t[nwLen + 1];//加上末尾'\0'
|
||
ZeroMemory(pwBuf, nwLen * 2 + 2);
|
||
::MultiByteToWideChar(CP_ACP, 0, strValue.c_str(), strValue.length(), pwBuf, nwLen);
|
||
int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
|
||
char * pBuf = new char[nLen + 1];
|
||
ZeroMemory(pBuf, nLen + 1);
|
||
::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
|
||
std::string retStr(pBuf);
|
||
delete []pwBuf;
|
||
delete []pBuf;
|
||
pwBuf = NULL;
|
||
pBuf = NULL;
|
||
return retStr;
|
||
}
|
||
|
||
|
||
std::string StringToUtf(std::string strValue)
|
||
{
|
||
int nwLen = MultiByteToWideChar(CP_UTF8, 0, strValue.c_str(), -1, NULL, 0);
|
||
wchar_t * pwBuf = new wchar_t[nwLen + 1];//加上末尾'\0'
|
||
memset(pwBuf, 0, nwLen * 2 + 2);
|
||
MultiByteToWideChar(CP_UTF8, 0, strValue.c_str(), strValue.length(), pwBuf, nwLen);
|
||
int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
|
||
char * pBuf = new char[nLen + 1];
|
||
memset(pBuf, 0, nLen + 1);
|
||
WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
|
||
std::string retStr = pBuf;
|
||
delete []pBuf;
|
||
delete []pwBuf;
|
||
return retStr;
|
||
}
|
||
|
||
DWORD MyMessageBox(TCHAR *p_str, TCHAR *p_str2, DWORD dw_id)
|
||
{
|
||
if ( p_str2 == NULL )
|
||
{
|
||
return MessageBox(g_hwnd_dlg, p_str, TEXT("test")/*g_p_cur_supper_sdti->sz_type_str*/, dw_id);
|
||
}
|
||
else
|
||
{
|
||
return MessageBox(g_hwnd_dlg, p_str, p_str2, dw_id);
|
||
}
|
||
}
|
||
|
||
CTwainMutex g_sys_mutex;
|
||
BOOL g_not_user_sineng_dev = true;
|
||
BOOL g_InitSysMutexRun()
|
||
{
|
||
//return g_sys_mutex.InitRunMutexId(COMPANY_NAME PRODUCT_NAME);
|
||
return true;
|
||
//return g_sys_mutex.CreatTwainMutex(SCANNERNAME);
|
||
}
|
||
|
||
BOOL g_InitSysMutexScanRun(DWORD dwPid, DWORD dwUid)
|
||
{
|
||
//return g_sys_mutex.InitScanRunMutexId(COMPANY_NAME PRODUCT_NAME, dwPid, dwUid);
|
||
return true;
|
||
}
|
||
|
||
BOOL g_CloseSysMutexRun()
|
||
{
|
||
//return g_sys_mutex.CloseAllScnDocA3Mutex();
|
||
return g_sys_mutex.CloseTwainMutex();
|
||
}
|
||
|
||
BOOL g_CloseOneSysMutexRun()
|
||
{
|
||
//return g_sys_mutex.CloseScnDocA3Mutex((SCN_MUTEX_TYPE)smt);
|
||
return true;
|
||
//return g_sys_mutex.CloseTwainMutex();
|
||
}
|
||
|
||
BOOL g_CheckSysMutex()
|
||
{
|
||
//return g_sys_mutex.CheckScnDocA3Mutex((SCN_MUTEX_TYPE)smt);
|
||
return true;
|
||
return g_sys_mutex.CheckExistTwainMutex(SCANNERNAME);
|
||
}
|
||
|
||
BOOL g_CreateSysMutex()
|
||
{
|
||
//return g_sys_mutex.CreateScnDocA3Mutex((SCN_MUTEX_TYPE)smt);
|
||
//return true;
|
||
return g_sys_mutex.CreatTwainMutex(SCANNERNAME);
|
||
}
|
||
|
||
RGBQUAD g_default_map[256] = {0};
|
||
|
||
BOOL ReadDefaultMap()
|
||
{
|
||
int i = 0;
|
||
for ( i = 0; i < 256; i++ )
|
||
{
|
||
g_default_map[i].rgbBlue = g_default_map[i].rgbGreen = g_default_map[i].rgbRed = i;
|
||
}
|
||
|
||
TCHAR sz_path[MAX_PATH] = {0};
|
||
bool nRet = GetModuleFileName(AfxGetApp()->m_hInstance, sz_path, sizeof(sz_path));
|
||
if (nRet > 0)
|
||
{
|
||
TCHAR *p = _tcsrchr(sz_path, TEXT('\\'));
|
||
if ( p != NULL )
|
||
{
|
||
*(p+1) = TEXT('\0');
|
||
}
|
||
else
|
||
{
|
||
return TRUE;
|
||
}
|
||
}
|
||
_tcscat(sz_path, TEXT("default.map"));
|
||
HANDLE hfile = CreateFile(sz_path, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, NULL, NULL);
|
||
if ( hfile != INVALID_HANDLE_VALUE )
|
||
{
|
||
DWORD dw_write = 0;
|
||
ReadFile(hfile, g_default_map, sizeof(g_default_map), &dw_write, NULL);
|
||
if ( dw_write != sizeof(g_default_map) )
|
||
{
|
||
nRet = false;
|
||
}
|
||
CloseHandle(hfile);
|
||
}
|
||
return nRet;
|
||
}
|
||
|
||
float GetContrast(int level)
|
||
{
|
||
float ret=0.0;
|
||
switch (level)
|
||
{
|
||
case -3:
|
||
ret=-1000.0;
|
||
break;
|
||
case -2:
|
||
ret=-666.0;
|
||
break;
|
||
case -1:
|
||
ret=-333.0;
|
||
break;
|
||
case 1:
|
||
ret=333.0;
|
||
break;
|
||
case 2:
|
||
ret=666.0;
|
||
break;
|
||
case 3:
|
||
ret=1000.0;
|
||
break;
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
VOID XdPrint(_TCHAR* format, ...)
|
||
{
|
||
va_list args;
|
||
va_start(args, format);
|
||
_TCHAR buf[256];
|
||
_vstprintf(buf, format, args);
|
||
OutputDebugString(buf);
|
||
va_end(args);
|
||
} |