#ifndef WINEXT_HPP_ #define WINEXT_HPP_ #ifndef STRICT #define STRICT #endif #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x500 #endif #include #ifdef WINVER # if WINVER < 0x0400 # error WINVER too min! # endif #else # error where WINVER ? #endif /////////////////////////////////////////////////////////////////////////////// inline static int getWindowLeft( HWND hwnd ) { if (!hwnd) return 0; RECT rc; ::GetWindowRect( hwnd, &rc ); return rc.left; } inline static int getWindowTop( HWND hwnd ) { if (!hwnd) return 0; RECT rc; ::GetWindowRect( hwnd, &rc ); return rc.top; } //! window width inline static int getWindowWidth( HWND hwnd ) { if (!hwnd) return 0; RECT rc; ::GetWindowRect( hwnd, &rc ); return rc.right - rc.left; } //! window width inline static int getWindowHeight( HWND hwnd ) { if (!hwnd) return 0; RECT rc; ::GetWindowRect( hwnd, &rc ); return rc.bottom - rc.top; } /////////////////////////////////////////////////////////////////////////////// //! width of client area inline static int getClientWidth( HWND hwnd ) { RECT rc; ::GetClientRect( hwnd, &rc ); return rc.right - rc.left; } //! height of client area inline static int getClientHeight( HWND hwnd ) { RECT rc; ::GetClientRect( hwnd, &rc ); return rc.bottom - rc.top; } //! size of client area inline static void getClientSize( HWND hwnd, int *wid, int *hei ) { RECT rc; ::GetClientRect( hwnd, &rc ); *wid = rc.right - rc.left; *hei = rc.bottom - rc.top; } /////////////////////////////////////////////////////////////////////////////// inline static void setWindowLeftTop( HWND hwnd, int left, int top ) { ::SetWindowPos( hwnd, NULL, left, top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE ); } inline static void setWindowLeft( HWND hwnd, int left ) { int top = getWindowTop( hwnd ); setWindowLeftTop( hwnd, left, top ); } inline static void setWindowTop( HWND hwnd, int top ) { int left = getWindowLeft( hwnd ); setWindowLeftTop( hwnd, left, top ); } //! set window left, top, width, height inline static void setWindowBox( HWND hwnd, int x, int y, int w, int h ) { ::SetWindowPos( hwnd, NULL, x, y, w, h, SWP_NOZORDER | SWP_NOACTIVATE ); } /////////////////////////////////////////////////////////////////////////////// //! get vertical position inline static int getVScrollPos( HWND hwnd ) { SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_POS; if (::GetScrollInfo( hwnd, SB_VERT, &si )) { return si.nPos; } return 0; } //! set vertical position inline static void setVScrollPos( HWND hwnd, int pos) { SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_POS; si.nPos = pos; ::SetScrollInfo( hwnd, SB_VERT, &si, TRUE); InvalidateRect( hwnd, 0, TRUE ); } //! get vertical scroll page size inline static int getVScrollPage( HWND hwnd ) { SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_PAGE; if (::GetScrollInfo( hwnd, SB_VERT, &si)) { return si.nPage; } return 0; } //! set vertical scroll page size inline static void setVScrollPage( HWND hwnd, int page) { SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_PAGE; si.nPage = page; ::SetScrollInfo( hwnd, SB_VERT, &si, TRUE); } //! set vertical scroll range inline static void setVScrollRange( HWND hwnd, int min, int max ) { SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_RANGE; si.nMin = min; si.nMax = max; ::SetScrollInfo( hwnd, SB_VERT, &si, TRUE ); } #endif // WINEXT_HPP_