#pragma once #include //#include #include "KObject.h" #include "K3DTypes.h" namespace { enum KMSGBOXTIMER { KMB_DEFAULT_TIMER = 15000, }; enum KMSGBOXTYPE { KMB_OK = MB_OK, KMB_OKCANCEL = MB_OKCANCEL, KMB_YESNO = MB_YESNO, KMB_YESNOCANCEL = MB_YESNOCANCEL, KMB_ABORTRETRYIGNORE = MB_ABORTRETRYIGNORE, KMB_RETRYCANCEL = MB_RETRYCANCEL, KMB_NO, }; enum KMSGBOXMSG { KMB_OK_MSG = 0, KMB_CANCEL_MSG = 1, KMB_YES_MSG = 2, KMB_NO_MSG = 3, KMB_ABORT_MSG = 4, KMB_RETRY_MSG = 5, KMB_IGNORE_MSG = 6, KMB_MAX_MSG_NUMBER, }; } struct MSGBOX_BTN_INFO_ITEM { MSGBOX_BTN_INFO_ITEM(bool _bUseSprCaption, LPCSTR _lpszID, LPCSTR _lpszCaption, DWORD _dwWidth ) : bUseSprCaption( _bUseSprCaption), sID(_lpszID),sCaption(_lpszCaption), dwWidth( _dwWidth ) { } std::string sID; bool bUseSprCaption; std::string sCaption; DWORD dwWidth; }; class KMsgBoxBtnInfo { public: void SetDefaultItemIndex( int nIndex) { m_nDefaultItemIndex = nIndex; } int GetDefaultItemIndex() const { return m_nDefaultItemIndex; } void AddBtn(bool bUseSprCaption, LPCSTR lpszID, LPCSTR lpszCaption, DWORD dwWidth = 0) { AddBtn( MSGBOX_BTN_INFO_ITEM( bUseSprCaption, lpszID, lpszCaption, dwWidth ) ); } void AddBtn(const MSGBOX_BTN_INFO_ITEM& info) { m_vtBtnItem.push_back( info ); } DWORD GetBtnItemSize() const { return static_cast( m_vtBtnItem.size() ); } const MSGBOX_BTN_INFO_ITEM& GetBtnItemByIndex(int nIndex) const { return m_vtBtnItem.at( nIndex ); } protected: std::vector m_vtBtnItem; int m_nDefaultItemIndex; }; class KUIMsgControl; class KViewportObject; class KUIWnd; class KUIIMEObject; struct KUIWND_CREATE_ARG; class KUIDragAndDropObject; class KUIDragAndDropRenderer; #ifdef _KUI_INVALIDATION class KSpritePrimitive; namespace { struct SmartInvalidator; } #endif class KUIWndManager : public KObject { public: KUIWndManager(); virtual ~KUIWndManager(); void Clear(); void AddWnd( KUIWnd *pWnd, bool bSetFocus = true,bool bBack = false ); /// 2012.06.22 AddWnd함수는 엔터채팅일 경우에 제대로 front가 되지 않아서 AddWnd를 참고로 해서 새로 만듬 - prodongi void addWndForceBack(KUIWnd* wnd); void RemoveWnd( KUIWnd *pWnd ); /// Dynamic Wnd 때문에 필요 void MouseFocusWndRemoveCheck( KUIWnd *pWnd ); void AddModalWnd(KUIWnd* pWnd); void RemoveModalWnd(KUIWnd* pWnd); void onChangeSortValue( KUIWnd* pWnd, int nOldValue ); void SetFocus( KUIWnd *pWnd ); KUIWnd* GetFocusWnd(); void SetCapture( KUIWnd *pWnd ) { m_pCaptureWnd = pWnd; } void ReleaseCapture( KUIWnd *pWnd ) { if ( m_pCaptureWnd == pWnd ) m_pCaptureWnd = NULL; } KUIMsgControl* MessageBox( LPCSTR lpszID, LPCSTR lpszTitle, LPCSTR lpszMessage, const KMsgBoxBtnInfo& info, KObject* pCallback = NULL, DWORD dwTimer = KMB_DEFAULT_TIMER, bool bModal = true, LPCSTR lpszReqValue=NULL, int nX=0, int nY=0 ); void FocusWindowOff(); bool IsExistMessageBox(LPCSTR lpszboxID) ; bool IsOpenModalWnd(); KUIWnd* GetModalWnd(LPCSTR lpszboxID); KUIWnd* GetModalessWnd(LPCSTR lpszboxID); bool CloseMessageBox(KUIWnd* pWnd); bool CloseMessageBox(LPCSTR lpszboxID); bool CloseAllMessageBox(); bool CloseRebirthMessageBox(); bool CloseRebirth_PVP_MessageBox(); void SetRenderFlag( bool bFlag ) { m_bRenderFlag = bFlag; } KUIWnd *CreateControl(KUIWND_CREATE_ARG& CREATE_ARG); // find wnd KUIWnd *FindWnd( const char *szWndID); KUIWnd *FindWnd( const char *szWndID, const char *szControlID ); KUIWnd *FindWndWithChild( const char *szWndID); // Setting Drag Object void SetDragObject( KUIDragAndDropObject *pDragObject, const KPoint& ptOffset); KUIDragAndDropObject* GetDragObject() { return m_pDragObject; } void SetDragIconRenderer(KUIDragAndDropRenderer* pDragRenderer ) { m_pDragIconRenderer = pDragRenderer; } KUIDragAndDropRenderer* GetDragIconRenderer() { return m_pDragIconRenderer; } // virtual void *Perform( KID _id, KArg& msg ); void Render( KViewportObject *viewport,bool isFront = false ); void Process( DWORD time ); // 2010.06.11 백그라운드 이미지 이후에 그려져야될 윈도우들 출력 - prodongi void renderPostWnd(KViewportObject *viewport,bool isFront = false ); // 2010.06.11 현재 모달/모달리스 다이알로그가 있는지/없는지 - prodongi bool isExistPostWnd() const; void KillFocus(); static void SetResolution(const KSize& size) { m_sizeResolution = size; } static const KSize& GetResolution() { return m_sizeResolution; } KUIIMEObject *GetIME() { return m_pImeObject; } // MJ 2004/12/01 // alpha void DestroyWnd( KUIWnd* pWnd ); KUIWnd* GetMouseFocusWnd() { return m_pMouseFocusWnd; }; KUIWnd* GetMouseClickWnd() { return m_pMouseClickWnd; }; void SetMouseClickWnd(KUIWnd* pWnd); //servantes 2010.12.06 수입력기를 ESC를 눌렀을 때, 맨위의 포커스 창이 닫히도록 수정 /// 201.09.30 srcId가 destId보다 위에 출력되는지 - prodongi bool isTop(char const* srcId, char const* destId) const; // { [sonador] #ifdef _KUI_INVALIDATION void SetViewportObject( KViewportObject* viewport ); KViewportObject* GetViewportObject() { return m_pUIViewport; } //K3DRenderTarget* GetRenderTarget(); //void InitRenderTarget(); void InvalidateAllWnd(); void ValidateAllWnd(); //void InvalidateWnd( KUIWnd* pWnd ); //bool IsLockedToInvalidate() const { return m_bLockedToInvalidate; } #endif // } private: void _ProcMouseMessage( KUIWnd *pWnd, DWORD & dwMessage, KUIWnd * & pMouseWnd, bool & bFindFocusPanel, bool & bGetMouseMessage, DWORD &dwRet, int x, int y ); DWORD _SendMessage(DWORD dwMessage, DWORD dwWParam, DWORD dwlParam); DWORD _SendMouseMessage(DWORD dwMessageType, int x, int y); DWORD _SendKeyMessage(DWORD dwMessageType, DWORD dwKeyCode); DWORD _SendKeyModalMessage(DWORD dwMessage, DWORD dwKeyCode); KUIWnd* _procWndList( std::list< KUIWnd* >& Origin_List, DWORD dwMessage, int x, int y, bool bFindFocusPanel, bool bGetMouseMessage, DWORD& dwRet ); // static functions public: static void SetHandle( HWND hWnd, HINSTANCE hInst ) { m_sHWnd = hWnd; m_sInstance = hInst; } static HWND GetHWnd() { return m_sHWnd; } static HINSTANCE GetInstance() { return m_sInstance; } static void SetEnterChatMode( bool bValue ) { s_bIsEnterChatMode = bValue; } static bool IsEnterChatMode() { return s_bIsEnterChatMode; } private: static KSize m_sizeResolution; static HWND m_sHWnd; static HINSTANCE m_sInstance; static bool s_bIsEnterChatMode; private: DWORD m_dwTime; std::list< KUIWnd* > m_listDeletedWnd; std::list< KUIWnd* > m_listSortedWnd; ///< KUIWnd::GetSortValue() 가 0이 아닌 녀석들에 대한 정보. (소트해서 따로 그리기 위함) std::list< KUIWnd* > m_listWnd; std::list< KUIWnd* > m_listModal; std::list< KUIWnd* > m_listModaless; /// 2011.06.14 mantis 13132 - prodongi std::list< KUIWnd*> m_listWebWnd; bool m_bInputDisable; KUIWnd* m_pCaptureWnd; // 포커스 윈도우 KUIWnd* m_pMouseFocusWnd; KUIWnd* m_pMouseClickWnd; ///< 클릭한 윈도우를 항상 가장 위로 랜더링하기 위해 추가한 맴버 // Drag And Drop KUIDragAndDropObject* m_pDragObject; KUIDragAndDropRenderer* m_pDragIconRenderer; KPoint m_ptDragRendererOffset; bool m_bRenderFlag; KUIIMEObject* m_pImeObject; // { [sonador] #ifdef _KUI_INVALIDATION KViewportObject* m_pUIViewport; //KSpritePrimitive* m_pUISpritePrimitive; //K3DRenderTargetSPtr m_spRenderTarget; //SmartInvalidator* m_pSmartInvalidator; //bool m_bValidation; //bool m_bLockedToInvalidate; #endif // } };