#pragma once class KUIControlSimpleButton; class KUIControlStatic; class KUIControlVScroll; class KUIControlCombo : public KUIControl { public: KUIControlCombo(); virtual void Render( KViewportObject *pViewport, bool isFront = false ); virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ); virtual DWORD OnMouseMessage(DWORD dwMessage,int x, int y); virtual void OnChangeCaptionNotify(); bool AddItem(LPCSTR itemName); bool InsertItem(int index, LPCSTR lpszItem); bool RemoveItem(int index); int FindItemIndex(LPCSTR itemName); void ClearItem(); /// Combo Item의 정렬 void SetItemAlign(DWORD align); /// Comobo Item의 최고 넒이 void SetItemWidth(DWORD itemWidth); /// 스크롤 없이 한번에 보여지는 Item의 갯수 void SetMaxViewItem(DWORD maxViewItemCount); int GetCount(); /// 현재 선택된 Item을 알려줌 (선택된게 없으면 - 1을 리턴) int GetCurSel(); bool SetCurSel(int index); protected: virtual void _initControl(); private: void _InitComboPhrase(); void _SetFold(bool bFold); /// Add,Insert,Remove,Clear 등을 했을때 불림. void _UpdateComboItem(); int _GetUnfoldBackHeight(); /// Combo box가 펼쳐졌을때 마우스 위치에 따라서 처리해줌. void _SetPreSelectItem(int x, int y); void _SetPreSelectItem(int nIndex); /// 스크롤 컨트롤을 보여줘야 하나? bool _IsScrollEnable(); void _SetScrollMaxRange(); /// 한번에 보여지는 Item들의 수직 높이 DWORD _GetMaxViewLineHeight(); private: DWORD m_itemWidth; DWORD m_maxViewItemCount; int m_selectItem; int m_preSelectItem; bool m_bFold; bool m_bUpdate; std::string m_sNotSelectedItem; ///< 아무것도 선택되지 않았을때 보여줘야 하는 글씨 (uii 에서 caption을 통해서 셋팅) KUIControlSimpleButton* m_pDownButton; KUIControlStatic* m_pUnfoldBack; KUIControlStatic* m_pUnfoldSelectBack; KTextPhrase m_ComboPhrase; std::vector m_vtComboItems; };