www.pudn.com > mir3.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; inLinePos >= CurrentTopLine) && (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; inLinePos >= CurrentTopLine) && (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; inLinePos >= CurrentTopLine) && (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)&&(xPos.xStdPosY)&&(xPos.y