📄 dlgtask.cpp
字号:
// DlgTask.cpp : implementation file
//
#include "stdafx.h"
#include "MyShell.h"
#include "DlgTask.h"
#include "GameMsg.h"
#include "Hero.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgTask dialog
CDlgTask::CDlgTask(CWnd* pParent /*=NULL*/)
: CDialog(CDlgTask::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgTask)
m_bShow = false ;
m_bMouseMove = false ;
m_Pnt = CPoint ( 0, 0 ) ;
m_nCloseIndex = 0 ;
m_nTextAmount = 0 ;
m_nLinkAmount = 0 ;
m_nEditAmount = 0 ;
m_nDlgHeight = 150 ;
m_nAnswerIndex = 0 ;
m_nEditIndex = 0 ;
m_DlgRect = CRect ( 0, 0, 512, 64 ) ;
//}}AFX_DATA_INIT
}
void CDlgTask::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgTask)
DDX_Control(pDX, IDC_TASK_EDT_ANSWER, m_TaskEdtAnswer);
DDX_Control(pDX, IDC_TASK_BTN_ANSWER, m_TaskBtnAnswer);
DDX_Control(pDX, IDC_BTN_CLOSE, m_CloseBtn);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgTask, CDialog)
//{{AFX_MSG_MAP(CDlgTask)
ON_WM_CTLCOLOR()
ON_WM_MOVE()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_BN_CLICKED(IDC_TASK_BTN_ANSWER, OnTaskBtnAnswer)
ON_BN_CLICKED(IDC_BTN_CLOSE, OnBtnClose)
ON_WM_LBUTTONUP()
ON_WM_RBUTTONDOWN()
ON_WM_RBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgTask message handlers
LRESULT CDlgTask::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch ( message )
{
case WM_ENABLE:
if ( wParam )
{
InitTaskDialog () ;
DXPlaySound("Sound/Open.wav");
}
else
{
DXPlaySound("Sound/window_close.wav");
ResetTaskDialog() ;
}
m_bShow = wParam ;
break ;
case WM_COMMAND:
if ( wParam == 2 )
{
return true ;
}
else if ( wParam == 1 )
{
return true ;
}
break ;
}
return CDialog::WindowProc(message, wParam, lParam);
}
HBRUSH CDlgTask::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
pDC->SetBkMode ( TRANSPARENT ) ;
return g_StockBrush;
}
BOOL CDlgTask::OnInitDialog()
{
CDialog::OnInitDialog();
CRect rect ;
CDlgTask::GetWindowRect ( rect ) ;
// Init the edit
m_TaskEdtAnswer.Init ( rect.left, rect.top ) ;
// Init the button
m_TaskBtnAnswer.Init ( rect.left, rect.top, "Button0") ;
m_CloseBtn.Init ( rect.left, rect.top, "Button540" ) ;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgTask::OnMove(int x, int y)
{
CDialog::OnMove(x, y);
m_Pnt.x = x ;
m_Pnt.y = y ;
}
void CDlgTask::InitTaskDialog()
{
m_nPicIndex = -1 ;
m_TaskEdtAnswer.EnableWindow ( false ) ;
m_TaskBtnAnswer.EnableWindow ( false ) ;
int nAmount = g_objHero.GetTaskDialogLineAmount () ;
if ( nAmount > 0 )
{
// Get the format
m_nAnswerAmount = 0 ;
for ( int j = 0; j < nAmount; j++ )
{
TaskDialogLine* pLine = g_objHero.GetTaskDialogLineByIndex ( j ) ;
if ( pLine->nType == _TASKDIALOG_LINK || pLine->nType == _TASKDIALOG_EDIT )
m_nAnswerAmount++ ;
}
for ( int i = 0; i < nAmount; i++ )
{
TaskDialogLine* pLine = g_objHero.GetTaskDialogLineByIndex ( i ) ;
switch ( pLine->nType )
{
case _TASKDIALOG_TEXT:
if ( pLine->szStr )
{
strcpy ( m_TaskText[m_nTextAmount].strText, pLine->szStr ) ;
this->SetLineIndex ( 0 ) ;
m_nTextAmount++ ;
}
break ;
case _TASKDIALOG_LINK:
if ( pLine->szStr )
{
m_nAnswerIndex++ ;
strcpy ( m_TaskLink[m_nLinkAmount].strText, pLine->szStr ) ;
this->SetLineIndex ( 1 ) ;
m_TaskLink[m_nLinkAmount].nIndex = pLine->nIndex ;
m_nLinkAmount++ ;
}
break ;
case _TASKDIALOG_EDIT:
{
m_nAnswerIndex++ ;
m_nEditIndex = m_nAnswerIndex ;
m_TaskEdtAnswer.EnableWindow ( true ) ;
m_TaskBtnAnswer.EnableWindow ( true ) ;
strcpy ( m_TaskEdit.strTitle, pLine->szStr ) ;
m_TaskEdit.nIndex = pLine->nIndex ;
m_TaskEdit.dwData = pLine->dwData ;
this->SetLineIndex ( 2 ) ;
m_nEditAmount++ ;
}
break ;
case _TASKDIALOG_PIC:
m_nPicIndex = pLine->dwData ;
m_PicPos.x = pLine->posLine.x;
m_PicPos.y = pLine->posLine.y;
break ;
case _TASKDIALOG_DEFAULT:
m_nCloseIndex = pLine->nIndex ;
break ;
}
}
}
}
void CDlgTask::ResetTaskDialog()
{
m_nCloseIndex = 0 ;
m_nTextAmount = 0 ;
m_nLinkAmount = 0 ;
m_nEditAmount = 0 ;
m_nDlgHeight = 150 ;
m_nAnswerIndex = 0 ;
m_nEditIndex = 0 ;
for(int i =0 ; i< 8; i++)
{
strcpy(m_TaskText[i].strText , "");
strcpy(m_TaskLink[i].strText , "");
}
strcpy(m_TaskEdit.strTitle , "");
m_TaskEdtAnswer.SetWindowText ( NULL ) ;
}
void CDlgTask::SetLineIndex(BYTE btType)
{
switch ( btType )
{
case 0:
{
int nSingle = 0;
int nLineNum = 0 ;
int nLineIndex = 1 ;
m_TaskText[m_nTextAmount].nLineIndex [0] = 0 ;
for ( int i = 0; i < strlen ( m_TaskText[m_nTextAmount].strText ); i++ )
{
if ( CMyBitmap::IsDBCSLeadByte( m_TaskText[m_nTextAmount].strText, i ) )
{
nLineNum += 2;
i++;
}
else
{
nLineNum++;
nSingle++;
}
if ( nLineNum >= TEXT_LIMIT )
{
//----------Begin the english version's process(jump line)----------//
if ( strcmp( g_objGameDataSet.GetVersionInfo(), "English" ) == 0 )
{
// Search the last word
for ( int j = i; j >= 0; j-- )
{
if ( m_TaskText[m_nTextAmount].strText[j] == ' ' )
{
i -= i - j;
break;
}
}
}
//----------End the english version's process(jump line)----------//
if ( nSingle % 2 == 0 )
{
nSingle = 0 ;
nLineNum = 0 ;
m_TaskText[m_nTextAmount].nLineIndex [nLineIndex] = i + 1 ;
nLineIndex++ ;
}
else
{
i -= nLineNum - TEXT_LIMIT;
m_TaskText[m_nTextAmount].nLineIndex [nLineIndex] = i + 1 - ( nLineNum - TEXT_LIMIT );
nSingle= 0 ;
nLineNum = 0 ;
nLineIndex++ ;
}
}
}
m_TaskText[m_nTextAmount].nLineNum = nLineIndex ;
if ( nSingle % 2 == 0 )
{
m_TaskText[m_nTextAmount].nLineIndex [nLineIndex] = i + 1 ;
}
else
{
m_TaskText[m_nTextAmount].nLineIndex [nLineIndex] = i ;
}
}
break ;
case 1:
{
int nSingle = 0;
int nLineNum = 0 ;
int nLineIndex = 1 ;
m_TaskLink[m_nLinkAmount].nLineIndex [0] = 0 ;
int nLastHeight = m_nDlgHeight ;
for ( int i = 0; i < strlen ( m_TaskLink[m_nLinkAmount].strText ); i++ )
{
if ( CMyBitmap::IsDBCSLeadByte( m_TaskLink[m_nLinkAmount].strText, i ) )
{
nLineNum += 2;
i++;
}
else
{
nLineNum++;
nSingle++;
}
if ( nLineNum >= LINK_LIMIT )
{
//----------Begin the english version's process(jump line)----------//
if ( strcmp( g_objGameDataSet.GetVersionInfo(), "English" ) == 0 )
{
// Search the last word
for ( int j = i; j >= 0; j-- )
{
if ( m_TaskLink[m_nLinkAmount].strText[j] == ' ' )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -