home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / mfc / src / winctrl6.cpp < prev    next >
C/C++ Source or Header  |  1998-06-16  |  8KB  |  318 lines

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10.  
  11. #include "stdafx.h"
  12.  
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CIPAddressCtrl
  15.  
  16. #ifdef AFX_INET_SEG
  17. #pragma code_seg(AFX_INET_SEG)
  18. #endif
  19.  
  20. CIPAddressCtrl::~CIPAddressCtrl()
  21. {
  22.     DestroyWindow();
  23. }
  24.  
  25. BOOL CIPAddressCtrl::Create(DWORD dwStyle, const RECT& rect,
  26.     CWnd* pParentWnd, UINT nID)
  27. {
  28.     // initialize common controls
  29.     VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTL_INTERNET_REG));
  30.  
  31.     // the IP Address Control must be a child
  32.     ASSERT(dwStyle & WS_CHILD);
  33.  
  34.     CWnd* pWnd = this;
  35.     return pWnd->Create(WC_IPADDRESS, NULL, dwStyle, rect, pParentWnd, nID);
  36. }
  37.  
  38. int CIPAddressCtrl::GetAddress(BYTE& nField0, BYTE& nField1, BYTE& nField2, BYTE& nField3)
  39. {
  40.     ASSERT(::IsWindow(m_hWnd));
  41.     DWORD dwAddress;
  42.     LRESULT nRetVal = ::SendMessage(m_hWnd, IPM_GETADDRESS, 0, (LPARAM) &dwAddress);
  43.  
  44.     nField0 = (BYTE) FIRST_IPADDRESS(dwAddress);
  45.     nField1 = (BYTE) SECOND_IPADDRESS(dwAddress);
  46.     nField2 = (BYTE) THIRD_IPADDRESS(dwAddress);
  47.     nField3 = (BYTE) FOURTH_IPADDRESS(dwAddress);
  48.  
  49.     return nRetVal;
  50. }
  51.  
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CComboBoxEx
  54.  
  55. #ifdef AFX_CMNCTL_SEG
  56. #pragma code_seg(AFX_CMNCTL_SEG)
  57. #endif
  58.  
  59. BOOL CComboBoxEx::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
  60.     UINT nID)
  61. {
  62.     // initialize common controls
  63.     VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTL_USEREX_REG));
  64.  
  65.     CWnd* pWnd = this;
  66.     return pWnd->Create(WC_COMBOBOXEX, NULL, dwStyle, rect, pParentWnd, nID);
  67. }
  68.  
  69. int CComboBoxEx::DeleteItem(int iIndex)
  70. {
  71.     ASSERT(::IsWindow(m_hWnd));
  72.     return (int) ::SendMessage(m_hWnd, CBEM_DELETEITEM, (WPARAM) iIndex, 0);
  73. }
  74.  
  75. BOOL CComboBoxEx::GetItem(COMBOBOXEXITEM* pCBItem)
  76. {
  77.     ASSERT(::IsWindow(m_hWnd));
  78.     ASSERT(pCBItem != NULL);
  79.     ASSERT(AfxIsValidAddress(pCBItem, sizeof(COMBOBOXEXITEM)));
  80.  
  81.     return (int) ::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPARAM) pCBItem);
  82. }
  83.  
  84. int CComboBoxEx::InsertItem(const COMBOBOXEXITEM* pCBItem)
  85. {
  86.     ASSERT(::IsWindow(m_hWnd));
  87.     ASSERT(pCBItem != NULL);
  88.     ASSERT(AfxIsValidAddress(pCBItem, sizeof(COMBOBOXEXITEM), FALSE));
  89.  
  90.     return (int) ::SendMessage(m_hWnd, CBEM_INSERTITEM, 0, (LPARAM) pCBItem);
  91. }
  92.  
  93. BOOL CComboBoxEx::SetItem(const COMBOBOXEXITEM* pCBItem)
  94. {
  95.     ASSERT(::IsWindow(m_hWnd));
  96.     ASSERT(pCBItem != NULL);
  97.     ASSERT(AfxIsValidAddress(pCBItem, sizeof(COMBOBOXEXITEM), FALSE));
  98.  
  99.     return (int) ::SendMessage(m_hWnd, CBEM_SETITEM, 0, (LPARAM) pCBItem);
  100. }
  101.  
  102. CComboBoxEx::~CComboBoxEx()
  103. {
  104.     DestroyWindow();
  105. }
  106.  
  107. /////////////////////////////////////////////////////////////////////////////
  108. // CReBarCtrl
  109.  
  110. BOOL CReBarCtrl::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
  111.     UINT nID)
  112. {
  113.     // initialize common controls
  114.     VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTL_COOL_REG));
  115.  
  116.     CWnd* pWnd = this;
  117.     return pWnd->Create(REBARCLASSNAME, NULL, dwStyle, rect, pParentWnd, nID);
  118. }
  119.  
  120. CImageList* CReBarCtrl::GetImageList() const
  121. {
  122.     REBARINFO rbi;
  123.     rbi.cbSize = sizeof(rbi);
  124.     rbi.fMask = RBIM_IMAGELIST;
  125.     return GetBarInfo(&rbi) ? CImageList::FromHandle(rbi.himl) : NULL;
  126. }
  127.  
  128. BOOL CReBarCtrl::SetImageList(CImageList* pImageList)
  129. {
  130.     REBARINFO rbi;
  131.     rbi.cbSize = sizeof(rbi);
  132.     rbi.fMask = RBIM_IMAGELIST;
  133.     rbi.himl = (HIMAGELIST)pImageList->GetSafeHandle();
  134.     return SetBarInfo(&rbi);
  135. }
  136.  
  137. BOOL CReBarCtrl::GetColorScheme(COLORSCHEME* lpcs)
  138. {
  139.     lpcs->dwSize = sizeof(COLORSCHEME);
  140.     return SendMessage(RB_GETCOLORSCHEME, 0, (LPARAM)lpcs);
  141. }
  142.  
  143. void CReBarCtrl::SetColorScheme(const COLORSCHEME* lpcs)
  144. {
  145.     ((COLORSCHEME*)lpcs)->dwSize = sizeof(COLORSCHEME);
  146.     SendMessage(RB_SETCOLORSCHEME, 0, (LPARAM)lpcs);
  147. }
  148.  
  149. /////////////////////////////////////////////////////////////////////////////
  150. // CListCtrl
  151.  
  152. BOOL CListCtrl::SetColumnOrderArray(int iCount, LPINT piArray)
  153. {
  154.     ASSERT(::IsWindow(m_hWnd));
  155.     ASSERT(AfxIsValidAddress(piArray, iCount * sizeof(int), FALSE));
  156.  
  157.     return (BOOL) ::SendMessage(m_hWnd, LVM_SETCOLUMNORDERARRAY,
  158.                     (WPARAM) iCount, (LPARAM) piArray);
  159. }
  160.  
  161. BOOL CListCtrl::GetColumnOrderArray(LPINT piArray, int iCount /* = -1 */)
  162. {
  163.     ASSERT(::IsWindow(m_hWnd));
  164.  
  165.     // if -1 was passed, find the count ourselves
  166.  
  167.     int nCount = iCount;
  168.     if (nCount == -1)
  169.     {
  170.         CHeaderCtrl* pCtrl = GetHeaderCtrl();
  171.         ASSERT(pCtrl != NULL);
  172.         if (pCtrl != NULL)
  173.             nCount = pCtrl->GetItemCount();
  174.     }
  175.     if (nCount == -1)
  176.         return FALSE;
  177.  
  178.     ASSERT(AfxIsValidAddress(piArray, nCount * sizeof(int)));
  179.     return (BOOL) ::SendMessage(m_hWnd, LVM_GETCOLUMNORDERARRAY,
  180.         (WPARAM) nCount, (LPARAM) piArray);
  181. }
  182.  
  183. BOOL CListCtrl::SetBkImage(HBITMAP hbm, BOOL fTile /*= TRUE*/, int xOffsetPercent /*= 0*/, int yOffsetPercent /*= 0*/)
  184. {
  185.     LVBKIMAGE lv;
  186.  
  187.     lv.ulFlags = LVBKIF_SOURCE_HBITMAP;
  188.     if( fTile )
  189.         lv.ulFlags |= LVBKIF_STYLE_TILE;
  190.     else
  191.         lv.ulFlags |= LVBKIF_STYLE_NORMAL;
  192.     lv.hbm = hbm;
  193.     lv.xOffsetPercent = xOffsetPercent;
  194.     lv.yOffsetPercent = yOffsetPercent;
  195.     return SetBkImage(&lv);
  196. }
  197.  
  198. BOOL CListCtrl::SetBkImage(LPTSTR pszUrl, BOOL fTile /*= TRUE*/, int xOffsetPercent /*= 0*/, int yOffsetPercent /*= 0*/)
  199. {
  200.     LVBKIMAGE lv;
  201.  
  202.     lv.ulFlags = LVBKIF_SOURCE_URL;
  203.     if( fTile )
  204.         lv.ulFlags |= LVBKIF_STYLE_TILE;
  205.     else
  206.         lv.ulFlags |= LVBKIF_STYLE_NORMAL;
  207.     lv.pszImage = pszUrl;
  208.     lv.xOffsetPercent = xOffsetPercent;
  209.     lv.yOffsetPercent = yOffsetPercent;
  210.     return SetBkImage(&lv);
  211. }
  212.  
  213. BOOL CListCtrl::GetCheck(int nItem) const
  214. {
  215.     ASSERT(::IsWindow(m_hWnd));
  216.     int nState = (int)::SendMessage(m_hWnd, LVM_GETITEMSTATE, (WPARAM)nItem,
  217.         (LPARAM)LVIS_STATEIMAGEMASK);
  218.     // Return zero if it's not checked, or nonzero otherwise.
  219.     return ((BOOL)(nState >> 12) -1);
  220. }
  221.  
  222. BOOL CListCtrl::SetCheck(int nItem, BOOL fCheck)
  223. {
  224.     ASSERT(::IsWindow(m_hWnd));
  225.     LVITEM lvi;
  226.     lvi.stateMask = LVIS_STATEIMAGEMASK;
  227.  
  228.     /*
  229.     Since state images are one-based, 1 in this macro turns the check off, and
  230.     2 turns it on.
  231.     */
  232.     lvi.state = INDEXTOSTATEIMAGEMASK((fCheck ? 2 : 1));
  233.     return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi);
  234. }
  235.  
  236. /////////////////////////////////////////////////////////////////////////////
  237. // CHeaderCtrl
  238.  
  239. CHeaderCtrl* CListCtrl::GetHeaderCtrl()
  240. {
  241.     ASSERT(::IsWindow(m_hWnd));
  242.  
  243.     HWND hWnd = (HWND) ::SendMessage(m_hWnd, LVM_GETHEADER, 0, 0);
  244.     if (hWnd == NULL)
  245.         return NULL;
  246.     else
  247.         return (CHeaderCtrl*) CHeaderCtrl::FromHandle(hWnd);
  248. }
  249.  
  250.  
  251. BOOL CHeaderCtrl::SetOrderArray(int iCount, LPINT piArray)
  252. {
  253.     ASSERT(::IsWindow(m_hWnd));
  254.     ASSERT(AfxIsValidAddress(piArray, iCount * sizeof(int), FALSE));
  255.  
  256.     return (BOOL) ::SendMessage(m_hWnd, HDM_SETORDERARRAY,
  257.                     (WPARAM) iCount, (LPARAM) piArray);
  258. }
  259.  
  260. BOOL CHeaderCtrl::GetOrderArray(LPINT piArray, int iCount /* = -1 */)
  261. {
  262.     ASSERT(::IsWindow(m_hWnd));
  263.  
  264.     // if -1 was passed, find the count ourselves
  265.  
  266.     int nCount = iCount;
  267.     if (nCount == -1)
  268.     {
  269.         nCount = GetItemCount();
  270.  
  271.         if (nCount == -1)
  272.             return FALSE;
  273.     }
  274.  
  275.     ASSERT(AfxIsValidAddress(piArray, iCount * sizeof(int)));
  276.  
  277.     return (BOOL) ::SendMessage(m_hWnd, HDM_GETORDERARRAY,
  278.         (WPARAM) iCount, (LPARAM) piArray);
  279. }
  280.  
  281. /////////////////////////////////////////////////////////////////////////////
  282. // CProgressCtrl
  283.  
  284. void CProgressCtrl::GetRange(int& nLower, int& nUpper)
  285. {
  286.     ASSERT(::IsWindow(m_hWnd));
  287.     PBRANGE range;
  288.     ::SendMessage(m_hWnd, PBM_GETRANGE, (WPARAM) FALSE, (LPARAM) &range);
  289.     nLower = range.iLow;
  290.     nUpper = range.iHigh;
  291.     return;
  292. }
  293.  
  294.  
  295.  
  296. /////////////////////////////////////////////////////////////////////////////
  297.  
  298. #ifndef _AFX_ENABLE_INLINES
  299.  
  300. static const char _szAfxWinInl[] = "afxcmn2.inl";
  301. #undef THIS_FILE
  302. #define THIS_FILE _szAfxWinInl
  303. #define _AFXCMN_INLINE
  304. #include "afxcmn2.inl"
  305.  
  306. #endif //_AFX_ENABLE_INLINES
  307.  
  308. /////////////////////////////////////////////////////////////////////////////
  309.  
  310. #ifdef AFX_INIT_SEG
  311. #pragma code_seg(AFX_INIT_SEG)
  312. #endif
  313.  
  314. IMPLEMENT_DYNAMIC(CIPAddressCtrl, CWnd)
  315. IMPLEMENT_DYNAMIC(CReBarCtrl, CWnd)
  316.  
  317. /////////////////////////////////////////////////////////////////////////////
  318.