www.pudn.com > mir112347628.rar > Button.cpp
// ÃÖ´ë ¹öưÀÇ ¼ö
#include "stdafx.h"
#define MAX_TXT_BUTTON_COUNT 5
/////////////////////////////////////////////////////////////////////////
// CTextButton : »ý¼ºÀÚ
/////////////////////////////////////////////////////////////////////////
CTextButton::CTextButton()
{
m_pTxtBtn.ClearAllNodes();
m_nTxtHeight = 0;
m_nMaxLine = 0;
m_bIsReady = FALSE;
m_IsUseSubTxt = FALSE;
}
/////////////////////////////////////////////////////////////////////////
// ~CTextButton : ¼Ò¸êÀÚ
/////////////////////////////////////////////////////////////////////////
CTextButton::~CTextButton()
{
ReleaseButtons();
}
/////////////////////////////////////////////////////////////////////////
// AddButton : Text ¹öưÀ» Ãß°¡ÇÑ´Ù.
/////////////////////////////////////////////////////////////////////////
// pszTxt: ȸ鿡 Ç¥½ÃµÉ Text
// xRect: ¹öưÀ¸·Î ÀÎ½ÄµÉ Rect ¿µ¿ª
// nLinePos: ÂïÈú°÷ÀÇ Line Count
// pszParam: Ŭ¸¯ µÇ¾úÀ»¶§ ¾²ÀÏ Parameter°ª
/////////////////////////////////////////////////////////////////////////
BOOL CTextButton::AddButton(CHAR *pszTxt,RECT xRect,INT nLinePos,CHAR *pszParam,COLORREF nColor,COLORREF cColor)
{
if(m_bIsReady)
{
SIZE tSize;
CMTxtBtn* tCMTxtBtn;
tCMTxtBtn = new CMTxtBtn;
tSize = g_xMainWnd.GetStrLength(NULL,NULL,pszTxt);
m_nTxtHeight = tSize.cy;
strcpy(tCMTxtBtn->Txt,pszTxt);
tCMTxtBtn->xRect = xRect;
tCMTxtBtn->nLinePos = nLinePos;
strcpy(tCMTxtBtn->Param,pszParam);
tCMTxtBtn->bIsClicked = FALSE;
tCMTxtBtn->nColor = nColor;
tCMTxtBtn->cColor = cColor;
m_pTxtBtn.AddNode(tCMTxtBtn);
return TRUE;
}
else
return FALSE;
}
BOOL CTextButton::AddButton(CHAR *pszTxt,CHAR *pszTxt2,RECT xRect,INT nLinePos,CHAR *pszParam,COLORREF nColor,COLORREF cColor)
{
if(m_bIsReady)
{
SIZE tSize;
CMTxtBtn* tCMTxtBtn;
tCMTxtBtn = new CMTxtBtn;
tSize = g_xMainWnd.GetStrLength(NULL,NULL,pszTxt);
m_nTxtHeight = tSize.cy;
strcpy(tCMTxtBtn->Txt,pszTxt);
strcpy(tCMTxtBtn->sTxt,pszTxt2);
tCMTxtBtn->xRect = xRect;
tCMTxtBtn->nLinePos = nLinePos;
strcpy(tCMTxtBtn->Param,pszParam);
tCMTxtBtn->bIsClicked = FALSE;
tCMTxtBtn->nColor = nColor;
tCMTxtBtn->cColor = cColor;
m_pTxtBtn.AddNode(tCMTxtBtn);
m_IsUseSubTxt = TRUE;
return TRUE;
}
else
return FALSE;
}
/////////////////////////////////////////////////////////////////////////
// ClickCheck : Button Click ¿¡ ÀÇÇÑ Click Checking À» ÇÑ´Ù.
/////////////////////////////////////////////////////////////////////////
// xPos: ½ÇÁ¦ ¸¶¿ì½º ÁÂÇ¥¸¦ ¹Þ¾Æ ¿Ã°Í
// xWndPos: ½ÇÁ¦ Text°¡ ¾²À̱⠽ÃÀÛ ÇÏ´Â °÷ÀÇ ÁÂÇ¥¸¦ ¹Þ¾î ¿Ã°Í
// CurrentTopLine: ÇöÁ¦ Window »ó¿¡ ÂïÈ÷´Â °¡Àå ÀÁÙ
/////////////////////////////////////////////////////////////////////////
CMTxtBtn* CTextButton::ClickCheck(POINT xWndPos,POINT xPos,INT CurrentTopLine)
{
if(m_bIsReady)
{
m_pTxtBtn.MoveCurrentToTop();
for(int i = 0; i<m_pTxtBtn.ListLength();i++)
{
if((m_pTxtBtn.GetCurrentData()->nLinePos >= CurrentTopLine) &amt;&amt; (m_pTxtBtn.GetCurrentData()->nLinePos <= CurrentTopLine+m_nMaxLine))
{
if(IsCurrsorOnThisButton(m_pTxtBtn.GetCurrentData(),xWndPos,xPos,CurrentTopLine))
{
m_pTxtBtn.GetCurrentData()->bIsClicked = !m_pTxtBtn.GetCurrentData()->bIsClicked;
return m_pTxtBtn.GetCurrentData();
}
}
m_pTxtBtn.MoveNextNode();
}
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////
// ReleaseButtons : ÀÌ¹Ì ÀâÇô ÀÖ´Â ¸ðµç ¹öưµéÀ» ³¯¸°´Ù.
/////////////////////////////////////////////////////////////////////////
BOOL CTextButton::ReleaseButtons(VOID)
{
if(m_bIsReady)
{
m_pTxtBtn.ClearAllNodes();
// m_bIsReady = FALSE;
m_nTxtHeight = 0;
return TRUE;
}
else
return FALSE;
}
/////////////////////////////////////////////////////////////////////////
// InitTxtBtn : º» Ŭ·¡½º¸¦ »ç¿ë ÇÒ¼ö ÀÖµµ·Ï Áغñ ÇÑ´Ù.
/////////////////////////////////////////////////////////////////////////
// nTextHeight: ½ÇÁ¦ TextÀÇ Height
// WndRect: À©µµ¿ìÀÇ Å©±â
// nMaxLine: ÂïÀ»¼ö ÀÖ´Â ÃÖ´ë ¶óÀμö
/////////////////////////////////////////////////////////////////////////
BOOL CTextButton::InitTxtBtn(INT nMaxLine,POINT StartPos,INT nLineGap)
{
m_bIsReady = TRUE;
m_nMaxLine = nMaxLine;
m_xStartPos = StartPos;
m_nLineGap = nLineGap;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////
// GetButton : ÇØ´ç ButtonÀÇ Æ÷ÀÎÅ͸¦ ¾ò´Â´Ù.
/////////////////////////////////////////////////////////////////////////
// nIndex : Index
/////////////////////////////////////////////////////////////////////////
CMTxtBtn* CTextButton::GetButton(INT nIndex)
{
if(nIndex<0 || nIndex>m_pTxtBtn.GetCounter()) return NULL;
m_pTxtBtn.MoveCurrentToTop();
m_pTxtBtn.MoveNode(nIndex);
return m_pTxtBtn.GetCurrentData();
}
/////////////////////////////////////////////////////////////////////////
// GetButtonCount : ButtonÀÇ ¼ö¸¦ ¾ò´Â´Ù.
/////////////////////////////////////////////////////////////////////////
INT CTextButton::GetButtonCount(VOID)
{
return m_pTxtBtn.GetCounter();
}
VOID CTextButton::ClickFreeAllBtn(VOID)
{
m_pTxtBtn.MoveCurrentToTop();
for(int i = 0 ; i < m_pTxtBtn.GetCounter() ; i++)
{
m_pTxtBtn.GetCurrentData()->bIsClicked = FALSE;
m_pTxtBtn.MoveNextNode();
}
}
/////////////////////////////////////////////////////////////////////////
// ClickCheck : Button Click ¿¡ ÀÇÇÑ Click Checking À» ÇÑ´Ù.
/////////////////////////////////////////////////////////////////////////
// xPos: ½ÇÁ¦ ¸¶¿ì½º ÁÂÇ¥¸¦ ¹Þ¾Æ ¿Ã°Í
// xWndPos: ½ÇÁ¦ Text°¡ ¾²À̱⠽ÃÀÛ ÇÏ´Â °÷ÀÇ ÁÂÇ¥¸¦ ¹Þ¾î ¿Ã°Í
// CurrentTopLine: ÇöÁ¦ Window »ó¿¡ ÂïÈ÷´Â °¡Àå ÀÁÙ
/////////////////////////////////////////////////////////////////////////
CMTxtBtn* CTextButton::ButtonDownCheck(POINT xWndPos,POINT xPos,INT CurrentTopLine)
{
/// CMTxtBtn* xResult=NULL;
/* int nTempX,nTempY;
int StdPosX,StdPosY; // ¿òÁ÷ÀÌ´Â À©µµ¿ì³»¿¡¼ ±âÁØ Á¡À» °è»ê ÇÑ´Ù.*/
if(m_bIsReady)
{
m_pTxtBtn.MoveCurrentToTop();
for(int i = 0; i<m_pTxtBtn.ListLength();i++)
{
if((m_pTxtBtn.GetCurrentData()->nLinePos >= CurrentTopLine) &amt;&amt; (m_pTxtBtn.GetCurrentData()->nLinePos <= CurrentTopLine+m_nMaxLine))
{
if(IsCurrsorOnThisButton(m_pTxtBtn.GetCurrentData(),xWndPos,xPos,CurrentTopLine))
{
m_pTxtBtn.GetCurrentData()->bIsClicked = TRUE;
return m_pTxtBtn.GetCurrentData();
}
m_pTxtBtn.GetCurrentData()->bIsClicked = FALSE;
}
m_pTxtBtn.MoveNextNode();
}
}
return NULL;
}
CMTxtBtn* CTextButton::ButtonUpCheck(POINT xWndPos,POINT xPos,INT CurrentTopLine)
{
if(m_bIsReady)
{
m_pTxtBtn.MoveCurrentToTop();
for(int i = 0; i<m_pTxtBtn.ListLength();i++)
{
if((m_pTxtBtn.GetCurrentData()->nLinePos >= CurrentTopLine) &amt;&amt; (m_pTxtBtn.GetCurrentData()->nLinePos <= CurrentTopLine+m_nMaxLine))
{
if(IsCurrsorOnThisButton(m_pTxtBtn.GetCurrentData(),xWndPos,xPos,CurrentTopLine))
{
m_pTxtBtn.GetCurrentData()->bIsClicked = FALSE;
return m_pTxtBtn.GetCurrentData();
}
}
m_pTxtBtn.MoveNextNode();
}
}
return NULL;
}
BOOL CTextButton::IsCurrsorOnThisButton(CMTxtBtn* pBtn,POINT xWndPos,POINT xPos,INT CurrentTopLine)
{
int nTempX,nTempY;
int StdPosX,StdPosY; // ¿òÁ÷ÀÌ´Â À©µµ¿ì³»¿¡¼ ±âÁØ Á¡À» °è»ê ÇÑ´Ù.
StdPosY = xWndPos.y + (pBtn->nLinePos - CurrentTopLine)*(m_nTxtHeight+m_nLineGap)+m_xStartPos.y; // °¡º¯ À§Ä¡¿¡¼ÀÇ TopÀ» ±¸ÇÑ´Ù.
StdPosX = xWndPos.x + pBtn->xRect.left+m_xStartPos.x; // °¡º¯ À§Ä¡¿¡¼ÀÇ Left¸¦ ±¸ÇÑ´Ù.
nTempX = StdPosX + pBtn->xRect.right;
nTempY = StdPosY + pBtn->xRect.bottom;
if((xPos.x>StdPosX)&amt;&amt;(xPos.x<nTempX))
{
if((xPos.y>StdPosY)&amt;&amt;(xPos.y<nTempY))
{
return TRUE;
}
}
return FALSE;
}