목차

-
FAQ

- Basic API
- HCRoot
- HCSimpleInputCounterExt
-
HCRootBrowser
- HCSimpleBrowser
- HCInput
-
HCMouse
- HCRootGroup


FAQ

1. 컨트롤이 속한 부모 그룹을 어떻게 구하나요?

다음 API 로 구할수 있습니다. 부모그룹의 포인터를 따로 보관하지 않고 리얼타임으로 구하게 되고 탐색을 하므로 시간은 약간 소요됩니다.
HCRootGroup* HControl_GetParentGroup(HCRoot* pC);
   //컨트롤이 속한 부모 그룹을 구합니다.

2. Input으로 입력받은후에 Input에 다시 입력되는걸 방지하고 싶습니다.

HCRoot::SetEventEnable(bool ) 로 이벤트 금지를 시키면 됩니다.

3. Input의 글자 출력 위치를 조절하고 싶습니다.

HCRoot::GetPtrFontType() 으로 XCFontTypem_iX,m_iSY의 위치를 조절하면 됩니다.

4. HControl_SmartLoad()로 mnb파일을 로드한 후에 로드된 자원은 언제 해제가 되나요?  

HControl_GetGroupMGR()->DelGroup(HCGroup) 으로 특정 그룹을 지우시면 됩니다.
HControl_GetGroupMGR()->Destroy() 모든 그룹을 지웁니다.

5. ::OnEventPush  이벤트가 마우스 왼쪽버튼 오른쪽 버튼에 상관없이 HC_EVENT_PUSH 이벤트로 들어 옵니다. 이벤트가 구분되어 들어오게 하려면 어떻게 해야 되나요??

tut_GUI_Puzzle_2008 에 참고 코드가 있습니다.

6. HCImageBox 의 텍스춰 좌표 를 제어하고 싶습니다.

tut_GUI2 에 참고 코드가 있습니다.

7. GUI 컨트롤의 경우 Create 를 하고 파괴는 어떻게 하나요?

HCRoot::Destroy() 를 반드시 불러주고 해야 합니다. 그렇게 하지 않으면 메모리 릭이 계속 발생됩니다.
GUI의  모든 컨트롤들은 반드시 Create 를 했으면 Destroy도 해줘야 합니다.
X엔진의 특성상 소멸자에서 자동으로 파괴 하지 않습니다.
Destroy를 하면 자식을 비롯한 모든 정보가 사라집니다.

8. HCButtonExt의 경우 버튼 이미지를 바꾸기 위해 여러번 Create(iSX, iSY, "1.bmp", "2.bmp", "3.bmp") 하여도 문제가 안생기나요?

Create 함수 내부에서 리소스만 Destroy 하고 다시 Create 하기 때문에 Destroy를 안하고 해도 문제 없습니다.
이미지 계열 컨트롤 클래스는 전부 가능합니다. ( HCImage 도 포함 )

만약에
Destroy를 부르면 버튼의 3가지 자식 Image 클래스들이 파괴가 되어서 AddChild로 새로이 자식들을 생성 하지 않고선 Create로는 어렵습니다.
 

9. Input의 캐럿 색깔을 어떻게 바꾸나요?

HCRootInput::m_RGBA_Caret = X_RGBA_RED; //캐럿색깔지정.

tut_IME 에 참고 코드가 있습니다.


- Basic API

HCRootGroup*  HControl_GetTOPGroup();                 최고 상위에 있는 그룹 윈도우를 구합니다.
void          HControl_SetTOPGroup(HCRootGroup* PG);  최고 상위 윈도우 그룹을 지정합니다.

HCRootGroup*  HControl_GetSelectedGroup();           
현재 선택된 그룹을 구합니다.
void          HControl_SetSelectedGroup(HCRootGroup* pG); 현재 선택 그룹을 지정하고 최고 상위로 올립니다

int           HControl_GetNumGroup();
                그룹 윈도우의 갯수를 구합니다.
HCRootGroup*  HControl_GetGroup(int iINDEX);          해당 인덱스의 그룹을 구합니다.
HCRootGroup*  HControl_AddGroup(HCRootGroup* pG);     그룹을 등록합니다.
bool          HControl_DelGroup(HCRootGroup* pG);     그룹을 삭제 합니다.
HCRootGroup*  HControl_GetGroupBelowMouse();          마우스 밑에 있는 그룹을 구합니다.
void          HControl_AddMsgHandler(HControl_MsgHander pCB);
메세지 핸들러를 지정합니다.

void          HControl_AddAfterWork(eCONTROL_AFTERWORK eID,HCRoot* pC);//For icon work!
void          HControl_ClearAfterWork();

eCONTROL_CLASSTYPE  HControl_GetControlClassType(PCSTR sNAME);
HCRoot*       HControl_DoSmartLoadTXT(X_FILE pFILE,float fVER,bool bBIN = false ,HControl_Generate_cb pCB = NULL);

bool          HControl_SmartSave(PCSTR sFileName,bool bBIN = false);
eCONTRLLOAD_RET HControl_SmartLoad(PCSTR sFileName,bool bBIN = false,float fVER = -1.,HControl_Generate_cb pCB = NULL);

LRESULT       HControl_WndProc(UINT message,WPARAM wParam,LPARAM lParam);

void          HControl_SetEnableFocusForce(HCRoot* pC);

void          HControl_Run();        XGUI 엔진 폴링

void          HControl_SetEnableShow(bool bFLAG);

void          HControl_CameraInit();
bool          HControl_Show(bool bSetCamera = true);    
XGUI 엔진 출력
void          HControl_CameraEnd();

void          HControl_Reset();

void          HControl_Init( bool bUseWindowMSG  = true,bool bPollMode = true );
void          HControl_Destroy();
void          HControl_WorkingControlReset();

void          HControl_Clear();

bool          HControl_DelControlNoDelete(const HCRoot* pC);
void          HControl_ReAlign(int iOldW,int iOldH,int iNewW,int iNewH);

HCRoot*       HControl_AddControl(HCRoot* pC);
bool          HControl_MoveControl(HCRoot* pC,int iDX,int iDY);

void          HControl_MouseInit(bool bAutoFocus = false,DWORD dwFONT = SR_FONT_GULIM9 ,int iBALSIZE = 12 );
bAutoFocus 는 마우스가 옮겨갈때 자동으로 밑에 있는 윈도우로 포커스가 갈것인가.
iBALSIZE
는 발룬 폰트 사이즈 지정

PCSTR         HControl_GetFuncName();
void          HControl_SetFuncName(PCSTR sFuncName);
PCSTR         HControl_GetStringControlType(eCONTROL_TYPE eTYPE);

void          HControl_UpdateVisual();
HCRoot*       HControl_GenerateControl(eCONTROL_CLASSTYPE eTYPE);

void          HControl_SetAutoFocus(bool bFLAG);    마우스가 옮겨갈때 자동으로 밑에 있는 윈도우로 포커스가 갈것인가 여부 지정.
void          HControl_SetEnableClipping(bool bCLIP);
void          HControl_SaveCode(FILE* pFILE,PCSTR sPATH);
void          HControl_DrawString(X_MATERIAL hMAT,PCSTR sSTR,XCFontType& FT);

void          HControl_SetFocus(
HCRoot* pC);     pC를 포커스 컨트롤로 지정합니다.
HCRoot*       HControl_GetFocus(
HCRoot* pC);     현재 포커스가 있는 컨트롤을 구합니다.

HCRootGroup*  HControl_GetParentGroup(HCRoot* pC);    컨트롤이 속한 부모 그룹을 구합니다.

HCRoot*       HControl_GetControl(H_ExaminControl_cb pCB,bool bChkVisible,TARRAYPTR(HCRoot*)* pLIST,DWORD dwUserData1,DWORD dwUserData2);
PCSTR         HControl_GetEventString(
eEVENTSTATE eEVENT);
HCRoot*       HControl_GetControlWithID(DWORD dwClassType,DWORD dwAddress,DWORD dwTime);
void          HControl_ConvertSIMPLE();
PCSTR         HControl_GetImageBoxType(eBOXMODE TYPE);
eBOXMODE      HControl_GetImageBoxType(PCSTR sTYPE);
eALIGNTYPE    HControl_GetAlignType(PCSTR sTYPE);
PCSTR         HControl_GetAlignType(eALIGNTYPE eTYPE);
void          HControl_RestoreDevice();
void          HControl_LostDevice();


- HCRoot

class HCRoot

void         SetEnableFloating(bool bFLAG)     컨트롤이 드래그 되는지 여부 지정
void         SetEventEnable(bool bActive)      이벤트 활성화 여부 지정

virtual
void SetFontType(const
XCFontType& FT);    폰트를 지정합니다.
bool
    GetActive() const;     현재 활성화된 컨트롤인가?
virtual void Show();
    화면 출력 함수
bool    IsBelowMouse();   
마우스 밑에 컨트롤이 위치해 있는가.
bool    IsBelow(int iX,int iY);   
해당 위치밑에 컨트롤이 위치해 있는가.

bool    IsCollide(const XCRECT&
RC) const;RC와 충돌 하는가.
bool    IsInner(const XCRECT& RC) const;  RC안에 들어가 있는가.
virtual bool DoIdle();    폴링함수 ( ex HCInput 캐럿 동작 )
virtual bool SetFocus();  FOCUS 여부를 위임합니다. 포커스가 할당돼었을 경우 true가 되돌려집니다.

virtual bool OnEventPush(bool bForce = false);
마우스 버튼 누를때,bForce는 포커스가 없을때도 강제로 적용!
virtual bool OnEventDoublePush(); 마우스 더블 클릭시
virtual bool OnEventRelease(bool bForce = false);  마우스 버튼 떼어질때
virtual bool OnEventDrag();  마우스 드래그 할때
virtual bool OnEventDragR(); 마우스 오른쪽 버튼 드래그
virtual bool OnEventDragM(); 마우스 중간 버튼 드래그
virtual bool OnEventWheel(); 마우스 휠 동작시
virtual bool OnEventEnter(); 마우스가 포커스 영역으로 들어올때
virtual bool OnEventLeave(); 마우스가 포커스 영역을 떠날때

virtual bool OnEvent(eEVENTSTATE eEVENT,bool bForceEventEnable = false );
각종 이벤트 분기 처리 함수

virtual void Move(int iDX,int iDY); iDX,iDY 편차만큼 컨트롤을 이동 시킵니다.
virtual void MoveUpdate(int iSX,int iSY);iSX,iSY 위치로 컨트롤을 이동 시킵니다.


- HCSimpleInputCounterEx

수치제어에 관련된 집합 컨트롤.

스크롤바 기본
인풋란에 좌우 드래그 조절 가능.
슬라이드바 드래그 조절 가능.
배율 적용.


- HCItem

브라우저에 포함된 한줄 아이템 클래스

void     Init();     초기화.
void     Destroy();  파괴.

int      GetKeyValue() 
키값을 구한다.
void     SetKeyValue(int m_iKeyValue);키값을 지정

void     PutString(PCSTR sSTR);    
  문자열을 지정.
void     PutFastString(PCSTR sSTR);   256길이의 고정 문자열에 문자열 지정. 메모리는 낭비되지만 속도가 빠름.

void     AppendString(PCSTR sSTR);   
문자열을 덧붙입니다.
PCSTR    GetString()                  문자열을 구합니다. 

void     PutComment(PCSTR sSTR);     
주석 지정
PCSTR    GetComment();                주석 얻기.
 

- HCRootBrowser

class HCRootBrowser : public HCRoot

bool     SetSelect(int iINDEX,int iTYPE = 0 );
해당 라인을 선택 처리 합니다.
iTYPE = 0 , 한개씩 선택
iTYPE = HK_LSHIFT , 범위 멀티 선택 처리
iTYPE = HK_LCONTROL , 개개별 멀티 선택 처리

int     GetNumSelected()                선택된 아이템 갯수를 구합니다.
int     GetSelected(int iINDEX) const;  해당 선택된 아이템 갯수의 실제 아이템 인덱스를 구합니다.

virtual void SelectClear();          브라우저 선택을 전부 클리어 합니다.

int     GetMaxRow(); 
               브라우저가 출력할수 있는 ITEM 갯수를 구합니다.
int     GetYDeg(); 
                 빈간격을 포함한 한줄의 높이를 구합니다.

virtual int GetStartPos() const     
브라우저의 시작 인덱스를 구합니다.
int     GetEndPos();                 브라우저의 끝 인덱스를 구합니다.

int     GetMaxLimitItem() const      최대 보유할수 있는 ITEM 갯수를 구합니다.

virtual int GetNumItem() const       현재 보유하고 있는 ITEM 갯수를 구합니다.


virtual void SetItemHeight(int iItemHeight); 아이템 높이를 지정합니다.
virtual void SetItemWidth(int iItemWidth);   아이템 폭을 지정합니다.

int     GetItemHeight() const                아이템의 높이를 구합니다.
int     GetItemWidth() const                 아이템의 폭을 구합니다.

int     GetItemInterval() const              아이템 사이의 공간 높이를 구합니다.
void    SetItemInterval(int iInterval)       아이템 사이의 공간 높이를 지정합니다.

virtual HCItem* InsItem(HCItem** ppPrev,PCSTR sSTR);
ppPrev 아이템 이후에 아이템을 추가합니다.

virtual HCItem* AddItem(PCSTR pSTR,XCOLOR_TYPE eCOLOR = X_COLOR_END);    
해당 문자열 아이템을 추가합니다. eCOLOR ( 폰트 칼라 지정 )
문자열에 특수 기호를 넣어서 칼라를 변경 할수도 있습니다.
ex) g_pBRW->AddItem((PCSTR)L"@C[6]おはよう@C[8]ござい@C[10]ます");//@C 를 적고 다음 칼라 숫자를 바로 기입

char sITEM[256];
sprintf(sITEM,L"@C[%d]おはよう@C[%d]ござい@C[%d]ます",X_RED,X_GREEN,X_BLUE);//칼라를 enum 형으로 빌드해서 대입
g_pBRW->AddItem((PCSTR)sITEM);


virtual void AddMultiLineItem(PCSTR);    문자열을 폭에 맞제 자른후에 생긴 아이템들을 추가합니다.

int     FindItem(HCItem* pITEM) const;               ITEM의 인덱스를 구합니다.
int     FindItemKeyValue(DWORD dwKeyValue) const;    KEY값으로 ITEM의 인덱스를 찾아냅니다.
int     FindItemStr(PCSTR pSTR) const;               ITEM의 문자열 값으로 ITEM의 인덱스를 찾아냅니다.

HCItem* GetITEM(int iINDEX) const;  
해당 인덱스의 아이템을 구합니다.

virtual void Clear();     브라우저를 전부 클리어 합니다.

void    DeleteItem(HCItem* pITEM);    
해당 아이템을 지웁니다.
void    DeleteLastItem();              제일 마지막 아이템을 지웁니다.
virtual void DeleteItem(int iINDEX);   해당 인덱스 아이템을 지웁니다.

int     GetIndexITEM(int iYPOS);  
해당 좌표의 아이템 인덱스를 구합니다.

bool    DoSelectBar(int iTYPE);
현재 마우스 위치 라인의 아이템을 선택 처리 합니다.
iTYPE = 0 , 한개씩 선택
iTYPE = HK_LSHIFT , 범위 멀티 선택 처리
iTYPE = HK_LCONTROL , 개개별 멀티 선택 처리

virtual void BottomLine();    
포커스를 제일 마지막 라인으로 옯깁니다.
virtual void TopLine();        포커스를 제일 첮번재 라인으로 옮깁니다.

void    SetShowBar(bool bFLAG) 브라우저 선택 바를 보여줄것인가 여부
bool    GetShowBar() const     브라우저 선택바가 보이는지 여부

bool    IsSelected(int iINDEX);해당 인덱스가 선택되었는지 여부를 구합니다.
bool    MoveITEM(int iOLD,int iNEW); iOLD 인덱스 ITEM을 iNEW인덱스 다음으로 삽입합니다.


- HCSimpleBrowser


CTRL+A 전체 선택
SHIFT  범위 지정 선택
CTRL  개별 선택

class HCSimpleBrowser : public HCRootBrowser


enum eINPUT_TYPE{
INPUT_TEXT = 0,
INPUT_PASSWORD ,
INPUT_VALUE ,
INPUT_EDIT ,
INPUT_ALPHABET

};

- HCInput

class HCInput : public HCRootInput

void     Init(int iSX,int iSY,int iEX,int iEY,eINPUT_TYPE eTYPE = INPUT_TEXT , bool bShowKeyState = false );
초기화 함수. 크기 지정, 인풋타입 지정.


enum eEVENTSTATE{
HC_EVENT_NONE = 0,
HC_EVENT_PUSH ,     마우스 버튼 눌러졌을때
HC_EVENT_PUSH_M ,   마우스 미들 버튼 눌러졌을때
HC_EVENT_PUSH_R ,   마우스 오른쪽 버튼 눌러졌을때
HC_EVENT_RELEASE ,  마우스 버튼 떼어졌을때
HC_EVENT_CAPTURE ,  마우스가 컨트롤 영역에 들어왔을때
HC_EVENT_DRAG ,     마우스 드래그 할때
HC_EVENT_DRAG_M ,   마우스 미들 버튼 드래그 할때
HC_EVENT_DRAG_R ,   마우스 오른쪽 버튼 드래그 할때
HC_EVENT_DOUBLECLICK , 마우스 더블 클릭할때
HC_EVENT_DOUBLECLICK_R , 마우스 오른쪽 버튼 더블 클릭할때

HC_EVENT_MOVE ,  마우스 움직일때
HC_EVENT_WHEEL , 마우스 휠 동작시

HC_EVENT_KEYUP ,   키보드가 떼어졌을때
HC_EVENT_KEYDOWN , 키보드가 눌러졌을때

HC_EVENT_LEAVE , 마우스가 컨트롤 영역을 벗어 났을때
};
 

- HCMouse

int     GetXPos()         X좌표를 되돌립니다.
int     GetYPos()         Y좌표를 되돌립니다.

int     GetDragCount()    드래그 진행중인 카운트를 구합니다.

int     GetDiffX()       
전의 X좌표와의 차이를 구합니다.
int     GetDiffY()        전의 Y좌표와의 차이를 구합니다.

void    Enable()    
     마우스 표시를 합니다.
void    Disable()         마우스 표시를 하지 않습니다.
eEVENTSTATE GetEventState()   
마우스의 이벤트를 구합니다.

int     GetBeforeDragX()
  드래그 하기전의 X 좌표를 구합니다.
int     GetBeforeDragY()  드래그 하기전의 Y 좌표를 구합니다.
 


enum eALIGNTYPE{ 윈도우 해상도 변화시 움직임을 설정합니다.
ALIGN_BOTH_FREE = 0, 가로세로 무관하게 자기 자리를 지킵니다.
ALIGN_TOP_LEFT ,      왼쪽 상단을 따라갑니다.
ALIGN_TOP_RIGHT ,     오른쪽 상단을 따라갑니다.
ALIGN_BOTTOM_LEFT ,   왼쪽 하단을 따라갑니다.
ALIGN_BOTTOM_RIGHT ,  오늘쪽 하단을 따라갑니다.
ALIGN_TOP_MIDDLE ,    가로는 중간을 유지하고 세로는 상단을 따라갑니다.
ALIGN_BOTTOM_MIDDLE , 가로는 중간을 유지하고 세로는 하단을 따라갑니다.
ALIGN_BOTH_MIDDLE ,   가로세로 중간을 항상 유지합니다.
};

enum ePANELSTYLE_TYPE그룹 판넬 타입 지정
HC_PANEL_NORMAL= 0,     벌집모양 타이틀바
HC_PANEL_SIMPLEBK,      단순 판넬
HC_PANEL_TRANSBK,       투명 판넬
HC_PANEL_SIMPLETITLE,   간단한 타이틀바
HC_PANEL_FILLBK,        불투명한 판넬
HC_PANEL_END,
};
 

- HCRootGroup

void             SetStyle(ePANELSTYLE_TYPE eTYPE); 그룹판넬 스타일을 지정합니다.
ePANELSTYLE_TYPE GetStyle()

void             SetAlignType(eALIGNTYPE eTYPE) 그룹 정렬 타입을 지정합니다.
eALIGNTYPE       GetAlignType()