/********************* BUILD 2013/3/26 22:44 **********************************
Copyright (c) 2010-? by Fonty.Liu. ALL RIGHTS RESERVED.
Consult your license regarding permissions and restrictions.
Module Name:
base.cpp
Abstract:
*******************************************************************************/
#include "stdafx.h"
#include "base.h"
#include <shlobj.h>
#include <shellapi.h>
#include <shlwapi.h>
#pragma comment(lib,"version")
#pragma comment(lib,"shlwapi")
#pragma warning(push)
#pragma warning(disable : 4996)
namespace base
{
void Utility::trace(LPCTSTR lpszFormat, ...)
{
va_list args;
va_start(args, lpszFormat);
TCHAR szBuffer[512];
int nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);
ASSERT(nBuf >= 0);
::OutputDebugString(szBuffer);
va_end(args);
}
Utility::OSVERSION Utility::getOsVersion()
{
static bool checkedVersion = false;
static OSVERSION osVersion = OSVERSION_PRE_2000;
if(checkedVersion)
return osVersion;
OSVERSIONINFOEX versionInfo;
versionInfo.dwOSVersionInfoSize = sizeof(versionInfo);
::GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&versionInfo));
if (versionInfo.dwMajorVersion == 5)
{
if(versionInfo.dwMinorVersion == 0)
osVersion = OSVERSION_2000;
else if(versionInfo.dwMinorVersion == 1)
osVersion = OSVERSION_XP;
else
osVersion = OSVERSION_SERVER_2003;
}
else if (versionInfo.dwMajorVersion == 6)
{
if (versionInfo.wProductType != VER_NT_WORKSTATION)
osVersion = OSVERSION_2008; // 2008 is 6.0, and 2008 R2 is 6.1.
else if(versionInfo.dwMinorVersion == 0)
osVersion = OSVERSION_VISTA;
else
osVersion = OSVERSION_WIN7;
}
else if (versionInfo.dwMajorVersion > 6)
{
osVersion = OSVERSION_WIN7;
}
checkedVersion = true;
return osVersion;
}
XUI::String Utility::getLastErrorInfo()
{
LPVOID msgBuf;
DWORD dwFlags = (FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS);
::FormatMessage(dwFlags,NULL,::GetLastError(),0,(LPTSTR) &msgBuf,0,NULL );
XUI::String errinfo = (LPCTSTR)msgBuf;
LocalFree(msgBuf);
return errinfo;
}
XUI::String Utility::getLastErrorInfo(DWORD err)
{
LPVOID msgBuf;
DWORD dwFlags = (FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS);
::FormatMessage(dwFlags,NULL,err,0,(LPTSTR) &msgBuf,0,NULL );
XUI::String errinfo = (LPCTSTR)msgBuf;
LocalFree(msgBuf);
return errinfo;
}
void Utility::traceLastError()
{
trace((LPCTSTR)getLastErrorInfo());
}
void Utility::traceLastError(DWORD err)
{
trace((LPCTSTR)getLastErrorInfo(err));
}
int Utility::messageBox(HWND hWnd,LPCTSTR text,UINT uType)
{
XUI::String caption;
caption.LoadString(NULL,128);
return XUI::MessageBox(hWnd,text,caption,uType);
}
bool Utility::checkFileExist(LPCTSTR path)
{
HANDLE h = ::CreateFile(path,0,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
if(h == INVALID_HANDLE_VALUE )
return FALSE;
::CloseHandle(h);
return TRUE;
}
bool Utility::createDirectory(LPCTSTR path)
{
ASSERT(path);
if(path == 0 || *path == 0)
return false;
XUI::String pathname = path;
TCHAR ch = pathname[pathname.GetLength()-1];
if(ch != _T('\\') && ch != _T('/'))
pathname +=_T('\\');
for(int i = 0; i< pathname.GetLength(); i++)
{
if(pathname[i] == _T('\\')||pathname[i] == _T('/'))
{
XUI::String name = pathname.Left(i);
if(!checkFileExist(name) && !::CreateDirectory(name,NULL))
return false;
}
}
return true;
}
bool Utility::splitFileTitle(LPCTSTR path,XUI::String &title)
{
title.Empty();
ASSERT(path);
LPCTSTR __pEnd = path + _tcslen(path);
LPCTSTR __pPtr = __pEnd;
LPCTSTR __pDot = NULL;
LPCTSTR __pSlat= path;
if(__pEnd <= path)
return false;
if(*(__pEnd - 1) == _T('\\') || *(__pEnd -1) == _T('/')) --__pEnd;
if(__pEnd <= path)
return false;
for(;__pPtr != path;--__pPtr)
{
if(*__pPtr == _T('.') && __pDot == NULL) { __pDot = __pPtr;}
if(*__pPtr == _T('\\')||*__pPtr == _T('/')){ __pSlat= __pPtr + 1;break;}
}
if(__pDot == NULL) __pDot = __pEnd;
if((int)(__pDot - __pSlat) <=0)
return false;
title = XUI::String(__pSlat,(int)(__pDot - __pSlat));
return true;
}
bool Utility::splitFileExt(LPCTSTR path,XUI::String& extension)
{
extension.Empty();
ASSERT(path);
LPCTSTR __pEnd = path + _tcslen(path);
LPCTSTR __pPtr = __pEnd;
LPCTSTR __pDot = NULL;
if(__pEnd <= path)
return false;
if(*(__pEnd - 1) == _T('\\') || *(__pEnd -1) == _T('/'))
return false;
for(;__pPtr != path;--__pPtr)
{
if(*__pPtr == _T('.') && __pDot == NULL) { __pDot = __pPtr + 1;break;}
}
if(__pDot == NULL)
return false;
if((int)(__pEnd - __pDot) <=0)
return false;
extension = XUI::String(__pDot,(int)(__pEnd - __pDot));
return true;
}
bool Utility::splitFileName(LPCTSTR path,XUI::String& filename)
{
filename.Empty();
ASSERT(path);
LPCTSTR __pEnd = path + _tcslen(path);
LPCTSTR __pPtr = __pEnd;
LPCTSTR __pSlat= path;
if(__pEnd <= path)
return false;
if(*(__pEnd - 1) == _T('\\') || *(__pEnd -1) == _T('/')) --__pEnd;
if(__pEnd <= path)
return false;
for(;__pPtr != path;--__pPtr)
{
if(*__pPtr == _T('\\')||*__pPtr == _T('/')){ __pSlat= __pPtr + 1;break;}
}
if((int)(__pEnd - __pSlat) <=0)
return false;
filename = XUI::String(__pSlat,(int)(__pEnd - __pSlat));
return true;
}
bool Utility::clearFileSecurity(LPCTSTR filename)
{
SECURITY_DESCRIPTOR sd;
if(!::InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION))
return false;
return !!::SetFileSecurity(filename,DACL_SECURITY_INFORMATION,&sd);
}
DWORD Utility::getFileAttributes(LPCTSTR filename)
{
return ::GetFileAttributes(filename);
}
bool Utility::setFileAttributes(LPCTSTR filename,DWORD attributes)
{
return !!::SetFileAttributes(filename,attributes);
}
bool Utility::setFileReadonly(LPCTSTR filename,BOOL readonly)
{
DWORD dw = getFileAttributes(filename);
if(readonly)
{
if(!XUI::check_flag<DWORD>(dw,FILE_ATTRIBUTE_READONLY))
return setFileAttributes(filename,dw|FILE_ATTRIBUTE_READONLY);
return true;
}
else
{
if(XUI::check_flag<DWORD>(dw,FILE_ATTRIBUTE_READONLY))
return setFileAttributes(filename,dw&(~FILE_ATTRIBUTE_READONLY));
return true;
}
return false;
}
bool Utility::deleteFile(LPCTSTR fileName,bool anyway)
{
if(!checkFileExist(fileName))
没有合适的资源?快使用搜索试试~ 我知道了~
界面库XUI Demo
共28个文件
h:15个
cpp:4个
lib:2个
3星 · 超过75%的资源 需积分: 50 41 下载量 142 浏览量
2013-04-04
01:48:57
上传
评论 2
收藏 13.79MB RAR 举报
温馨提示
XUI界面库是一套基于directUI 的界面框架库,所有控件元素全部自绘,可以通过一个style脚本文件控制控件元素的外观,支持bmp、jpg、gif、png、icon图片格式,支持lua脚本(C++可以非常方便地扩展lua,而无需理解lua的工作方式),并集成了内存管理,xml文件读写,资源压缩(有两种压缩算法:lzw和zip),XUI目前支持Unicode。XUI可以同MFC,wtl等界面库兼容工作。如需了解更多信息,请联系QQ:57663111
资源推荐
资源详情
资源评论
收起资源包目录
xuiapp_demo.rar (28个子文件)
xuiapp_demo
bin
xuiapp.xres 731KB
dialog.lua 2KB
main.lua 14KB
xuiapp.exe 2.11MB
include
IXRAchive.h 8KB
IXUIApi.h 17KB
IXUIBase.h 4KB
ICommon.h 11KB
IXUIUtil.h 12KB
IXUIXml.h 7KB
IXLUA.h 75KB
IXUICore.h 125KB
IXUIString.h 49KB
xuiapp
main.cpp 3KB
main.h 794B
security.cpp 3KB
resource.h 492B
stdafx.h 783B
targetver.h 1020B
xuiapp.rc 3KB
stdafx.cpp 365B
xuiapp.vcproj 5KB
security.h 1KB
base.h 8KB
res
xuiapp.ico 15KB
base.cpp 24KB
lib
xuicoreD.lib 36.86MB
xuicore.lib 80.56MB
共 28 条
- 1
资源评论
- zerotas2015-01-11炫彩界面库已免费,开源,可以好好使用的
- luohegongmin2014-04-30就一安装文件exe,没源码
fonty
- 粉丝: 4
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功