⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgtalk.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			break ;
		case H_CLICK:
			if ( m_TalkNameEdt.GetWindowTextLength () > 0 )
			{
				g_objHero.Talk(	strName, 
								Char, 
								StrEmotion, 
								0xffffff,
								_TXTATR_FRIEND);
			}
			else
			{
				g_objHero.Talk(	( CPlayer* )NULL, 
								Char, 
								NULL, 
								0xffffff,
								_TXTATR_FRIEND);
			}
			break ;
		}
		// Set the Talk target list
		CDlgTalk::SetTalkTargetList () ;

		for ( int i = 0; i < m_nListAmount; i++ )
		{
			char tempChar[1024];
			m_ListBox.GetText ( i, tempChar ) ;
			if ( strcmp ( tempChar, Char ) == 0 )
			{
				m_ListBox.DeleteString ( i ) ;
				m_ListBox.InsertString ( 0, Char ) ;
				m_nListIndex = 0 ;
				return ;
			}
		}
		m_ListBox.InsertString ( 0, Char ) ;
		m_nListAmount++ ;
		m_nListIndex = 0 ;
		if ( m_nListAmount > 20 )
		{
			m_nListAmount-- ;
			m_ListBox.DeleteString ( 20 ) ;
		}
	}
	else
		CDlgTalk::GetParent ()->PostMessage ( WM_MY_MESSAGE, ON_TALK_CLOSE ) ;

	// 关闭聊天信息输入状态
	PostMessage(WM_KEYUP, VK_ESCAPE);
}


void CDlgTalk::OnTalkImgMode() 
{
	if ( !m_MenuTalk.m_bShow )
	{		
		m_MenuTalk.EnableWindow() ;
	}
	else
	{
		m_MenuTalk.EnableWindow( false ) ;
	}
}

void CDlgTalk::SetTalkTarget(CPlayer *pTalkTarget)
{
	m_TalkPlayerID = pTalkTarget->GetID() ;
	if ( pTalkTarget->GetName() )
	{
		m_TalkNameEdt.SetWindowText ( pTalkTarget->GetName () ) ;
	}
}

void CDlgTalk::OnLButtonDown(UINT nFlags, CPoint point) 
{
	if ( m_PrgRect[0].PtInRect( point ) == TRUE)
	{
		CDlgTalk::GetParent()->PostMessage( WM_MY_MESSAGE, ON_MAIN_EXPDOWN ) ;
		m_bShowExp = !m_bShowExp;
	}
	else
		CDlgTalk::GetParent ()->PostMessage ( WM_MY_MESSAGE, ON_TALK_CLOSE ) ;

	CDialog::OnLButtonDown(nFlags, point);
}

void CDlgTalk::OnUpdateTalkEdtName() 
{
/*	char strName[16] ;
	m_TalkNameEdt.GetWindowText ( strName, 16 ) ;
	if ( strName[0] != NULL )
	{
		char strTemp[16] ;
		BOOL bOk = false ;
		int nCount = m_DlgListBox.m_ListBox.GetCount () ;
		if ( nCount > 0 )
		{
			for ( int i = 0; i < nCount; i++ )
			{
				m_DlgListBox.m_ListBox.GetText ( i, strTemp ) ;
				if ( strcmp ( strName, strTemp ) == 0 )
				{
					bOk = true ;
					m_TalkNameEdt.SetFontColor ( 0xff0000 ) ;
					m_uDelIndex = i ;
					m_uAddBtnMode = 2 ;
					break ;

				}
			}
			if ( !bOk )
			{
				if ( nCount < 18 )
				{
					m_TalkNameEdt.SetFontColor ( 0xffffff ) ;
					m_uAddBtnMode = 1 ;
				}
				else
				{
					m_TalkNameEdt.SetFontColor ( 0xffffff ) ;
					m_uAddBtnMode = 0 ;
				}
			}
		}
		else
		{
			m_TalkNameEdt.SetFontColor ( 0xffffff ) ;
			m_uAddBtnMode = 1 ;
		}
	}
	else
	{
		m_TalkNameEdt.SetFontColor ( 0xffffff ) ;
		m_uAddBtnMode = 0 ;
	}*/
}

void CDlgTalk::SetTalkMode( UINT uTalkMode )
{
	m_uTalkMode = uTalkMode ;
	switch ( m_uTalkMode ) 
	{
	case G_CLICK:
		m_TalkModeImg.ChangeImage( "Button50" ) ;
		break ;
	case S_CLICK:
		m_TalkModeImg.ChangeImage( "Button51" ) ;
		break ;
	case D_CLICK:
		m_TalkModeImg.ChangeImage( "Button52" ) ;
		break ;
	case B_CLICK:
		m_TalkModeImg.ChangeImage( "Button53" ) ;
		break ;
	case H_CLICK:
		m_TalkModeImg.ChangeImage( "Button54" ) ;
		break ;
	case W_CLICK:		//Wen Yiku Code 2005-6-29
		m_TalkModeImg.ChangeImage( "Button56" ) ;
//		g_obj91Sdk.Login();
//		m_RoomLg.EnableWindow(TRUE);
		break ;
		
	}
}

void CDlgTalk::DeleteTalkTarget()
{
	m_DlgListBox.m_ListBox.DeleteString ( m_uDelIndex ) ;
	m_nTargetAmount = m_DlgListBox.m_ListBox.GetCount();
	m_TalkNameEdt.SetWindowText ( NULL ) ;
	m_TalkNameEdt.SetFocus () ;	
	if (m_DlgListBox.m_bShow)
	{
		CRect rect ;
		m_DlgListBox.GetWindowRect ( rect ) ;
	
		int nHeight = m_DlgListBox.m_ListBox.GetCount() * (CMyBitmap::GetFontSize () + 4);
		m_DlgListBox.MoveWindow(170,_SCR_HEIGHT - 80 - nHeight,rect.Width(),nHeight,false);
		m_DlgListBox.EnableWindow(true);
	}
}

void CDlgTalk::SetTalkTargetList()
{
	// Must record the target name and talk mode
	char strName[16] ;
	m_TalkNameEdt.GetWindowText ( strName, 16 ) ;
	if ( strName && strlen(strName) > 0 )
	{
		// Test if already record
		for ( int i = 0; i < 10; i++ )
		{
			if ( m_uTargetTalkMode[i] == 0 || strlen(m_strTargetName[i])<=0)
				break ;
			else if (strcmp ( strName, m_strTargetName[i] ) == 0 )
				return ;
		}
		
		// The recordset is already full
		if ( i == 10 )
		{
			for ( int i = 0; i < 10; i++ )
			{
				m_uTargetTalkMode[i] = m_uTargetTalkMode[i + 1] ;
				strcpy ( m_strTargetName[i], m_strTargetName[i + 1] ) ;
			}
			m_uTargetTalkMode[i] = m_uTalkMode ;
			strcpy ( m_strTargetName[i], strName ) ;

			m_DlgListBox.m_ListBox.DeleteString(0);
			m_DlgListBox.m_ListBox.AddString(strName);
			
			m_nTargetAmount = 10 ;
		}
		// not full
		else
		{
			m_uTargetTalkMode[i] = m_uTalkMode ;
			strcpy ( m_strTargetName[i], strName ) ;
			m_nTargetAmount = i + 1 ;
			
			m_DlgListBox.m_ListBox.AddString(strName);
		}
	}
	if(m_DlgListBox.m_bShow)
	{
		CRect rect ;
		m_DlgListBox.GetWindowRect ( rect ) ;
		
		int nHeight = m_DlgListBox.m_ListBox.GetCount() * (CMyBitmap::GetFontSize () + 4);
		m_DlgListBox.MoveWindow(170,_SCR_HEIGHT - 80 - nHeight,rect.Width(),nHeight,false);
		m_DlgListBox.EnableWindow(true);		
	}
}

void CDlgTalk::CycleTalkTarget( int nDir )
{
	if ( nDir == SB_LEFT )
	{
		if ( m_nTargetAmount > 0 )
		{
			if ( m_nCurTargetIndex == 0 )
				m_nCurTargetIndex = m_nTargetAmount - 1;
			else
				m_nCurTargetIndex-- ;

			CDlgTalk::SetTalkMode ( m_uTargetTalkMode[m_nCurTargetIndex] ) ;
			if ( m_strTargetName[m_nCurTargetIndex][0] != NULL )
				m_TalkNameEdt.SetWindowText ( m_strTargetName[m_nCurTargetIndex] ) ;
			else
				m_TalkNameEdt.SetWindowText ( NULL ) ;
		}
	}
	else if ( nDir == SB_RIGHT )
	{
		if ( m_nTargetAmount > 0 )
		{
			if ( m_nCurTargetIndex == m_nTargetAmount - 1)
				m_nCurTargetIndex = 0 ;
			else
				m_nCurTargetIndex++ ;
			
			CDlgTalk::SetTalkMode ( m_uTargetTalkMode[m_nCurTargetIndex] ) ;
			if ( m_strTargetName[m_nCurTargetIndex][0] != NULL )
				m_TalkNameEdt.SetWindowText ( m_strTargetName[m_nCurTargetIndex] ) ;
			else
				m_TalkNameEdt.SetWindowText ( NULL ) ;
		}
	}
}

void CDlgTalk::CycleTalkChannel(int nDir)
{
	if ( nDir == SB_TOP )
	{
		UINT uMode = m_uTalkMode;
		if ( m_uTalkMode == G_CLICK )
			uMode = H_CLICK ;
		else
			uMode-- ;
		CDlgTalk::SetTalkMode ( uMode ) ;
	}
	else if ( nDir == SB_BOTTOM )
	{
		UINT uMode = m_uTalkMode;
		if ( m_uTalkMode == H_CLICK )
			uMode = G_CLICK ;
		else
			uMode++ ;
		CDlgTalk::SetTalkMode ( uMode ) ;
	}
}

void CDlgTalk::OnMouseMove(UINT nFlags, CPoint point) 
{
	CDialog::OnMouseMove(nFlags, point);
	if ( !m_bMouseMove )
	{
		for(int i=0;i<6;i++)
		{
			if ( m_PrgRect[i].PtInRect( point ))
			{
				CDlgTalk::GetParent()->PostMessage( WM_MY_MESSAGE, ON_MSGDLG_STATIC, 4 + i ) ;
				m_bMouseMove = true ;
				break;
			}
		}
	}
	else
	{
		for(int i=0;i<6;i++)
		{
			if ( m_PrgRect[i].PtInRect( point ) )
			{
				m_bMouseMove = false;
				break;
			}
		}
		if (i==6)
		{
			CDlgTalk::GetParent()->PostMessage( WM_MY_MESSAGE, ON_MSGDLG_HIDE ) ;
			m_bMouseMove = false ;			
		}
	}
}


void CDlgTalk::OnTalkChkPk() 
{
	// TODO: Add your control notification handler code here
	DXPlaySound ( "Sound/DlgTalk_Pk.wav" ) ;
	g_objHero.SetPkMode( m_TalkPkChk.GetCheckValue()) ;
}

void CDlgTalk::OnTalkChkRun() 
{
	// TODO: Add your control notification handler code here
	DXPlaySound("Sound/Dlg_Ok.wav");
}

void CDlgTalk::OnTalkBtnMipmap() 
{
	// TODO: Add your control notification handler code here
	CDlgTalk::GetParent()->PostMessage(WM_MY_MESSAGE, ON_MIPMAP_OPEN);
}

void CDlgTalk::OnTalkBtnHelp() 
{
	// TODO: Add your control notification handler code here
	CDlgTalk::GetParent()->PostMessage(WM_MY_MESSAGE,ON_INSHELP_SHOW);
	DXPlaySound("Sound/Dlg_Ok.wav");
}



void CDlgTalk::OnBtnHidegoods() 
{
	// TODO: Add your control notification handler code here
	DXPlaySound ( "Sound/Dlg_Flex.wav" ) ;	
	m_bShowGoods = !m_bShowGoods;
	m_GoodBox.EnableWindow(m_bShowGoods);
	SetTalkDlgRgn();
}

void CDlgTalk::SetTalkDlgRgn()
{
	/////////////////////////////////////////////////////
	if (!m_bShowGoods) 
	{
		CRect rect;
		CDlgTalk::GetWindowRect(rect);
		CPoint pnt[4] ;
		pnt[0].x = 0;
		pnt[0].y = 15;
	
		pnt[1].x = rect.right;
		pnt[1].y = 15;
	
		pnt[2].x = rect.right;
		pnt[2].y = rect.bottom;
	
		pnt[3].x = 0;
		pnt[3].y = rect.bottom;
		CRgn rgn ;
		rgn.CreatePolygonRgn ( pnt, 4, ALTERNATE ) ;
		CDlgTalk::SetWindowRgn ( rgn, true ) ;
	}
	else
	{
		CRect rect;
		CDlgTalk::GetWindowRect(rect);
		CPoint pnt[8] ;
		pnt[0].x = 0;
		pnt[0].y = 15;
		
		pnt[1].x = 190;
		pnt[1].y = 15;
		
		pnt[2].x = 190;
		pnt[2].y = 0;
		
		pnt[3].x = 620;
		pnt[3].y = 0;

		pnt[4].x = 620;
		pnt[4].y = 15;

		pnt[5].x = rect.right;
		pnt[5].y = 15;

		pnt[6].x = rect.right;
		pnt[6].y = rect.bottom;

		pnt[7].x = 0;
		pnt[7].y = rect.bottom;

		CRgn rgn ;
		rgn.CreatePolygonRgn ( pnt, 8, ALTERNATE ) ;
		CDlgTalk::SetWindowRgn ( rgn, true ) ;		
	}
}

void CDlgTalk::OnTalkClearbtn() 
{
	// TODO: Add your control notification handler code here
	DXPlaySound("Sound/Dlg_Ok.wav");
	g_objGameMsg.ClearMsg();
}

bool CDlgTalk::GetIsGameMsgEx()
{
	return m_bGameMsgEx;
}

void CDlgTalk::OnTalkMychat() 
{
	// TODO: Add your control notification handler code here
	DXPlaySound("Sound/Dlg_Ok.wav");
	m_bGameMsgEx = !m_bGameMsgEx;
	CDlgTalk::GetParent()->PostMessage(WM_MY_MESSAGE, ON_CLICK_CHATSET);
}

void CDlgTalk::OnTalkBtnViewequip() 
{
	// TODO: Add your control notification handler code here
	DXPlaySound("Sound/Server_Sgroup.wav");
	CDlgTalk::GetParent()->PostMessage(WM_MY_MESSAGE, ON_MAIN_NPCEQUIP ,1);
}

void CDlgTalk::OnTalkBtnTargetlist() 
{
	// TODO: Add your control notification handler code here
	DXPlaySound("Sound/up_Page.wav");
	if (m_DlgListAction.m_bShow)
	{
		m_DlgListAction.EnableWindow(false);
	}
	if (!m_DlgListBox.m_bShow)
	{
		CRect rect ;
		m_DlgListBox.GetWindowRect ( rect ) ;
		
		int nHeight = m_DlgListBox.m_ListBox.GetCount() * (CMyBitmap::GetFontSize () + 4);
		m_DlgListBox.MoveWindow(170,_SCR_HEIGHT - 80 - nHeight,rect.Width(),nHeight,false);
		m_DlgListBox.EnableWindow(true);
	}
	else
		m_DlgListBox.EnableWindow(false);
}

void CDlgTalk::OnTalkBtnEmotionlist() 
{
	// TODO: Add your control notification handler code here
	DXPlaySound("Sound/Dlg_Ok.wav");
//	if (m_DlgListBox.m_bShow)
//	{
//		m_DlgListBox.EnableWindow(false);
//	}
//	if ( !m_DlgListAction.m_bShow)
//	{
//		CRect rect;
//		m_DlgListAction.GetWindowRect(rect);
//
//		int nHeight = 10* (CMyBitmap::GetFontSize () + 4);
//		m_DlgListAction.MoveWindow(660,_SCR_HEIGHT - 80 - nHeight,rect.Width(),nHeight,false);
//		m_DlgListAction.EnableWindow(true);
//	}
//	else
//		m_DlgListAction.EnableWindow(false);
	CDlgTalk::GetParent()->PostMessage (WM_MY_MESSAGE,ON_DLGEMOTION_OPEN);
}

void CDlgTalk::SetActionList()
{
	int nAmount = g_obj3DRoleData.GetTextActionAmount();
	for(int i=0;i<nAmount;i++)
		m_DlgListAction.m_ListTxtAction.AddString(g_obj3DRoleData.GetTextActionTitle(i));
	m_StaTxtAction.SetWindowText(g_obj3DRoleData.GetTextActionTitle(m_nTextActionIndex));
}

void CDlgTalk::ChangePkMode()
{
	if (m_TalkPkChk.GetCheckValue() >= 0 && m_TalkPkChk.GetCheckValue() < 3)
	{
		m_TalkPkChk.SetCheckValue(m_TalkPkChk.GetCheckValue()+1);
	}
	else
		m_TalkPkChk.SetCheckValue(0);
	g_objHero.SetPkMode( m_TalkPkChk.GetCheckValue()) ;	
}

void CDlgTalk::InsertEmotion(int nEmotion)
{
	if (nEmotion >= 0 && nEmotion < g_objGameDataSet.GetEmotionAmount ()) 
	{
		char Char[256]="";
		char szEmotion[16]="";
		m_TalkDataCob.GetWindowText (Char, 256) ;
		if (nEmotion < 10) 
		{
			sprintf(szEmotion,"#0%d",nEmotion);
		}
		else
			sprintf(szEmotion,"#%d",nEmotion);
		strcat(Char,szEmotion);
		m_TalkDataCob.SetWindowText (Char);
		m_TalkDataCob.SetFocus();
		m_TalkDataCob.GetWindowText (Char, 256) ;
		m_TalkDataCob.SetSel((int)strlen(Char), (int)strlen(Char));
	}
}



BOOL CDlgTalk::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (WM_KEYUP == pMsg->message)
	{
		// 判断是否按下 ESC 键
		if (VK_ESCAPE == pMsg->wParam)
		{
			CDlgTalk::GetParentOwner()->SetFocus();
		}
		
		// 判断是否按下 ENTER 键
		else if (VK_RETURN == pMsg->wParam)
		{
			if (this->GetFocus()->GetSafeHwnd() == m_TalkDataCob.GetSafeHwnd())
			{
				if (m_bHotEnter)
				{
					CDlgTalk::OnTalkBtnSend ( ) ;
				}
				
				else
				{
					m_bHotEnter = true;
				}
			}
		}
	}
	
	return CDialog::PreTranslateMessage(pMsg);
}

void CDlgTalk::OnSetfocusTalkEdtData() 
{
	// TODO: Add your control notification handler code here
	m_bEnter = true;
}

void CDlgTalk::OnKillfocusTalkEdtData() 
{
	// TODO: Add your control notification handler code here
	if (GetFocus()->GetSafeHwnd() != m_TalkSendBtn.GetSafeHwnd())
	{
		m_bEnter = false;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -