Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cWndControls2.h
Go to the documentation of this file.
1 //
5 //
6 
7 #ifndef _INC_cWndControls2_H
8 #define _INC_cWndControls2_H
9 #ifndef NO_PRAGMA_ONCE
10 #pragma once
11 #endif
12 
13 #include "cWndControls.h"
14 #if defined(_WIN32)
15 #include <commctrl.h> // CListCtrl
16 #ifndef UNDER_CE
17 #include <richedit.h> // CRichEditCtrl
18 #endif
19 #endif
20 
21 #if defined(_WIN32)
22 
23 namespace GrayLib
24 {
25 #ifndef UNDER_CE
26 
27  class GRAYLIB_LINK cWndRichEditCtrl : public cWndEdit
28  {
32  public:
33  cWndRichEditCtrl(HWND hWnd = WINHANDLE_NULL) : cWndEdit(hWnd)
34  {
35  }
36  cWndRichEditCtrl(cWndHandle* pWndParent, DLGID_t id) : cWndEdit(pWndParent, id)
37  {}
38 
39  static HMODULE WINAPI InitLoadLibrary();
40 
41  BOOL SetTextMode(UINT uMask)
42  {
44  return((BOOL)SendMessageX(EM_SETTEXTMODE, uMask));
45  }
46  UINT GetTextMode()
47  {
49  return((UINT)SendMessageX(EM_GETTEXTMODE));
50  }
51 
52  COLORREF SetBackgroundColor(BOOL bSysColor, COLORREF cr)
53  {
54  return((COLORREF)(unsigned)SendMessageX(EM_SETBKGNDCOLOR, (WPARAM)bSysColor, (LPARAM)cr));
55  }
56 
57  void SetSel(int nStartChar, int nEndChar)
58  {
59  CHARRANGE range;
60  range.cpMin = nStartChar;
61  range.cpMax = nEndChar;
62  SendMessageX(EM_EXSETSEL, 0, (LPARAM)&range);
63  }
64  CHARRANGE GetSelRange() const
65  {
66  CHARRANGE range;
67  SendMessageX(EM_EXGETSEL, 0, (LPARAM)&range);
68  return range;
69  }
70  void GetSel(int& nStartChar, int& nEndChar) const
71  {
72  CHARRANGE range = GetSelRange();
73  nStartChar = range.cpMin;
74  nEndChar = range.cpMax;
75  }
76  long GetSelText(GChar_t* lpBuf) const
77  {
79  return (long)SendMessageX(EM_GETSELTEXT, 0, (LPARAM)lpBuf);
80  }
81  long GetSelTextLen() const
82  {
83  CHARRANGE range = GetSelRange();
84  return(range.cpMax - range.cpMin);
85  }
86 
87  // EM_GETTEXTEX
88 #if 0
89  void ReplaceSel(const GChar_t* lpszNewText, BOOL bCanUndo = false)
90  {
91  ASSERT(IsWindow());
92  _GTN(SETTEXTEX) settext;
93  settext.flags = (bCanUndo) ? (ST_SELECTION | ST_KEEPUNDO) : (ST_SELECTION);
94  settext.codepage = CP_ACP;
95  int iBytesMoved = (int)SendMessageX(EM_SETTEXTEX, (WPARAM)&settext, (LPARAM)lpszNewText);
96  }
97 #endif
98  void ScrollCaret()
99  {
102  SendMessageX((WM_USER + 49));
103  }
104 
105  void SetAutoUrlDetect(bool bActive)
106  {
107  SendMessageX(EM_AUTOURLDETECT, (WPARAM)bActive);
108  }
109 
110  // Formatting.
111  BOOL SetDefaultCharFormat(_GTN(CHARFORMAT)& cf)
112  {
113  return((BOOL)(DWORD)SendMessageX(EM_SETCHARFORMAT, (WPARAM)SCF_DEFAULT, (LPARAM)&cf));
114  }
115  BOOL SetSelectionCharFormat(_GTN(CHARFORMAT)& cf)
116  {
117  return((BOOL)(DWORD)SendMessageX(EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&cf));
118  }
119 
120  // Events.
121  long GetEventMask() const
122  {
124  return((DWORD)SendMessageX(EM_GETEVENTMASK));
125  }
126  DWORD SetEventMask(DWORD dwEventMask = ENM_NONE)
127  {
130  return((DWORD)SendMessageX(EM_SETEVENTMASK, 0, (LPARAM)dwEventMask));
131  }
132 
133  long FindTextX(DWORD dwFlags, _GTN(FINDTEXTEX)* pFindText) const
134  {
137  return((long)SendMessageX(EM_FINDTEXTEX, dwFlags, (LPARAM)pFindText));
138  }
139 
140  StrLen_t GetTextRange(StrLen_t nFirst, StrLen_t nLast, cString& refString) const;
141 
142  static DWORD CALLBACK EditStreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
143  bool SetTextFromFile(const FILECHAR_t* pszFilename);
144  };
145 
146 #endif
147 
148  // struct LVCOLUMN; // A or W
149  // struct LVITEM; // A or W
150 
151  struct cListCtrlColumn; // for use of cListCtrlHelper
152  class cListCtrlHelper;
153 
154  class GRAYLIB_LINK cWndListCtrl : public cWndHandle
155  {
160  public:
161 
162  cWndListCtrl(HWND hWnd = WINHANDLE_NULL) noexcept
163  : cWndHandle(hWnd)
164  {}
165  cWndListCtrl(cWndHandle* pWndParent, DLGID_t id) : cWndHandle(pWndParent, id)
166  {}
167  virtual ~cWndListCtrl()
168  {
169  }
170 
171 #if (_WIN32_IE >= 0x0300)
172  DWORD GetExtendedStyle() const
173  {
174  return (DWORD)SendMessageX(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
175  }
176  DWORD SetExtendedStyle(DWORD dwNewStyle) const
177  {
179  return (DWORD)SendMessageX(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dwNewStyle);
180  }
181 #endif
182 
183  HIMAGELIST SetImageList(HIMAGELIST hImageList, int nImageList) const
184  {
185  return (HIMAGELIST)SendMessageX(LVM_SETIMAGELIST, nImageList, (LPARAM)hImageList);
186  }
187 
189  int GetItemCount() const
190  {
191  return (int)SendMessageX(LVM_GETITEMCOUNT, 0, 0L);
192  }
193 
195  BOOL GetItem(_GTN(LVITEM)* pItem) const
196  {
197  return (BOOL)SendMessageX(LVM_GETITEM, 0, (LPARAM)pItem);
198  }
199 
201  BOOL SetItem(const _GTN(LVITEM)* pItem)
202  {
203  return (BOOL)SendMessageX(LVM_SETITEM, 0, (LPARAM)pItem);
204  }
205  BOOL SetItem(int nItem, int nSubItem, UINT nMask, const GChar_t* lpszItem,
206  int nImage, UINT nState, UINT nStateMask, LPARAM lParam, int nIndent = 0);
207 
209  BOOL GetColumn(int nCol, _GTN(LVCOLUMN)* pColumn) const
210  {
211  return (BOOL)SendMessageX(LVM_GETCOLUMN, nCol, (LPARAM)pColumn);
212  }
213 
215  BOOL SetColumn(int nCol, const _GTN(LVCOLUMN)* pColumn)
216  {
217  return (BOOL)SendMessageX(LVM_SETCOLUMN, nCol, (LPARAM)pColumn);
218  }
219 
221  int GetColumnWidth(int nCol) const
222  {
223  return (int)SendMessageX(LVM_GETCOLUMNWIDTH, nCol, 0);
224  }
225 
227  BOOL SetColumnWidth(int nCol, int cx)
228  {
229  return (BOOL)SendMessageX(LVM_SETCOLUMNWIDTH, nCol, MAKELPARAM(cx, 0));
230  }
231 
232  BOOL SetItemState(int nItem, _GTN(LVITEM)* pItem)
233  {
235  return (BOOL)SendMessageX(LVM_SETITEMSTATE, nItem, (LPARAM)pItem);
236  }
237  BOOL SetItemState(int nItem, UINT nState, UINT nStateMask);
238 
239  UINT GetItemState(int nItem, UINT nStateMask) const
240  {
243  return (UINT)SendMessageX(LVM_GETITEMSTATE, nItem, nStateMask);
244  }
245 
247  //cString GetItemText(int nItem, int nSubItem) const;
248  //int GetItemText(int nItem, int nSubItem, GChar_t* lpszText, int nLen) const;
249 
251  BOOL SetItemText(int nItem, int nSubItem, const GChar_t* lpszText);
252 
253  void SetItemCount(int nItems)
254  {
259  SendMessageX(LVM_SETITEMCOUNT, nItems, 0);
260  }
261  BOOL SetItemData(int nItem, DWORD_PTR dwItemData)
262  {
264  return SetItem(nItem, 0, LVIF_PARAM, nullptr, 0, 0, 0, (LPARAM)dwItemData);
265  }
266 
268  LPARAM GetItemData(int nItem) const;
269 
271  UINT GetSelectedCount() const
272  {
273  return (UINT)SendMessageX(LVM_GETSELECTEDCOUNT, 0, 0L);
274  }
275 
276  int GetNextItem(int nItem, int nFlags) const
277  {
278  return (int)SendMessageX(LVM_GETNEXTITEM, nItem, MAKELPARAM(nFlags, 0));
279  }
280 
281  DWORD_PTR GetFirstSelectedItemPosition() const
282  {
286  return (DWORD_PTR)(1 + GetNextItem(-1, LVIS_SELECTED));
287  }
288  int GetNextSelectedItem(DWORD_PTR& nPos) const
289  {
292  DWORD_PTR nPosOld = (DWORD_PTR)(nPos - 1);
293  nPos = (DWORD_PTR)(1 + GetNextItem((UINT)nPosOld, LVIS_SELECTED));
294  return (UINT)nPosOld;
295  }
296 
297  bool ClearSelectedStates()
298  {
299  // Clear all selected.
300  DWORD_PTR nPos = GetFirstSelectedItemPosition();
301  if (!nPos)
302  {
303  return false;
304  }
305  for (;;)
306  {
307  int iSelect = GetNextSelectedItem(nPos);
308  if (iSelect < 0)
309  break;
310  SetItemState(iSelect, 0, LVIS_SELECTED);
311  }
312  return true;
313  }
314  BOOL SetCurSel(int idCurSel)
315  {
318  ClearSelectedStates();
319  return SetItemState(idCurSel, LVIS_SELECTED, LVIS_SELECTED);
320  }
321  int GetCurSel() const
322  {
323  // Get the first selected item.
324  DWORD_PTR nPos = GetFirstSelectedItemPosition();
325  if (!nPos)
326  return(-1);
327  int iSelect = GetNextSelectedItem(nPos);
328  ASSERT(iSelect >= 0);
329  return(iSelect);
330  }
331 
332 #if 0
333  int SetSelectionMark(int iIndex) // like SetCurSel()
334  {
335  return (int)SendMessageX(LVM_SETSELECTIONMARK, 0, (LPARAM)iIndex);
336  }
337  int GetSelectionMark() // Like GetCurSel()
338  {
340  return (int)SendMessageX(LVM_GETSELECTIONMARK, 0, 0);
341  }
342 #endif
343 
344  // Operations
345 
346  int InsertItem(const _GTN(LVITEM)* pItem)
347  {
350  return (int)SendMessageX(LVM_INSERTITEM, 0, (LPARAM)pItem);
351  }
352  // int InsertItem(int nItem, const GChar_t* lpszItem);
353  // int InsertItem(int nItem, const GChar_t* lpszItem, int nImage);
354  int InsertItem(UINT nMask /*=LVIF_PARAM|LVIF_TEXT*/, int nItem, const GChar_t* lpszItem, UINT nState, UINT nStateMask,
355  int nImage, LPARAM lParam);
356 
357  BOOL DeleteItem(int nItem)
358  {
360  return (BOOL)SendMessageX(LVM_DELETEITEM, nItem, 0L);
361  }
362 
363  BOOL DeleteAllItems()
364  {
366  return (BOOL)SendMessageX(LVM_DELETEALLITEMS, 0, 0L);
367  }
368 
369  int InsertColumn(int nCol, const _GTN(LVCOLUMN)* pColumn)
370  {
372  return (int)SendMessageX(LVM_INSERTCOLUMN, nCol, (LPARAM)pColumn);
373  }
374  // int InsertColumn(int nCol, const GChar_t* lpszColumnHeading, int nFormat = 0 /* LVCFMT_LEFT*/, int nWidth = -1, int nSubItem = -1);
375 
377  BOOL DeleteColumn(int nCol)
378  {
379  return (BOOL)SendMessageX(LVM_DELETECOLUMN, nCol, 0);
380  }
381 
382 #if (_WIN32_IE >= 0x0300) && ! defined(UNDER_CE)
384  int GetHotItem()
385  {
386  return (int)SendMessageX(LVM_GETHOTITEM, 0, 0);
387  }
389  int SetHotItem(int iIndex)
390  {
391  return (int)SendMessageX(LVM_SETHOTITEM, (WPARAM)iIndex, 0);
392  }
393 #endif
394 
395  int FindItem(_GTN(LVFINDINFO)* pFindInfo, int nStart = -1) const
396  {
400  return (int)SendMessageX(LVM_FINDITEM, nStart, (LPARAM)pFindInfo);
401  }
402  int FindItemBylParam(LPARAM lParam, int nStart = -1) const
403  {
407  _GTN(LVFINDINFO) FindInfo;
408  cMem::Zero(&FindInfo, sizeof(FindInfo));
409  FindInfo.flags = LVFI_PARAM;
410  // FindInfo.psz = nullptr;
411  FindInfo.lParam = lParam;
412  return FindItem(&FindInfo, nStart);
413  }
414  BOOL SortItems(PFNLVCOMPARE pfnCompare, DWORD_PTR dwData)
415  {
416  return (BOOL)SendMessageX(LVM_SORTITEMS, (WPARAM)(LPARAM)(dwData), (LPARAM)(PFNLVCOMPARE)(pfnCompare));
417  }
418  };
419 
420  class GRAYLIB_LINK cWndSliderCtrl : public cWndHandle
421  {
424 
425  public:
426  cWndSliderCtrl(HWND hWnd = WINHANDLE_NULL) : cWndHandle(hWnd)
427  {}
428  cWndSliderCtrl(cWndHandle* pWndParent, DLGID_t id) : cWndHandle(pWndParent, id)
429  {}
430  virtual ~cWndSliderCtrl()
431  {
432  }
433 
434  void SetRangeMin(int nMin, BOOL bRedraw)
435  {
436  SendMessageX(TBM_SETRANGEMIN, bRedraw, nMin);
437  }
438  void SetRangeMax(int nMax, BOOL bRedraw)
439  {
440  SendMessageX(TBM_SETRANGEMAX, bRedraw, nMax);
441  }
442 
443  int GetPos() const
444  {
445  return (int)SendMessageX(TBM_GETPOS, 0, 0l);
446  }
447  void SetPos(int nPos)
448  {
449  SendMessageX(TBM_SETPOS, true, nPos);
450  }
451  };
452 
453  class GRAYLIB_LINK cWndProgressCtrl : public cWndHandle
454  {
458 
459  public:
460  cWndProgressCtrl(HWND hWnd = WINHANDLE_NULL) : cWndHandle(hWnd)
461  {}
462  cWndProgressCtrl(cWndHandle* pWndParent, DLGID_t id) : cWndHandle(pWndParent, id)
463  {}
464  virtual ~cWndProgressCtrl()
465  {
466  }
467 
468  void SetRange(short nLower, short nUpper)
469  {
472  SendMessageX(PBM_SETRANGE, 0, MAKELPARAM(nLower, nUpper));
473  }
474 
475  void SetRange32(int nLower, int nUpper)
476  {
478  SendMessageX(PBM_SETRANGE32, (WPARAM)nLower, (LPARAM)nUpper);
479  }
480 
482  // void GetRange(int& nLower, int& nUpper);
483 
484  int GetPos()
485  {
487  return (int)SendMessageX(PBM_GETPOS, 0, 0);
488  }
489 
490  int SetPos(int nPos)
491  {
493  return (int)SendMessageX(PBM_SETPOS, nPos, 0L);
494  }
495 
496  int OffsetPos(int nPos)
497  {
500  return (int)SendMessageX(PBM_DELTAPOS, nPos, 0L);
501  }
502 
503  int SetStep(int nStep)
504  {
506  return (int)SendMessageX(PBM_SETSTEP, nStep, 0L);
507  }
508 
509 #ifndef UNDER_CE
510  COLORREF SetBkColor(COLORREF clrNew)
511  {
513  return (COLORREF)SendMessageX(PBM_SETBKCOLOR, 0, (LPARAM)clrNew);
514  }
515  COLORREF SetBarColor(COLORREF clrNew)
516  {
517  return (COLORREF)SendMessageX(PBM_SETBARCOLOR, 0, (LPARAM)clrNew);
518  }
519 #endif
520 
522 
524  int StepIt()
525  {
526  return (int)SendMessageX(PBM_STEPIT, 0, 0L);
527  }
528  };
529 
530  class GRAYLIB_LINK cWndTabCtrl : public cWndHandle
531  {
535  public:
536 
537  cWndTabCtrl(HWND hWnd = WINHANDLE_NULL) : cWndHandle(hWnd)
538  {}
539  cWndTabCtrl(cWndHandle* pWndParent, DLGID_t id) : cWndHandle(pWndParent, id)
540  {}
541  virtual ~cWndTabCtrl()
542  {
543  }
544  };
545 
546 #ifndef _MFC_VER
547  typedef cWndSliderCtrl CSliderCtrl;
548  typedef cWndProgressCtrl CProgressCtrl;
549  typedef cWndListCtrl CListCtrl; // alias as MFC
550 #ifndef UNDER_CE
551  typedef cWndRichEditCtrl CRichEditCtrl;
552 #endif
553 #endif
554 };
555 
556 #endif // _WIN32
557 #endif // _INC_cWndControls2_H
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define _GTN(c)
_WIN32 name has a A or W for UTF8 or UNICODE (like _FNF)
Definition: StrConst.h:28
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define WINHANDLE_NULL
HWND, HPEN, etc are NOT OS Handles. like HWND_DESKTOP. like HANDLEPTR_NULL. This is a WINAPI void* ha...
Definition: cOSHandle.h:23
UINT32 COLORREF
ABGR (high to low bits)
Definition: cVariantData.h:21
Definition: cMesh.h:22
UINT DLGID_t
old window format this was a WORD, EX format this is UINT32.
Definition: cResDialog.h:68
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
@ CP_ACP
default to ANSI code page. All the _WIN32 A suffix functions.
Definition: StrChar.h:34
char GChar_t
My version of TCHAR, _TCHAR.
Definition: StrConst.h:26
cStringT< GChar_t > cString
Definition: cString.h:636
static void Zero(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:100