TNB Library
TnbDummyAnimater.h
[詳解]
1#pragma once
11#include "TnbBitmapImage.h"
12
13
14
15//TNB Library
16namespace TNB
17{
18
19
20
32{
33public:
34
37 {
38 m_size.cx = 0;
39 m_size.cy = 0;
40 }
41
49 void NewImage(size_t count, int cx, int cy, int ph = 10)
50 {
51 m_size.cx = cx;
52 m_size.cy = cy;
53 //
54 m_image.Set(m_size.cx, m_size.cy, RGB(0, 0, 0));
55 m_blackImage.Set(m_size.cx, m_size.cy);
56 m_blackImage.GradationFill(RGB(120, 0, 0), RGB(0, 0, 120), true);
57 m_pieces.Resize(count);
58 ::srand(::GetTickCount());
59 loop ( i, m_pieces.GetSize() )
60 {
61 m_pieces[i].Init(m_size, ph);
62 }
63 m_Remake();
64 }
65
70 void Next(void)
71 {
72 loop ( i, m_pieces.GetSize() )
73 {
74 m_pieces[i].Next(m_size);
75 }
76 m_Remake();
77 }
78
84 const CBitmapImage& Get(void) const
85 {
86 return m_image;
87 }
88
89
90private:
91 // 画像再描画
92 void m_Remake(void)
93 {
94 HDC dc = m_image.GetDC();
95 m_blackImage.BitBlt(dc, 0, 0);
96 loop ( i, m_pieces.GetSize() )
97 {
98 const TPiece& P = m_pieces[i];
99 HBRUSH b = ::CreateSolidBrush(P.color);
100// RECT rc = { P.pos.x, P.pos.y, P.pos.x + P.size, P.pos.y + P.size };
101// ::FillRect(dc, &rc, b);
102 HGDIOBJ old = ::SelectObject(dc, b);
103 ::RoundRect(dc, P.pos.x, P.pos.y, P.pos.x + P.size, P.pos.y + P.size, P.size, P.size);
104 ::SelectObject(dc, old);
105 _DeleteObject(b);
106 }
107 m_image.ReleaseDC();
108 }
110 struct TPiece
111 {
112 POINT pos;
113 POINT vector;
114 COLORREF color;
115 LONG size;
116 void Init(const SIZE& sz, int sizeMax = 4)
117 {
118 sizeMax /= 2;
119 size = (::rand() % sizeMax) + sizeMax;
120 pos.x = ::rand() % (sz.cx - size);
121 pos.y = ::rand() % (sz.cy - size);
122 color = RGB(::rand() & 0xFF, ::rand() & 0xFF, ::rand() & 0xFF);
123 vector.x = ((::rand() % 7) + 1) * ((::rand() & 1) == 0 ? 1 : -1);
124 vector.y = ((::rand() % 7) + 1) * ((::rand() & 1) == 0 ? 1 : -1);
125 }
126 void Next(const SIZE& sz)
127 {
128 pos.x += vector.x;
129 if ( pos.x < 0 )
130 {
131 pos.x = -pos.x;
132 vector.x = -vector.x;
133 }
134 else if ( pos.x > sz.cx - size )
135 {
136 pos.x -= (pos.x - (sz.cx - size)) * 2;
137 vector.x = -vector.x;
138 }
139 pos.y += vector.y;
140 if ( pos.y < 0 )
141 {
142 pos.y = -pos.y;
143 vector.y = -vector.y;
144 }
145 else if ( pos.y > sz.cy - size)
146 {
147 pos.y -= (pos.y - (sz.cy - size)) * 2;
148 vector.y = -vector.y;
149 }
150 }
151
152 };
153 CWorkMemT<TPiece> m_pieces;
154 SIZE m_size;
155 CBitmapImage m_blackImage;
156 CBitmapImage m_image;
157};
158
159
160
161};
ビットマップイメージ管理関係のヘッダ
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
ビットマップイメージ管理クラス
bool GradationFill(COLORREF color1, COLORREF color2, EDirection direction, const RECT *pRect=NULL)
[処理] グラデーション描画.
bool BitBlt(HDC hdc, int x, int y, DWORD raster=SRCCOPY) const
[表示] イメージ描画.
HDC GetDC(void)
[取得]デバイスコンテキストハンドル取得.
bool Set(int cx, int cy, COLORREF color=CLR_INVALID)
[設定] イメージ設定.
bool ReleaseDC(void)
[設定] デバイスコンテキストハンドル返却.
ダミーアニメーター.
CDummyAnimater(void)
コンストラクタ
void NewImage(size_t count, int cx, int cy, int ph=10)
[作成] 新画像作成.
void Next(void)
[作成] 次画像作成.
const CBitmapImage & Get(void) const
[取得] 取得.
size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbDef.h:665
void Resize(size_t l)
[設定] サイズ再設定
Definition: TnbDef.h:672
TNB Library
Definition: TnbDoxyTitle.txt:2