Форум программистов, компьютерный форум CyberForum.ru

класс холста - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа не компилируется при перестановке прототипов шаблонных функций http://www.cyberforum.ru/cpp-beginners/thread755257.html
Если переставить местами прототипы функций то программа не скомпилируется. Почему? В первой все хорошо, а вторая не компилируется только из-за того, что переставил местами функции Swap. 1. #include "stdafx.h" #include "iostream" using namespace std; struct Job {
C++ Задачи на классы Добрый вечер всем! Меня интересуют задачи на классы или перезагрузку операторов. Если кто-то имеет, сбрасывайте в эту тему! Я теории начитался, а вот практики мне не хватает! Извините за эту тему но в интернете нормального нет ничего! http://www.cyberforum.ru/cpp-beginners/thread755241.html
C++ Посчитать количество цифр и букв в строке
срочно. прошу вашу помощь_)) во введенной строке символов, заканчивающихся $. посчитать общее количество цифр и букв S. на с++.
C++ конструктор и деструктор
Разработать класс, набор методов(конструктор, деструктор и указанные методы) для программной модели заданного объекта. Описание объекта и его основных свойств приводится ниже. Предоставить программу (int main), которая использует объекты разработанного класса: Объект "комплексные числа". Операции определяются по общепринятым формулам. Конструктор должен позволять создавать объекты без и с...
C++ Типы bool и int http://www.cyberforum.ru/cpp-beginners/thread755201.html
Зачем использовать тип bool если можно сделать тоже самое с помощью типа int Например объявляем переменую типа int если ее значение равно нулю то ложь, если единице то истина. int x = 0;//Ложь x = 1;//Истина if(x = 1) { cout << "Истина"; }
C++ Ввод данных без нажатия «Enter» Добрый день Интересует такой вопрос После ввода числа нужно нажимать клавишу ENTER Как можно добится того, чтобы после ввода числа сразу переходило на набор другого, т.е. не нажимать постоянно Enter #include<cstdio> #include<cmath> int main() { подробнее

Показать сообщение отдельно
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
08.01.2013, 14:33     класс холста
я не совсем понимаю, что значит "hdc моего прямоугольника". в голову приходит только hdc, который создается в памяти и рисование идет сперва в него, а потом, в какой-то момент, нужно будет скопировать содержание этого hdc в окно (т.е. тут речь идет о буфере). если так, то вот, у меня завалялись старые файлики:

// common.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef __COMMON_H__
#define __COMMON_H__
 
#include <windows.h>
 
typedef UINT64 UInt64;
typedef UINT16 UInt32;
typedef UINT16 UInt16;
 
typedef INT32 Int32;
 
// ...
 
struct Size
{
  UInt32 width;
  UInt32 height;
 
  Size()
    : width(0)
    , height(0)
  {
  }
 
  Size(UInt32 theWidth, UInt32 theHeight)
    : width(theWidth)
    , height(theHeight)
  {
  }
};
 
// ...
 
#endif
// mem_dc.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ifndef __MEM_DC_H__
#define __MEM_DC_H__
 
#include "common.h"
 
class MemDC
{
public:
  explicit MemDC(HWND hWnd = NULL);
  explicit MemDC(const Size& size, HWND hWnd = NULL);
  ~MemDC();
 
  HDC GetHDC() const;
 
  bool IsInited() const;
  Size GetSize() const;
  bool Resize(const Size& size);
  void Reset();
 
private:
  bool Init(const Size& size);
 
private:
  MemDC(const MemDC&);
  MemDC& operator = (const MemDC&);
 
private:
  HWND      m_hWnd;
  HDC       m_hMemDC;
  HBITMAP   m_hNativeBmp;
  HBITMAP   m_hBmp;
  Size      m_reservedSize;
  Size      m_size;
};
 
#endif
// mem_dc.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#include "mem_dc.h"
#include <cassert>
 
namespace
{
  class Cleanup
  {
  public:
    Cleanup(HDC& hDisplayDC,
            HDC& hMemDC,
            HBITMAP& hNativeBmp,
            HBITMAP& hBmp)
      : m_hDisplayDC(hDisplayDC)
      , m_hMemDC(hMemDC)
      , m_hNativeBmp(hNativeBmp)
      , m_hBmp(hBmp)
      , m_needCleanup(true)
    {
    }
 
    virtual ~Cleanup()
    {
      ReleaseDC(NULL, m_hDisplayDC);
      m_hDisplayDC = NULL;
      if (m_needCleanup)
      {
        SelectObject(m_hMemDC, m_hNativeBmp);
        DeleteObject(m_hBmp);
        DeleteDC(m_hMemDC);
        m_hMemDC = NULL;
        m_hNativeBmp = NULL;
        m_hBmp = NULL;
      }
    }
 
    void Cancel()
    {
      m_needCleanup = false;
    }
 
  private:
    Cleanup(const Cleanup&);
    Cleanup& operator = (const Cleanup&);
 
  private:
    HDC&      m_hDisplayDC;
    HDC&      m_hMemDC;
    HBITMAP&  m_hNativeBmp;
    HBITMAP&  m_hBmp;
    bool      m_needCleanup;
  };
 
} // namespace
 
MemDC::MemDC(HWND hWnd)
  : m_hWnd(hWnd)
  , m_hMemDC(NULL)
  , m_hNativeBmp(NULL)
  , m_hBmp(NULL)
{
}
 
MemDC::MemDC(const Size& size, HWND hWnd)
  : m_hWnd(hWnd)
  , m_hMemDC(NULL)
  , m_hNativeBmp(NULL)
  , m_hBmp(NULL)
{
  Resize(size);
}
 
MemDC::~MemDC()
{
  Reset();
}
 
HDC MemDC::GetHDC() const
{
  return m_hMemDC;
}
 
bool MemDC::IsInited() const
{
  return NULL != m_hMemDC;
}
 
Size MemDC::GetSize() const
{
  return m_size;
}
 
bool MemDC::Resize(const Size& size)
{
  return Init(size);
}
 
bool MemDC::Init(const Size& size)
{
  assert(size.width > 0 && size.height > 0 && "Invalid argument");
 
  const bool needJustResize = IsInited()
        && m_reservedSize.width >= size.width
        && m_reservedSize.height >= size.height
        ;
 
  if (needJustResize)
  {
    m_size = size;
    return true;
  }
 
  HDC hDisplayDC = NULL;
  HDC hMemDC = NULL;
  HBITMAP hNativeBmp = NULL;
  HBITMAP hBmp = NULL;
 
  Cleanup cleanup(hDisplayDC, hMemDC, hNativeBmp, hBmp);
 
  hDisplayDC = GetDC(m_hWnd);
  if (hDisplayDC == NULL)
  {
    return false;
  }
 
  hMemDC = CreateCompatibleDC(hDisplayDC);
  if (hMemDC == NULL)
  {
    return false;
  }
 
  hBmp = CreateCompatibleBitmap(hDisplayDC, size.width, size.height);
  if (hBmp == NULL)
  {
    return false;
  }
 
  hNativeBmp = static_cast<HBITMAP>(SelectObject(hMemDC, hBmp));
  if (hNativeBmp == NULL)
  {
    return false;
  }
 
  cleanup.Cancel();
 
  Reset();
 
  m_hMemDC       = hMemDC;
  m_hNativeBmp   = hNativeBmp;
  m_hBmp         = hBmp;
  m_reservedSize = size;
  m_size         = size;
 
  return true;
}
 
void MemDC::Reset()
{
  m_size = Size();
  m_reservedSize = Size();
 
  if (!IsInited())
  {
    return;
  }
 
  const HBITMAP hBmp = static_cast<HBITMAP>(SelectObject(m_hMemDC, m_hNativeBmp));
  m_hNativeBmp = NULL;
  if (hBmp != m_hBmp)
  {
    assert(!"Native and selected bitmap are not the same.");
    // do something
  }
 
  BOOL fSuccess = DeleteObject(m_hBmp);
  m_hBmp = NULL;
  if (!fSuccess)
  {
    assert(!"Failed to delete bitmap.");
    // do something
  }
 
  fSuccess = DeleteDC(m_hMemDC);
  m_hMemDC = NULL;
  if (FALSE == fSuccess)
  {
    assert(!"Failed to delete DC");
    // do something
  }
}

common.h - не обязателен и можно без него и того, что внутри него. это выдернуто из проекта и специально
удалять что-либо мне не хочется.

ну используется примерно так:

C++
1
2
3
4
5
6
7
8
9
MemDC memDC(GetDC(NULL), Size(100, 100)); // создание в памяти hdc
HDC hMemDC = memDC.getHDC();
Rectangle(hMemDC, 0, 0, 50, 50); // рисуем в hMemDC
... // тут тоже всякое рисование
 
HDC hWndDC = ...; // это мы откудато берем контекст для окна, чтобы вывести в него все то, что нарисовали в hMemDC
 
// копируем  в hWndDC то, что у нас в hMemDC
BitBlt(hWndDC, 0, 0, 100, 100, hMemDC, 0, 0);
 
Текущее время: 22:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru