📄 dlgtalk2.cpp
字号:
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 ;
}
}
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/Dlg_Ok.wav");
CDlgTalk::GetParent()->PostMessage(WM_MY_MESSAGE, ON_MAIN_NPCEQUIP ,1);
}
void CDlgTalk::OnTalkBtnTargetlist()
{
// TODO: Add your control notification handler code here
DXPlaySound("Sound/Dlg_Ok.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 + -