#ifndef _COMMON_STATUSWINDOW_HPP_ #define _COMMON_STATUSWINDOW_HPP_ #ifndef _COMMON_CONTROL_HPP_ #include #endif #ifndef _COMMON_COMMCTRL_HPP_ #include #endif #ifndef _COMMON_GLOBALDATA_HPP_ #include #endif class StatusControl : public Control { public: enum DrawType{DrawNormal=0,DrawNoBorders=SBT_NOBORDERS,DrawOwnerDraw=SBT_OWNERDRAW,DrawPopout=SBT_POPOUT,DrawRTLReading=SBT_RTLREADING}; enum {FirstPart=0,SimplePart=255}; StatusControl(void); virtual ~StatusControl(); HWND createControl(const String &windowName,HWND hParentWnd,UINT controlID); HWND createControl(const String &windowName,DWORD dwStyle,const Rect &initRect,HWND hParentWnd,int controlID); BOOL getBorders(int &horzBorder,int &vertBorder,int &rectBorder)const; UINT getParts(GlobalData &rightCoords)const; BOOL setParts(GlobalData &partsWidths)const; BOOL getRect(Rect &partRect,UINT partIndex=0)const; BOOL getText(String &controlText,UINT partIndex=0)const; UINT getTextLength(UINT partIndex)const; void setMinHeight(WORD minHeight)const; BOOL setText(const String &strText,UINT partIndex=FirstPart,DrawType drawType=DrawNormal)const; BOOL simple(BOOL simple)const; UINT numParts(void)const; private: enum{MaxParts=255}; StatusControl(const StatusControl &statusControl); StatusControl &operator=(const StatusControl &statusControl); }; inline StatusControl::StatusControl(void) { InitCommonControls(); } inline StatusControl::~StatusControl() { } inline StatusControl::StatusControl(const StatusControl &statusControl) { // private implementation *this=statusControl; } inline StatusControl &StatusControl::operator=(const StatusControl &statusControl) { // private implementation return *this; } inline HWND StatusControl::createControl(const String &windowName,DWORD dwStyle,const Rect &initRect,HWND hParentWnd,int controlID) { if(isValid())return FALSE; return Control::createControl(STATUSCLASSNAME,windowName,dwStyle,initRect,hParentWnd,controlID); } inline HWND StatusControl::createControl(const String &windowName,HWND hParentWnd,UINT controlID) { if(isValid())return FALSE; return Control::createControl(STATUSCLASSNAME,windowName,WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT),hParentWnd,controlID); } inline UINT StatusControl::numParts(void)const { if(!isValid())return FALSE; return sendMessage(SB_GETPARTS,0,0); } inline BOOL StatusControl::getBorders(int &horzBorder,int &vertBorder,int &rectBorder)const { int statBorders[3]; if(!isValid()||!sendMessage(SB_GETBORDERS,0,(LPARAM)(LPINT)statBorders))return FALSE; horzBorder=statBorders[0]; vertBorder=statBorders[1]; rectBorder=statBorders[2]; return TRUE; } inline UINT StatusControl::getParts(GlobalData &rightCoords)const { if(!isValid())return FALSE; rightCoords.size(numParts()); if(!rightCoords.size())return FALSE; return sendMessage(SB_GETPARTS,rightCoords.size(),(LPARAM)(int*)&rightCoords[0]); } inline BOOL StatusControl::setParts(GlobalData &partsWidths)const { if(!isValid()||!partsWidths.size()||partsWidths.size()>MaxParts)return FALSE; return sendMessage(SB_SETPARTS,(WPARAM)partsWidths.size(),(LPARAM)(int*)&partsWidths[0]); } inline BOOL StatusControl::getRect(Rect &partRect,UINT partIndex)const { if(!isValid())return FALSE; return sendMessage(SB_GETRECT,(WPARAM)partIndex,(LPARAM)(RECT*)partRect); } inline BOOL StatusControl::getText(String &controlText,UINT partIndex)const { if(!isValid())return FALSE; controlText.reserve(getTextLength(partIndex)+1); sendMessage(SB_GETTEXT,(WPARAM)partIndex,(LPARAM)(char*)controlText); return controlText.isNull(); } inline UINT StatusControl::getTextLength(UINT partIndex)const { if(!isValid())return FALSE; return LOWORD(sendMessage(SB_GETTEXTLENGTH,(WPARAM)partIndex,0L)); } inline void StatusControl::setMinHeight(WORD minHeight)const { if(!isValid())return; sendMessage(SB_SETMINHEIGHT,(WPARAM)minHeight,0L); } inline BOOL StatusControl::setText(const String &strText,UINT partIndex,DrawType drawType)const { if(!isValid()||strText.isNull())return FALSE; return sendMessage(SB_SETTEXT,(WPARAM)(partIndex|(UINT)drawType),(LPARAM)(char*)(String&)strText); } inline BOOL StatusControl::simple(BOOL simple)const { if(!isValid())return FALSE; return sendMessage(SB_SIMPLE,(WPARAM)simple,0L); } #endif