www.pudn.com > mir3.rar > ChatEditBox.cpp


/****************************************************************************************************************** 
                                                                                                                    
	¸ðµâ¸í:																											 
																													 
	ÀÛ¼ºÀÚ:																											 
	ÀÛ¼ºÀÏ:																											 
																													 
	[ÀÏÀÚ][¼öÁ¤ÀÚ] : ¼öÁ¤ ³»¿ë																						 
                                                                                                                    
*******************************************************************************************************************/ 
 
 
 
#include "StdAfx.h" 
 
 
static CChatEdit*	g_xChatEdit = NULL; 
 
 
/****************************************************************************************************************** 
 
	CChatEdit Functions 
 
*******************************************************************************************************************/ 
 
 
/****************************************************************************************************************** 
 
	ÇÔ¼ö¸í : CChatEdit::CChatEdit() 
 
	ÀÛ¼ºÀÚ :  
	ÀÛ¼ºÀÏ :  
 
	¸ñÀû   :  
	Ãâ·Â   :  
 
	[ÀÏÀÚ][¼öÁ¤ÀÚ] : ¼öÁ¤³»¿ë 
 
*******************************************************************************************************************/ 
CChatEdit::CChatEdit() 
{ 
	m_hChatEdit = NULL; 
	g_xChatEdit	= this; 
	m_hFontChatEdit = NULL; 
	m_dwFontColor = RGB(255, 0, 255); 
	ZeroMemory(m_szInputMsg, MAX_PATH); 
} 
 
 
 
/****************************************************************************************************************** 
 
	ÇÔ¼ö¸í : CChatEdit::~CChatEdit() 
 
	ÀÛ¼ºÀÚ :  
	ÀÛ¼ºÀÏ :  
 
	¸ñÀû   :  
	Ãâ·Â   :  
 
	[ÀÏÀÚ][¼öÁ¤ÀÚ] : ¼öÁ¤³»¿ë 
 
*******************************************************************************************************************/ 
CChatEdit::~CChatEdit() 
{ 
	DestroyDialog(); 
} 
 
 
 
/****************************************************************************************************************** 
 
	ÇÔ¼ö¸í : CChatEdit::DestroyDialog() 
 
	ÀÛ¼ºÀÚ :  
	ÀÛ¼ºÀÏ :  
 
	¸ñÀû   :  
	Ãâ·Â   : BOOL  
 
	[ÀÏÀÚ][¼öÁ¤ÀÚ] : ¼öÁ¤³»¿ë 
 
*******************************************************************************************************************/ 
BOOL CChatEdit::DestroyDialog() 
{ 
	if ( m_hFontChatEdit != NULL ) 
	{ 
		DeleteObject(m_hFontChatEdit); 
		m_hFontChatEdit = NULL;  
	} 
 
	DestroyWindow(m_hChatEdit); 
	return TRUE; 
} 
 
 
 
/****************************************************************************************************************** 
 
	ÇÔ¼ö¸í : ChatEditDlgProc() 
 
	ÀÛ¼ºÀÚ :  
	ÀÛ¼ºÀÏ :  
 
	¸ñÀû   :  
	ÀÔ·Â   : HWND hWnd 
	         UINT uMsg 
	         WPARAM wParam 
	         LPARAM lParam 
	Ãâ·Â   : INT_PTR CALLBACK  
 
	[ÀÏÀÚ][¼öÁ¤ÀÚ] : ¼öÁ¤³»¿ë 
 
*******************************************************************************************************************/ 
INT_PTR CALLBACK ChatEditDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    return g_xChatEdit->ChatEditProc(hWnd, uMsg, wParam, lParam); 
} 
 
 
 
/****************************************************************************************************************** 
 
	ÇÔ¼ö¸í : CChatEdit::ChatEditProc() 
 
	ÀÛ¼ºÀÚ :  
	ÀÛ¼ºÀÏ :  
 
	¸ñÀû   :  
	ÀÔ·Â   : HWND hWnd 
	         UINT nMsg 
	         WPARAM wParam 
	         LPARAM lParam 
	Ãâ·Â   : LRESULT CALLBACK  
 
	[ÀÏÀÚ][¼öÁ¤ÀÚ] : ¼öÁ¤³»¿ë 
 
*******************************************************************************************************************/ 
LRESULT CALLBACK CChatEdit::ChatEditProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) 
{ 
	PAINTSTRUCT ps; 
	switch (nMsg) 
	{ 
		case WM_KEYDOWN: 
		{ 
			switch ( (INT)wParam ) 
			{ 
			case VK_F1: 
			case VK_F2: 
			case VK_F3: 
			case VK_F4: 
			case VK_F5: 
			case VK_F6: 
			case VK_F7: 
			case VK_F8: 
			case VK_ESCAPE: 
				{ 
					HWND m_hMainWindow = g_xMainWnd.GetSafehWnd(); 
					SetFocus(m_hMainWindow); 
					SendMessage(m_hMainWindow, WM_KEYDOWN, (INT)wParam, lParam); 
					return 0L; 
				} 
			} 
			break; 
		} 
		case WM_CHAR: 
		{ 
			switch ( (INT)wParam ) 
			{ 
			case VK_RETURN: 
				{ 
					GetWindowText(hWnd, m_szInputMsg, MAX_PATH); 
					SetWindowText(hWnd, ""); 
					HWND m_hMainWindow = g_xMainWnd.GetSafehWnd(); 
					SetFocus(m_hMainWindow); 
					ShowWindow(m_hChatEdit, SW_HIDE); 
 
					if ( m_szInputMsg ) 
					{ 
						if ( m_szInputMsg[0] == '@' ) 
							SendMessage(m_hMainWindow, _WM_USER_MSG_INPUTTED, TRUE, NULL); 
						else 
						{ 
							SendMessage(m_hMainWindow, _WM_USER_MSG_INPUTTED, NULL, NULL); 
						} 
					} 
 
					return 0L; 
				} 
			case VK_TAB: 
				{ 
					HWND m_hMainWindow = g_xMainWnd.GetSafehWnd(); 
					SetFocus(m_hMainWindow); 
					SendMessage(m_hMainWindow, WM_KEYDOWN, (INT)wParam, lParam); 
					return 0L; 
				} 
			} 
			break; 
		} 
		case WM_PAINT: 
		{ 
 
			BeginPaint(m_hChatEdit, &ps); 
			InvalidateRect(hWnd, NULL, FALSE); 
			EndPaint(m_hChatEdit, &ps); 
			break; 
		} 
		default: 
			break; 
	} 
	return CallWindowProc(m_WndProcChatEdit, hWnd, nMsg, wParam, lParam); 
} 
 
 
 
/****************************************************************************************************************** 
 
	ÇÔ¼ö¸í : CChatEdit::Create() 
 
	ÀÛ¼ºÀÚ :  
	ÀÛ¼ºÀÏ :  
 
	¸ñÀû   :  
	ÀÔ·Â   : HINSTANCE hInstance 
	         HWND hWndParent 
	         INT nX 
	         INT nY 
	         INT nXsize 
	         INT nYSize 
	Ãâ·Â   : BOOL  
 
	[ÀÏÀÚ][¼öÁ¤ÀÚ] : ¼öÁ¤³»¿ë 
 
*******************************************************************************************************************/ 
BOOL CChatEdit::Create(HINSTANCE hInstance, HWND hWndParent, INT nX, INT nY, INT nXsize, INT nYSize) 
{ 
	m_hChatEdit = CreateWindowEx(WS_EX_CLIENTEDGE, _T("EDIT"), "", WS_POPUP | WS_VISIBLE | ES_LEFT | ES_AUTOHSCROLL, 
								 nX, nY, nXsize, nYSize, 
								 hWndParent, NULL, hInstance, NULL);	   
	m_WndProcChatEdit = (WNDPROC)SetWindowLong(m_hChatEdit, GWL_WNDPROC, (LONG)ChatEditDlgProc); 
 
	// ÀÌ¹Ì ÆùÆ®°¡ »ý¼ºµÇ¾î ÀÖÀ¸¸é »õ·Î ¸¸µé¼ö ÀÖµµ·Ï Clear 
	if ( m_hFontChatEdit != NULL ) 
	{ 
		DeleteObject(m_hFontChatEdit);  
		m_hFontChatEdit = NULL;  
	} 
 
	m_hFontChatEdit = CreateFont(12, 0, 0, 0, FW_NORMAL, 0, 0, 0, HANGUL_CHARSET,  
								 OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,  
								 DEFAULT_QUALITY, DEFAULT_PITCH, "±¼¸²Ã¼"); 
 
	SendMessage(m_hChatEdit, WM_SETFONT, (WPARAM)m_hFontChatEdit, MAKELPARAM(TRUE, 0)); 
	// ÀԷ¿¡µðÆ®À©µµ¿ìÀÇ ÃÖ´ëÀԷ¹®ÀÚ °¹¼ö Á¤ÀÇ. 
	SendMessage(m_hChatEdit, EM_LIMITTEXT, (WPARAM)95, 0); 
	ShowWindow(m_hChatEdit, SW_HIDE); 
    UpdateWindow(m_hChatEdit); 
	return TRUE; 
} 
 
 
 
BOOL CChatEdit::SetLimitText(INT nLimitText) 
{ 
	if ( m_hChatEdit ) 
	{ 
		SendMessage(m_hChatEdit, EM_LIMITTEXT, (WPARAM)nLimitText, 0); 
		return TRUE; 
	} 
	return FALSE; 
}