winctrl6.cpp 8.2 KB

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