📄 checkbox.cpp
字号:
//--------------------------------------------------
// Desc: CheckBox & RadioBox
// Author: artsylee/2006.11.17
//--------------------------------------------------
#include "../stdafx.h"
#include "CheckBox.h"
#include "../Core/Common.h"
#include "../Core/Input.h"
#include "../Core/IniFile.h"
#include "../Core/Graphics.h"
#include "../Core/TextureManager.h"
#include "../Core/Message.h"
CCheckBox::CCheckBox(CWindow* pParent):CWindow(pParent)
{
m_dwGUIType = GUI_CHECKBOX;
m_State = CHECK_NORMAL;
m_StateNum = FOURSTATE;
m_bSelect = false;
m_bDependent = false;
}
CCheckBox::~CCheckBox()
{
}
bool CCheckBox::LoadFromIni(char* pfilename, char* pIndex)
{
CIniFile ui(pfilename);
m_dwID = ui.ReadDWORD(pIndex, "ID");
m_ptPos = ui.ReadPoint(pIndex, "Position");
m_rcSrc = ui.ReadRect(pIndex, "SrcRect");
m_dwColor = ui.ReadDWORD(pIndex, "Color", 0xffffffff);
m_dwAttrib = ui.ReadDWORD(pIndex, "Attrib", 10);
m_bUseRgn = ui.ReadBOOL(pIndex, "UseRGN", m_bUseRgn);
ui.ReadString(pIndex, "File", m_szUIPath);
DWORD index = ui.ReadDWORD(pIndex, "Picture");
if(ui.IsReadSucceed())
{
m_hTexture = g_pTextureManager->LoadAMFTexture(m_szUIPath, index);
GRect zeroRc(0, 0, 0, 0);
if(m_rcSrc==zeroRc)
{
CTexture * ptex = g_pTextureManager->GetTexture(m_hTexture);
if(ptex)
{
m_rcSrc.SetRect(0, 0, ptex->GetWidth(), ptex->GetHeight());
}
}
}
m_StateNum = ui.ReadInt(pIndex, "StateNum", m_StateNum);
for(int i=0; i<CHECK_STATENUM*2; i++)
{
m_DstRect[i].SetRectWH(0, i*(m_rcSrc.Height()/m_StateNum), m_rcSrc.Width(), m_rcSrc.Height()/m_StateNum);
}
m_Width = m_DstRect[CHECK_NORMAL].Width();
m_Height = m_DstRect[CHECK_NORMAL].Height();
if(m_hTexture && m_bUseRgn)
{
CreateRGN(&m_DstRect[CHECK_NORMAL]);
}
if(m_pParent)
{
OffSet(m_pParent->GetRect().left, m_pParent->GetRect().top);
}
if(m_dwAttrib & GUI_ENABLE)
{
m_State = CHECK_NORMAL;
}
else if(m_StateNum>=SIXSTATE)
{
m_State = CHECK_DISABLE;
}
return true;
}
void CCheckBox::Render()
{
if(m_dwAttrib & GUI_VISIBLE)
{
g_pGraphics->RenderSprite(m_hTexture, m_ptPos.x, m_ptPos.y, &m_DstRect[m_State*2+m_bSelect], m_dwColor);
}
}
DWORD CCheckBox::ProcessEvent()
{
if(!(m_dwAttrib & GUI_VISIBLE) || !(m_dwAttrib & GUI_ENABLE) || m_hTexture==INVALID_HANDLE)
{
return INVALID_ID;
}
GRect rcPos;
rcPos.SetRectWH(m_ptPos.x, m_ptPos.y, m_Width, m_Height);
if(CheckInRGN(rcPos))
{
if(m_State!=CHECK_HIGHLIGHT && m_StateNum>=FOURSTATE)
{
//发送Mouseon信息
CMessage msg(MSG_SYS_GUI, m_dwID);
msg.SetParameter(GUI_MOUSE_OVER, m_bSelect, this);
PostMessage(msg);
m_State = CHECK_HIGHLIGHT;
}
if(g_stInputInfo.MouseValue==LB_DOWN)
{
if(!m_bDependent)
{
m_bSelect = !m_bSelect;
//发送MOUSEDOWN信息
CMessage msg(MSG_SYS_GUI, m_dwID);
msg.SetParameter(GUI_VALUE_CHANGE, m_bSelect, this);
PostMessage(msg);
}
else if(!m_bSelect)
{
m_bSelect = true;
// 复选框无需发送LBUTTON_DOWN信息
}
return m_dwID;
}
}
else
{
if(m_State!=CHECK_NORMAL)
{
//发送MouseLOST信息
CMessage msg(MSG_SYS_GUI, m_dwID);
msg.SetParameter(GUI_LOST_FOCUS, m_bSelect, this);
PostMessage(msg);
m_State = CHECK_NORMAL;
}
return INVALID_ID;
}
return INVALID_ID;
}
void CCheckBox::SetSelect(bool c /* = true */)
{
if(c != m_bSelect && !m_bDependent)
{
//发送MOUSEDOWN信息
CMessage msg(MSG_SYS_GUI, m_dwID);
msg.SetParameter(GUI_VALUE_CHANGE, c, this);
PostMessage(msg);
}
m_bSelect = c;
};
void CCheckBox::Enable()
{
if(!(m_dwAttrib & GUI_ENABLE))
{
m_State = CHECK_NORMAL;
m_dwAttrib |= GUI_ENABLE;
}
}
void CCheckBox::Disable()
{
if(m_dwAttrib & GUI_ENABLE)
{
m_dwAttrib &= ~GUI_ENABLE;
}
if(m_StateNum>=SIXSTATE)
{
m_State = CHECK_DISABLE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -