hge source explor 0x9 Power & Random & Ini

Power

  电源管理部分,会用到的参数为:

    // Power
    int                            nPowerStatus;
    HMODULE                        hKrnl32;
    GetSystemPowerStatusFunc       lpfnGetSystemPowerStatus;

 

_InitPowerStatus()

  初始化电源信息:

  • LoadLibrary("kernel32.dll")
  • 获得函数GetSystemPowerStatus地址
  • 调用_UpdatePowerStatus
void HGE_Impl::_InitPowerStatus()
{
    hKrnl32 = LoadLibrary("kernel32.dll");

    if(hKrnl32 != NULL)
        lpfnGetSystemPowerStatus = (GetSystemPowerStatusFunc)GetProcAddress(hKrnl32, "GetSystemPowerStatus");

    _UpdatePowerStatus();
}
_InitPowerStatus

 

 _UpdatePowerStatus()

  获得电源信息。

void HGE_Impl::_UpdatePowerStatus()
{
    SYSTEM_POWER_STATUS ps;

    if(lpfnGetSystemPowerStatus != NULL && lpfnGetSystemPowerStatus(&ps))
    {
        if(ps.ACLineStatus == 1)
        {
            nPowerStatus = HGEPWR_AC;
        }
        else if(ps.BatteryFlag < 128)
        {
            nPowerStatus = ps.BatteryLifePercent;
        }
        else
        {
            nPowerStatus = HGEPWR_UNSUPPORTED;
        }
    }
    else
    {
        nPowerStatus = HGEPWR_UNSUPPORTED;
    }
}
_UpdatePowerStatus

 

 _DonePowerStatus()

  结束,释放动态链接库。

void HGE_Impl::_DonePowerStatus()
{
    if(hKrnl32 != NULL) FreeLibrary(hKrnl32);
}
_DonePowerStatus

 

Random

   在这个模块中提供随机数,作为唯一的参数的 是随机数的种子。

unsigned int g_seed=0;

 

 Random_Seed(int seed)

  设置随机数的种子。

void CALL HGE_Impl::Random_Seed(int seed)
{
    if(!seed) g_seed=timeGetTime();
    else g_seed=seed;
}
Random_Seed  

 

 Random_Int(int min, int max)

  线性同余法产生一个整型随机数,范围为(min,max)。

int CALL HGE_Impl::Random_Int(int min, int max)
{
    g_seed=214013*g_seed+2531011;
    return min+(g_seed ^ g_seed>>15)%(max-min+1);
}
Random_Int  

 

 Random_Float(float min, float max)

  产生一个浮点型随机数,范围为(min,max)。

float CALL HGE_Impl::Random_Float(float min, float max)
{
    g_seed=214013*g_seed+2531011;
    //return min+g_seed*(1.0f/4294967295.0f)*(max-min);
    return min+(g_seed>>16)*(1.0f/65535.0f)*(max-min);
}
Random_Float

 

Ini

   在这个部分中,从指定的Ini文件中读取、写入数据,所以需要一ini文件。

    char                szIniFile[_MAX_PATH];

 

 

set(const char* section,const char* name,type value);

  写入不同类型的参数。

void CALL HGE_Impl::Ini_SetInt(const char *section, const char *name, int value)
{
    char buf[256];

    if(szIniFile[0]) {
        sprintf(buf,"%d",value);
        WritePrivateProfileString(section, name, buf, szIniFile);
    }
}

void CALL HGE_Impl::Ini_SetFloat(const char *section, const char *name, float value)
{
    char buf[256];

    if(szIniFile[0]) {
        sprintf(buf,"%f",value);
        WritePrivateProfileString(section, name, buf, szIniFile);
    }
}

void CALL HGE_Impl::Ini_SetString(const char *section, const char *name, const char *value)
{
    if(szIniFile[0]) WritePrivateProfileString(section, name, value, szIniFile);
}
Setter

 

get(const char* section,const char* name, type value);

  读取数据。

int CALL HGE_Impl::Ini_GetInt(const char *section, const char *name, int def_val)
{
    char buf[256];

    if(szIniFile[0]) {
        if(GetPrivateProfileString(section, name, "", buf, sizeof(buf), szIniFile))
        { return atoi(buf); }
        else { return def_val; }
    }
    return def_val;
}


float CALL HGE_Impl::Ini_GetFloat(const char *section, const char *name, float def_val)
{
    char buf[256];

    if(szIniFile[0]) {
        if(GetPrivateProfileString(section, name, "", buf, sizeof(buf), szIniFile))
        { return (float)atof(buf); }
        else { return def_val; }
    }
    return def_val;
}

char* CALL HGE_Impl::Ini_GetString(const char *section, const char *name, const char *def_val)
{
    if(szIniFile[0]) GetPrivateProfileString(section, name, def_val, szIniString, sizeof(szIniString), szIniFile);
    else strcpy(szIniString, def_val);
    return szIniString;
}
Getter

  接下来就是图形了!

 

转载于:https://www.cnblogs.com/yoru/p/5515570.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值