Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

343 lines
6.6 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. //
  5. // Copyright (C) Microsoft Corporation, 1997 - 1999
  6. //
  7. // File: commctrl.cpp
  8. //
  9. //--------------------------------------------------------------------------
  10. #include <windows.h>
  11. #include "unicode.h"
  12. #include "crtem.h"
  13. HTREEITEM WINAPI TreeView_InsertItem9x(
  14. HWND hwndTV,
  15. LPTVINSERTSTRUCTW lpis
  16. )
  17. {
  18. TVINSERTSTRUCTA tvItem;
  19. HTREEITEM hTreeItem;
  20. int cb;
  21. memcpy(&tvItem, lpis, sizeof(LPTVINSERTSTRUCTA));
  22. cb = WideCharToMultiByte(
  23. 0,
  24. 0,
  25. lpis->item.pszText,
  26. -1,
  27. NULL,
  28. 0,
  29. NULL,
  30. NULL);
  31. if (NULL == (tvItem.item.pszText = (LPSTR) malloc(cb)))
  32. {
  33. return NULL; // this is the unsuccessful return code for this call
  34. }
  35. WideCharToMultiByte(
  36. 0,
  37. 0,
  38. lpis->item.pszText,
  39. -1,
  40. tvItem.item.pszText,
  41. cb,
  42. NULL,
  43. NULL);
  44. hTreeItem = (HTREEITEM) SendMessage(hwndTV, TVM_INSERTITEMA, 0, (LPARAM) &tvItem);
  45. free(tvItem.item.pszText);
  46. return hTreeItem;
  47. }
  48. HTREEITEM WINAPI TreeView_InsertItemU(
  49. HWND hwndTV,
  50. LPTVINSERTSTRUCTW lpis
  51. )
  52. {
  53. if (FIsWinNT())
  54. {
  55. return((HTREEITEM) SendMessage(hwndTV, TVM_INSERTITEMW, 0, (LPARAM) lpis));
  56. }
  57. else
  58. {
  59. return (TreeView_InsertItem9x(hwndTV, lpis));
  60. }
  61. }
  62. int WINAPI ListView_InsertItem9x(
  63. HWND hwnd,
  64. const LPLVITEMW pitem
  65. )
  66. {
  67. LVITEMA lvItem;
  68. int iRet;
  69. int cb;
  70. memcpy(&lvItem, pitem, sizeof(LVITEMA));
  71. cb = WideCharToMultiByte(
  72. 0,
  73. 0,
  74. pitem->pszText,
  75. -1,
  76. NULL,
  77. 0,
  78. NULL,
  79. NULL);
  80. if (NULL == (lvItem.pszText = (LPSTR) malloc(cb)))
  81. {
  82. return -1; // this is the unsuccessful return code for this call
  83. }
  84. WideCharToMultiByte(
  85. 0,
  86. 0,
  87. pitem->pszText,
  88. -1,
  89. lvItem.pszText,
  90. cb,
  91. NULL,
  92. NULL);
  93. iRet = (int)SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &lvItem);
  94. free(lvItem.pszText);
  95. return iRet;
  96. }
  97. int WINAPI ListView_InsertItemU(
  98. HWND hwnd,
  99. const LPLVITEMW pitem
  100. )
  101. {
  102. if (FIsWinNT())
  103. {
  104. return ((int)SendMessage(hwnd, LVM_INSERTITEMW, 0, (LPARAM) pitem));
  105. }
  106. else
  107. {
  108. return (ListView_InsertItem9x(hwnd, pitem));
  109. }
  110. }
  111. void WINAPI ListView_SetItemTextU(
  112. HWND hwnd,
  113. int i,
  114. int iSubItem,
  115. LPCWSTR pszText
  116. )
  117. {
  118. LVITEMA lvItemA;
  119. LVITEMW lvItemW;
  120. int cb;
  121. if ((ULONG_PTR) pszText == (ULONG_PTR) LPSTR_TEXTCALLBACK)
  122. {
  123. memset(&lvItemA, 0, sizeof(lvItemA));
  124. lvItemA.iSubItem = iSubItem;
  125. lvItemA.pszText = (LPSTR) LPSTR_TEXTCALLBACK;
  126. SendMessage(hwnd, LVM_SETITEMTEXTA, i, (LPARAM) &lvItemA);
  127. return;
  128. }
  129. if (FIsWinNT())
  130. {
  131. memset(&lvItemW, 0, sizeof(lvItemW));
  132. lvItemW.iSubItem = iSubItem;
  133. lvItemW.pszText = (LPWSTR) pszText;
  134. SendMessage(hwnd, LVM_SETITEMTEXTW, i, (LPARAM) &lvItemW);
  135. return;
  136. }
  137. memset(&lvItemA, 0, sizeof(lvItemA));
  138. lvItemA.iSubItem = iSubItem;
  139. cb = WideCharToMultiByte(
  140. 0,
  141. 0,
  142. pszText,
  143. -1,
  144. NULL,
  145. 0,
  146. NULL,
  147. NULL);
  148. if (NULL == (lvItemA.pszText = (LPSTR) malloc(cb)))
  149. {
  150. return;
  151. }
  152. WideCharToMultiByte(
  153. 0,
  154. 0,
  155. pszText,
  156. -1,
  157. lvItemA.pszText,
  158. cb,
  159. NULL,
  160. NULL);
  161. SendMessage(hwnd, LVM_SETITEMTEXTA, i, (LPARAM) &lvItemA);
  162. free(lvItemA.pszText);
  163. }
  164. int WINAPI ListView_InsertColumn9x(
  165. HWND hwnd,
  166. int i,
  167. const LPLVCOLUMNW plvC)
  168. {
  169. LVCOLUMNA lvCA;
  170. int iRet;
  171. int cb;
  172. memcpy(&lvCA, plvC, sizeof(LVCOLUMNA));
  173. cb = WideCharToMultiByte(
  174. 0,
  175. 0,
  176. plvC->pszText,
  177. -1,
  178. NULL,
  179. 0,
  180. NULL,
  181. NULL);
  182. if (NULL == (lvCA.pszText = (LPSTR) malloc(cb)))
  183. {
  184. return -1; // failure code for this call
  185. }
  186. WideCharToMultiByte(
  187. 0,
  188. 0,
  189. plvC->pszText,
  190. -1,
  191. lvCA.pszText,
  192. cb,
  193. NULL,
  194. NULL);
  195. iRet = (int)SendMessage(hwnd, LVM_INSERTCOLUMNA, i, (LPARAM) &lvCA);
  196. free(lvCA.pszText);
  197. return iRet;
  198. }
  199. int WINAPI ListView_InsertColumnU(
  200. HWND hwnd,
  201. int i,
  202. const LPLVCOLUMNW plvC)
  203. {
  204. if (FIsWinNT())
  205. {
  206. return ((int)SendMessage(hwnd, LVM_INSERTCOLUMNW, i, (LPARAM) plvC));
  207. }
  208. else
  209. {
  210. return (ListView_InsertColumn9x(hwnd, i, plvC));
  211. }
  212. }
  213. BOOL WINAPI ListView_GetItem9x(
  214. HWND hwnd,
  215. LPLVITEMW pitem
  216. )
  217. {
  218. LVITEMA lvItemA;
  219. BOOL fRet;
  220. memcpy(&lvItemA, pitem, sizeof(lvItemA));
  221. if (NULL == (lvItemA.pszText = (LPSTR) malloc(lvItemA.cchTextMax)))
  222. {
  223. return FALSE;
  224. }
  225. fRet = (BOOL)SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &lvItemA);
  226. if (fRet)
  227. {
  228. pitem->state = lvItemA.state;
  229. pitem->iImage = lvItemA.iImage;
  230. pitem->lParam = lvItemA.lParam;
  231. pitem->iIndent = lvItemA.iIndent;
  232. if (pitem->mask & LVIF_TEXT)
  233. {
  234. MultiByteToWideChar(
  235. CP_ACP,
  236. 0,
  237. lvItemA.pszText,
  238. -1,
  239. pitem->pszText,
  240. pitem->cchTextMax);
  241. }
  242. }
  243. free(lvItemA.pszText);
  244. return fRet;
  245. }
  246. BOOL WINAPI ListView_GetItemU(
  247. HWND hwnd,
  248. LPLVITEMW pitem
  249. )
  250. {
  251. if (FIsWinNT())
  252. {
  253. return ((BOOL)SendMessage(hwnd, LVM_GETITEMW, 0, (LPARAM) pitem));
  254. }
  255. else
  256. {
  257. return (ListView_GetItem9x(hwnd, pitem));
  258. }
  259. }
  260. #ifdef _M_IX86
  261. HFONT
  262. WINAPI
  263. CreateFontIndirect9x(CONST LOGFONTW *lplf)
  264. {
  265. LOGFONTA lfa;
  266. memcpy(&lfa, lplf, sizeof(LOGFONTA));
  267. WideCharToMultiByte(
  268. 0,
  269. 0,
  270. lplf->lfFaceName,
  271. -1,
  272. lfa.lfFaceName,
  273. LF_FACESIZE,
  274. NULL,
  275. NULL);
  276. return (CreateFontIndirectA(&lfa));
  277. }
  278. HFONT
  279. WINAPI
  280. CreateFontIndirectU(CONST LOGFONTW *lplf)
  281. {
  282. if (FIsWinNT())
  283. {
  284. return (CreateFontIndirectW(lplf));
  285. }
  286. else
  287. {
  288. return (CreateFontIndirect9x(lplf));
  289. }
  290. }
  291. #endif