Files
Leviathan/Client/Game/engine/Ui/Controls/CInput.h
T
2026-06-01 12:46:52 +02:00

130 lines
3.5 KiB
C++

// CInput.h - part if Multi-Language input class
//
// Copyright (C) 2000-2005, Kwon-il Lee
//
// Kwon-il Lee
// zupet@hitel.net
#if !defined(_C_INPUT_H_)
#define _C_INPUT_H_
#include <windows.h>
#include <imm.h>
#include <string>
#include <vector>
/*----------------------------------------------------------------------------*/
int GetCharsetFromLang(LANGID);
int GetCodePageFromLang( LANGID langid );
int ConvertString(UINT codePage, const wchar_t* wText, int wLen, char* text, int len);
/*----------------------------------------------------------------------------*/
class CInput
{
public:
CInput();
~CInput();
void InitInput();
/* messages */
void OnInputLanguageChange(HWND hWnd, WPARAM wParam, LPARAM lParam);
bool OnComposition(HWND hWnd, WPARAM wParam, LPARAM lParam);
bool OnEndComposition(HWND hWnd, WPARAM wParam, LPARAM lParam);
bool OnNotify(HWND hWnd, WPARAM wParam, LPARAM lParam);
bool OnChar(HWND hWnd, WPARAM wParam, LPARAM lParam);
void OnKeyDown(WPARAM wParam); /// 2012.02.16 - prodongi
int GetInput(char* text, int len);
int GetInput(wchar_t* text, int len);
int GetComp(char* text, int len);
int GetComp(wchar_t* text, int len);
void ClearInput() { m_input.clear();}
void ClearComp() { m_comp.clear();}
int GetReading(char* text, int len);
int GetReading(wchar_t* text, int len);
int GetCandidate(DWORD index, char* text, int len);
int GetCandidateCount();
int GetCandidateSelection();
int GetCandidatePageSize();
int GetCandidatePageStart();
void GetUnderLine(int* start, int* end);
void SetOnlyNum(bool bOn) { m_bOnlyNum = bOn; };
bool IsOnlyNum() { return m_bOnlyNum; };
bool IsCandidate() { return !m_candidate.empty() || !m_comp.empty(); }
/// 2012.02.16 - prodongi
bool isEndComposing() const { return m_isEndComposing; }
void SetCompositionWndPos( int nPosX, int nPosY )
{
m_nCompositionPosX = nPosX;
m_nCompositionPosY = nPosY;
}
/* property */
bool IsVerticalReading(){ return m_bVerticalReading; }
bool IsVerticalCandidate(){ return m_bVerticalCandidate; }
WORD GetCodePage() { return m_codePage; }
LANGID GetLangId() { return m_langId; }
int GetCharSet() { return GetCharsetFromLang(m_langId); }
wchar_t* GetIndicator() { return m_wszCurrIndicator; }
int GetImeState() { return m_ImeState; }
protected:
void SetupImeApi(HWND hWnd);
void GetImeId();
bool GetReadingWindowOrientation();
void GetPrivateReadingString(HWND hWnd);
void CheckToggleState(HWND hWnd);
protected:
std::wstring m_input;
std::wstring m_comp;
std::wstring m_reading;
std::vector<BYTE> m_candidate;
int m_ulStart;
int m_ulEnd;
int m_nCompositionPosX;
int m_nCompositionPosY;
RECT m_rectIME;
HKL m_hkl;
LANGID m_langId;
WORD m_codePage;
bool m_bUnicodeIME;
bool m_bVerticalReading;
bool m_bVerticalCandidate;
int m_ImeState;
wchar_t* m_wszCurrIndicator;
DWORD m_dwId[2];
HINSTANCE m_hDllIme;
UINT (WINAPI * _GetReadingString)( HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT );
BOOL (WINAPI * _ShowReadingWindow)( HIMC, BOOL );
bool m_bOnlyNum;
bool m_bSpaceLimit; // 2011. 11. 1 - marine
/// 2012.02.15 현재 조합이 끝났는지 아닌지, 일반 엔터와 조합이 시작될 때는 false로 설정된다. - prodongi
bool m_isEndComposing;
public:
void SetSpaceLimit(bool bFlag) { m_bSpaceLimit = bFlag; }
bool IsSpaceLimit() { return m_bSpaceLimit; };
};
/*----------------------------------------------------------------------------*/
#endif //_C_INPUT_H_