windows.dc.h.xml 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <chapter xml:id="windows.dc.h">
  2. <title><tt>__vic/windows/dc.h</tt></title>
  3. <p>C++-обёртка для Win32 GDI device context (DC).</p>
  4. <chapter xml:id="windows--DC">
  5. <title><tt>windows::DC</tt></title>
  6. <code-block lang="C++"><![CDATA[
  7. class windows::DC
  8. {
  9. public:
  10. DC() = default;
  11. explicit DC(HDC hdc);
  12. static DC CreateCompatible(HDC hdc);
  13. bool ReleaseNT(HWND hwnd) noexcept;
  14. void Release(HWND hwnd);
  15. bool DeleteNT() noexcept;
  16. void Delete();
  17. int GetHorzRes() const;
  18. int GetVertRes() const;
  19. HWND GetWindow() const;
  20. HGDIOBJ GetCurrentObject(UINT uObjType) const;
  21. HBRUSH GetCurrentBrush() const;
  22. HPEN GetCurrentPen() const;
  23. HFONT GetCurrentFont() const;
  24. HBITMAP GetCurrentBitmap() const;
  25. void Select(HGDIOBJ hObj); // not a region object
  26. void Select(HRGN hReg);
  27. COLORREF SetPixel(int x, int y, COLORREF c);
  28. bool MoveTo(int x, int y, POINT *p = 0);
  29. bool LineTo(int x, int y);
  30. bool PolyBezier(const POINT *lppt, DWORD cPoints);
  31. bool FillRect(const RECT &rect, HBRUSH hbr);
  32. bool BlitTo(HDC dcDest, int x, int y,
  33. int w, int h, DWORD dwRop = SRCCOPY) const;
  34. bool BlitTo(HDC dcDest, const RECT &r, DWORD dwRop = SRCCOPY) const;
  35. void ClearHandle();
  36. HDC Handle() const;
  37. void Handle(HDC hdc);
  38. operator HDC() const;
  39. };
  40. ]]></code-block>
  41. <p>Обёртка общего назначения для <tt>HDC</tt>.
  42. Используйте <xref to="windows--ClientDC"/> вместо <tt>::ReleaseDC()</tt>.
  43. Используйте <xref to="windows--PaintDC"/> вместо
  44. <tt>::BeginPaint()</tt>/<tt>::EndPaint()</tt>.</p>
  45. <note>Для большинства функций, возвращающих <tt>false</tt> в случае ошибки,
  46. нет возможности получить дополнительную информацию вызовом
  47. <tt>::GetLastError()</tt>.</note>
  48. <section><title>Члены класса</title>
  49. <synopsis>
  50. <prototype>DC() = default</prototype>
  51. <p>Создаёт неинициализированное значение.</p>
  52. </synopsis>
  53. <synopsis>
  54. <prototype>explicit DC(HDC hdc)</prototype>
  55. <postcondition><tt>Handle() == hdc</tt></postcondition>
  56. </synopsis>
  57. <synopsis>
  58. <prototype>static DC CreateCompatible(HDC hdc)</prototype>
  59. <p>Вызывает <tt>::CreateCompatibleDC()</tt>.</p>
  60. </synopsis>
  61. <synopsis>
  62. <prototype>bool ReleaseNT(HWND hwnd) noexcept</prototype>
  63. <p>Вызывает <tt>::ReleaseDC()</tt> и возвращает <tt>false</tt> в случае
  64. ошибки.</p>
  65. </synopsis>
  66. <synopsis>
  67. <prototype>void Release(HWND hwnd)</prototype>
  68. <p>Вызывает <tt>::ReleaseDC()</tt> и бросает исключение в случае ошибки.</p>
  69. </synopsis>
  70. <synopsis>
  71. <prototype>bool DeleteNT() noexcept</prototype>
  72. <p>Вызывает <tt>::DeleteDC()</tt> и возвращает <tt>false</tt> в случае
  73. ошибки.</p>
  74. </synopsis>
  75. <synopsis>
  76. <prototype>void Delete()</prototype>
  77. <p>Вызывает <tt>::DeleteDC()</tt> и бросает исключение в случае ошибки.</p>
  78. </synopsis>
  79. <synopsis>
  80. <prototype>int GetHorzRes() const</prototype>
  81. <p>Возвращает горизонтальное разрешение данного DC.</p>
  82. </synopsis>
  83. <synopsis>
  84. <prototype>int GetVertRes() const</prototype>
  85. <p>Возвращает вертикальное разрешение данного DC.</p>
  86. </synopsis>
  87. <synopsis>
  88. <prototype>HWND GetWindow() const</prototype>
  89. <p>Вызывает <tt>::WindowFromDC()</tt> и возвращает его результат.</p>
  90. </synopsis>
  91. <synopsis>
  92. <prototype>HGDIOBJ GetCurrentObject(UINT uObjType) const</prototype>
  93. <p>Вызывает <tt>::GetCurrentObject()</tt> с указанным <tt>uObjType</tt>
  94. и возвращает его результат.</p>
  95. </synopsis>
  96. <synopsis>
  97. <prototype>HBRUSH GetCurrentBrush() const</prototype>
  98. <prototype>HPEN GetCurrentPen() const</prototype>
  99. <prototype>HFONT GetCurrentFont() const</prototype>
  100. <prototype>HBITMAP GetCurrentBitmap() const</prototype>
  101. <p>Вызывает <tt>::GetCurrentObject()</tt> для соответсвующего типа объекта
  102. и возвращает его результат.</p>
  103. </synopsis>
  104. <synopsis>
  105. <prototype>void Select(HGDIOBJ hObj)</prototype>
  106. <p>Вызывает <tt>::SelectObject()</tt> для объекта, не являющегося регионом,
  107. и бросает исключение в случае ошибки.</p>
  108. </synopsis>
  109. <synopsis>
  110. <prototype>void Select(HRGN hReg)</prototype>
  111. <p>Вызывает <tt>::SelectObject()</tt> для объекта, являющегося регионом,
  112. и бросает исключение в случае ошибки.</p>
  113. </synopsis>
  114. <synopsis>
  115. <prototype>COLORREF SetPixel(int x, int y, COLORREF c)</prototype>
  116. <p>Вызывает <tt>::SetPixel()</tt> и возвращает его результат.</p>
  117. </synopsis>
  118. <synopsis>
  119. <prototype>bool MoveTo(int x, int y, POINT *p = 0)</prototype>
  120. <p>Вызывает <tt>::MoveToEx()</tt> и возвращает <tt>false</tt> в случае
  121. ошибки.</p>
  122. </synopsis>
  123. <synopsis>
  124. <prototype>bool LineTo(int x, int y)</prototype>
  125. <p>Вызывает <tt>::LineTo()</tt> и возвращает <tt>false</tt> в случае
  126. ошибки.</p>
  127. </synopsis>
  128. <synopsis>
  129. <prototype>bool PolyBezier(const POINT *lppt, DWORD cPoints)</prototype>
  130. <p>Вызывает <tt>::PolyBezier()</tt> и возвращает <tt>false</tt> в случае
  131. ошибки.</p>
  132. </synopsis>
  133. <synopsis>
  134. <prototype>bool FillRect(const RECT &amp;rect, HBRUSH hbr)</prototype>
  135. <p>Вызывает <tt>::PolyBezier()</tt> и возвращает <tt>false</tt> в случае
  136. ошибки.</p>
  137. </synopsis>
  138. <synopsis>
  139. <prototype>bool BlitTo(HDC dcDest, int x, int y, int w, int h, DWORD dwRop = SRCCOPY) const</prototype>
  140. <prototype>bool BlitTo(HDC dcDest, const RECT &amp;r, DWORD dwRop = SRCCOPY) const</prototype>
  141. <p>Вызывает <tt>::BitBlt()</tt> и возвращает <tt>false</tt> в случае ошибки.</p>
  142. <note><tt>::GetLastError()</tt> может быть использована для получения
  143. расширенной информации об ошибке.</note>
  144. </synopsis>
  145. <synopsis>
  146. <prototype>void ClearHandle()</prototype>
  147. <postcondition><tt>!Handle()</tt></postcondition>
  148. </synopsis>
  149. <synopsis>
  150. <prototype>HDC Handle() const</prototype>
  151. <prototype>operator HDC() const</prototype>
  152. <p>Возвращает обёрнутое значение HDC.</p>
  153. </synopsis>
  154. <synopsis>
  155. <prototype>void Handle(HDC hdc)</prototype>
  156. <postcondition><tt>Handle() == hdc</tt></postcondition>
  157. </synopsis>
  158. </section>
  159. </chapter>
  160. <chapter xml:id="windows--ClientDC">
  161. <title><tt>windows::ClientDC</tt></title>
  162. <code-block lang="C++">
  163. class windows::ClientDC : public windows::DC, private non_copyable
  164. {
  165. public:
  166. explicit ClientDC(HWND hwnd);
  167. ClientDC(HDC hdc, HWND hwnd);
  168. ~ClientDC();
  169. };
  170. </code-block>
  171. <p>RAII-обёртка. Вызывает <tt>::ReleaseDC()</tt> в деструкторе.</p>
  172. <section><title>Члены класса</title>
  173. <synopsis>
  174. <prototype>explicit ClientDC(HWND hwnd)</prototype>
  175. <p>Вызывает <tt>::GetDC(hwnd)</tt>. Бросает исключение в случае ошибки.</p>
  176. </synopsis>
  177. <synopsis>
  178. <prototype>ClientDC(HDC hdc, HWND hwnd)</prototype>
  179. <p>Заворачивает <tt>hdc</tt> для последующего освобождения в деструкторе.</p>
  180. <precondition><tt>hdc</tt> - валидный дескриптор, возвращённый вызовом
  181. <tt>::GetDC(hwnd)</tt>.</precondition>
  182. <postcondition><tt>Handle() == hdc</tt></postcondition>
  183. </synopsis>
  184. <synopsis>
  185. <prototype>~ClientDC()</prototype>
  186. <p>Вызывает <tt>::ReleaseDC()</tt>.</p>
  187. </synopsis>
  188. </section>
  189. </chapter>
  190. <chapter xml:id="windows--PaintDC">
  191. <title><tt>windows::PaintDC</tt></title>
  192. <code-block lang="C++">
  193. class windows::PaintDC :
  194. public windows::DC, public PAINTSTRUCT, private non_copyable
  195. {
  196. public:
  197. explicit PaintDC(HWND hwnd);
  198. ~PaintDC();
  199. };
  200. </code-block>
  201. <p>Обёртка для <tt>PAINTSTRUCT</tt> и вызовов
  202. <tt>::BeginPaint()</tt>/<tt>::EndPaint()</tt>.</p>
  203. <section><title>Члены класса</title>
  204. <synopsis>
  205. <prototype>explicit PaintDC(HWND hwnd)</prototype>
  206. <p>Вызывает <tt>::BeginPaint(hwnd, this)</tt>. Бросает исключение в случае
  207. ошибки.</p>
  208. </synopsis>
  209. <synopsis>
  210. <prototype>~PaintDC()</prototype>
  211. <p>Вызывает <tt>::EndPaint()</tt>.</p>
  212. </synopsis>
  213. </section>
  214. </chapter>
  215. </chapter>