📄 ceditbox.cpp
字号:
// cEditBox.cpp: implementation of the cEditBox class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "cEditBox.h"
#include "cWindowManager.h"
#include "cFont.h"
#include "../input/cIMEWnd.h"
#include "../cIMEex.h"
#include "../Input/Mouse.h"
#include "./Input/Keyboard.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
cEditBox::cEditBox()
{
m_nonactiveTextColor=0xffffff;
m_activeTextColor=0xffffff;
m_bInitEdit=FALSE;
// m_bCaret=TRUE;
m_bSecret=FALSE;
m_bTextChanged=0;
m_dwCaretCurTick=m_dwCaretLastTick=0;
m_type = WT_EDITBOX;
m_bReadOnly = FALSE;
// m_pIMEBox = new cIMEBox;
//KES IME TEST
m_pIMEex = new cIMEex;
m_pIMEex->SetParentEdit( this );
m_bCaret = FALSE;
m_pEditText = NULL;
m_bShowCaretInReadOnly = FALSE;
m_nAlign = TXT_LEFT;
m_lTextLeftOffset = 5;
m_lTextRightOffset = 5;
m_lTextTopOffset = 6;
m_cbEditFunc = NULL;
}
cEditBox::~cEditBox()
{
// if(m_pIMEBox)
// {
// m_pIMEBox->Release();
// delete m_pIMEBox;
// m_pIMEBox = NULL;
// }
//KES IME TEST
//focus甫 绝沮阑 windowmanager俊霸 舅赴促.
CIMEWND->SetDockingEx(m_pIMEex, FALSE);
WINDOWMGR->SetFocusedEdit( this, FALSE );
if(m_pIMEex)
{
m_pIMEex->Release();
delete m_pIMEex;
m_pIMEex = NULL;
}
if( m_pEditText )
{
delete[] m_pEditText;
m_pEditText = NULL;
}
}
void cEditBox::SetTextOffset( LONG Left, LONG Right, LONG Top )
{
m_lTextLeftOffset = Left;
m_lTextRightOffset = Right;
m_lTextTopOffset = Top;
}
void cEditBox::Init(LONG x, LONG y, WORD wid, WORD hei, cImage* basicImage, cImage* focusImage, LONG ID)
{
cWindow::Init(x,y,wid,hei,basicImage,ID);
if( focusImage )
{
if( focusImage->IsNull() )
{
if( basicImage )
m_FocusImage = *basicImage;
}
else
{
m_FocusImage = *focusImage;
}
}
else
{
if( basicImage )
m_FocusImage = *basicImage;
}
SetFocusEdit(FALSE);
}
void cEditBox::InitEditbox(WORD editBoxPixel, WORD BufBytes)
{
m_bInitEdit = TRUE;
// m_pIMEBox->Init(BufBytes+1, editBoxPixel, 0, FALSE);
//KES IME TEST
// m_pIMEex->Init( BufBytes + 1, m_width, 1 );
// m_pIMEex->Init( 1000, editBoxPixel, 3 );
m_pIMEex->Init( BufBytes, editBoxPixel, FALSE );
// m_pIMEex->SetScriptText( "abc^ndef^n012345678901234567890^n^n^n" );
m_pEditText = new char[BufBytes + 1];
ZeroMemory( m_pEditText, BufBytes+1 );
}
DWORD cEditBox::ActionEvent(CMouse * mouseInfo)
{
DWORD we = WE_NULL;
if( !m_bActive ) return we;
we = cWindow::ActionEvent(mouseInfo);
if( m_bDisable ) return we;
if( mouseInfo->LButtonDown() )
{
if( PtInWindow(mouseInfo->GetMouseEventX(), mouseInfo->GetMouseEventY()) && ( we & WE_LBTNCLICK ) )
{
SetFocusEdit(TRUE);
if(cbWindowFunc)
(*cbWindowFunc)(m_ID, m_pParent, WE_SETFOCUSON);
we |= WE_SETFOCUSON;
}
else
{
SetFocusEdit(FALSE);
}
}
if(m_bTextChanged)
{
if(cbWindowFunc)
(*cbWindowFunc)(m_ID, m_pParent, WE_CHANGETEXT);//pjslocal 捞霸 岿鳖?
we |= WE_CHANGETEXT;
}
return we;
}
DWORD cEditBox::ActionKeyboardEvent(CKeyboard * keyInfo)
{
/* //RETURN虐 贸府绰 cimewnd俊辑 茄促.
DWORD we = WE_NULL;
if( !m_bActive || m_bDestroy ) return we;
if( m_bFocus )
{
if( keyInfo->GetKeyDown(KEY_RETURN) || keyInfo->GetKeyDown(KEY_PADENTER) )
{
if(cbWindowFunc)
(*cbWindowFunc)(m_ID, m_pParent, WE_RETURN);
we |= WE_RETURN;
}
}
return we;
*/
return WE_NULL;
}
void cEditBox::SetActive(BOOL val)
{
if( m_bDisable ) return;
cWindow::SetActive( val );
if( !val )
SetFocusEdit( FALSE );
}
void cEditBox::SetFocus( BOOL val )
{
cWindow::SetFocus( val );
}
void cEditBox::SetFocusEdit(BOOL val)
{
if( val && !m_bActive ) return;//竣萍宏啊 酒囱 惑怕俊辑绰 器目胶甫 啊瘤搁 救等促.
SetFocus(val);
if(val)
{
if( !m_bReadOnly )
CIMEWND->SetDockingEx(m_pIMEex, TRUE);
else if( !m_bShowCaretInReadOnly )
return;
m_bCaret = TRUE;
m_dwCaretLastTick = m_dwCaretCurTick = GetTickCount();
WINDOWMGR->SetFocusedEdit( this, TRUE );
m_pCurImage = &m_FocusImage;
IMEEvent( eIMEE_SETFOCUS );
}
else
{
m_bCaret = FALSE;
CIMEWND->SetDockingEx(m_pIMEex, FALSE);
WINDOWMGR->SetFocusedEdit( this, FALSE );
m_pCurImage = &m_BasicImage;
IMEEvent( eIMEE_KILLFOCUS );
}
}
void cEditBox::Render()
{
// if( !m_bActive || !m_bInitEdit ) return;
cWindow::Render();
char strBuf[256];
int nStrLen;
RECT rcText;
LONG TxtPosX, TxtPosY;
TxtPosY = (LONG)m_absPos.y + m_lTextTopOffset;
if(m_bFocus && ( !m_bReadOnly || m_bShowCaretInReadOnly) )
{
for( int i = 0 ; i < m_pIMEex->GetTotalLine() ; ++i )
{
m_pIMEex->GetLineText( i, strBuf, &nStrLen );
if( m_bSecret )
{
memset( strBuf, '*', nStrLen );
}
if( m_nAlign & TXT_LEFT )
{
TxtPosX = (LONG)m_absPos.x + m_lTextLeftOffset;
}
else if( m_nAlign & TXT_RIGHT )
{
TxtPosX = (LONG)m_absPos.x + m_width
- CFONT_OBJ->GetTextExtentEx( m_wFontIdx, strBuf, nStrLen ) - m_lTextRightOffset;
}
else //TXT_CENTER
{
TxtPosX = (LONG)m_absPos.x + ( m_width
- CFONT_OBJ->GetTextExtentEx( m_wFontIdx, strBuf, nStrLen ) ) / 2;
}
SetRect( &rcText, TxtPosX,
TxtPosY + LINE_HEIGHT * i, 1, 1 );
CFONT_OBJ->RenderFont( m_wFontIdx, strBuf, nStrLen, &rcText,
RGBA_MERGE( m_activeTextColor, m_alpha * m_dwOptionAlpha / 100 ) );
if( m_bCaret )
{
//某返嘛扁
if( i == m_pIMEex->GetInsertPos()->nLine )
{
//m_pIMEex->GetLineText( m_pIMEex->GetInsertPos()->nLine, strBuf );
//眠啊 : 某返困摹甫... 茄锅父 拌魂窍档废.
LONG lExtent = CFONT_OBJ->GetTextExtentEx( m_wFontIdx, strBuf, m_pIMEex->GetInsertPos()->nIndex );
SetRect( &rcText, TxtPosX + lExtent - 2,
TxtPosY + m_pIMEex->GetInsertPos()->nLine * LINE_HEIGHT, 1, 1 );
CFONT_OBJ->RenderFont( m_wFontIdx, "|", 1, &rcText,
RGBA_MERGE( 0x00ffffff, m_alpha * m_dwOptionAlpha / 100 ) );
}
}
}
m_dwCaretCurTick = GetTickCount();
if( m_dwCaretCurTick - m_dwCaretLastTick >= 500 )
{
m_bCaret = !m_bCaret;
while( m_dwCaretCurTick - m_dwCaretLastTick >= 500 )
m_dwCaretLastTick += 500;
}
}
else
{
for( int i = 0 ; i < m_pIMEex->GetTotalLine() ; ++i )
{
m_pIMEex->GetLineText( i, strBuf, &nStrLen );
if( m_bSecret )
{
memset( strBuf, '*', nStrLen );
}
if( m_nAlign & TXT_LEFT )
{
TxtPosX = (LONG)m_absPos.x + m_lTextLeftOffset;
}
else if( m_nAlign & TXT_RIGHT )
{
TxtPosX = (LONG)m_absPos.x + m_width
- CFONT_OBJ->GetTextExtentEx( m_wFontIdx, strBuf, nStrLen ) - m_lTextLeftOffset;
}
else //TXT_CENTER
{
TxtPosX = (LONG)m_absPos.x + ( m_width
- CFONT_OBJ->GetTextExtentEx( m_wFontIdx, strBuf, nStrLen ) ) / 2;
}
SetRect( &rcText, TxtPosX,
TxtPosY + LINE_HEIGHT * i, 1, 1 );
CFONT_OBJ->RenderFont( m_wFontIdx, strBuf, nStrLen, &rcText,
RGBA_MERGE( m_nonactiveTextColor, m_alpha * m_dwOptionAlpha / 100 ) );
}
}
}
void cEditBox::SetAbsXY(LONG x, LONG y)
{
cWindow::SetAbsXY(x,y);
}
char* cEditBox::GetEditText()
{
if(m_pIMEex)
m_pIMEex->GetLineText( 0, m_pEditText );
else
m_pEditText[0] = 0;
return m_pEditText;
}
void cEditBox::SetEditText(char * text)
{
if(m_bInitEdit)
{
m_pIMEex->SetScriptText( text );
}
}
void cEditBox::SetValidCheck( int nSetNum )
{
//KES INTERFACE 031013
m_pIMEex->SetValidCheckMethod( nSetNum );
}
void cEditBox::SetAlign( int nAlign )
{
m_nAlign = nAlign;
}
void cEditBox::SetDisable( BOOL val )
{
m_bDisable = val;
if( val )
SetFocusEdit( FALSE );
}
void cEditBox::IMEEvent( DWORD dwEvent )
{
if( m_cbEditFunc )
m_cbEditFunc( m_ID, this, dwEvent );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -