์์ :)
https://github.com/eazuooz/WindowAPI/commit/a00f3fe492d614384f7550671b84e0e137e2698b
Resources Pen Brush · eazuooz/WindowAPI@a00f3fe
Show file tree Showing 15 changed files with 232 additions and 27 deletions.
github.com
WinAPI์์ Pen๊ณผ Brush๋ฅผ ์ฌ์ฉํ๊ณ ํญ์ ์๋ hdc์ ์ธํ ๋์๋ Old๊ฐ์ฒด๋ก ๋ค์ ๋ฐ๊ฟ์ฃผ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์๋ค.
๊ทธ๋์ Pen Brush ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์๋ฉธ์์์ ์๋์ผ๋ก
์ด์ ๊ฐ์ฒด๋ก ์ ํํด์ฃผ๋ ์์ ์ ์ถ๊ฐ ํด์ฃผ์๋ค.
struct Pen
{
private:
HDC mHdc;
HPEN mOldPen;
public:
Pen(HDC hdc, HPEN pen)
: mHdc(hdc)
, mOldPen(NULL)
{
mOldPen = (HPEN)SelectObject(mHdc, pen);
}
~Pen()
{
SelectObject(mHdc, mOldPen);
}
};
struct Brush
{
private:
HDC mHdc;
HBRUSH mOldBrush;
public:
Brush(HDC hdc, HBRUSH brush)
: mHdc(hdc)
, mOldBrush(NULL)
{
mOldBrush = (HBRUSH)SelectObject(mHdc, brush);
}
~Brush()
{
SelectObject(mHdc, mOldBrush);
}
};
์ฌ์ฉ ํ ๋ ์์ผ๋ก๋ ์ด๋ ๊ฒ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
void Missile::Render(HDC _dc)
{
Vector2 vPos = GetPos();
Vector2 vScale = GetScale();
Brush b(_dc, Application::GetInstance().GetBrush(BRUSH_COLOR::GRAY));
Pen p(_dc, Application::GetInstance().GetPen(PEN_COLOR::RED));
Ellipse(_dc
, (int)vPos.x - vScale.x / 2.f
, (int)vPos.y - vScale.y / 2.f
, (int)vPos.x + vScale.x / 2.f
, (int)vPos.y + vScale.y / 2.f);
}
๋ํ ๋ฐฐ๊ฒฝ์ด ํฐ์์ผ๋ก ๋๋ฌด ๋ฐ์์ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ค์ด ์ ๋ณด์ด์ง ์๋๋ค.
๊ทธ๋์ Pen, Brush ํด๋์ค๋ฅผ ์ด์ฉํด์ ๋ฐฐ๊ฒฝ์์ ๋ฐ๊พธ์ด ์ฃผ์๋ค.
void Application::Tick()
{
// ์
๋ฐ์ดํธ
Time::GetInstance().Tick();
InputManager::GetInstance().Tick();
SceneManager::GetInstance().Tick();
// Clear
HBRUSH hPrevBrush = (HBRUSH)SelectObject(mWindowData.backBuffer, mBrushes[(UINT)BRUSH_COLOR::GRAY]);
Rectangle(mWindowData.backBuffer, -1, -1, mWindowData.width + 1, mWindowData.height + 1);
SelectObject(mWindowData.backBuffer, hPrevBrush);
// ๋ ๋๋ง
SceneManager::GetInstance().Render(mWindowData.backBuffer);
Time::GetInstance().Render(mWindowData.backBuffer);
// BitBlt ํจ์๋ DC ๊ฐ์ ๊ทธ๋ฆผ์ ๋ณต์ฌํ๋ ํจ์์
๋๋ค.
BitBlt(mWindowData.hdc, 0, 0, mWindowData.width, mWindowData.height
, mWindowData.backBuffer, 0, 0, SRCCOPY);
}
๊ฒ์ ์์ง์ ๋ํ์ ์ผ๋ก ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์์ ์ด๋
๊ฒ์ ์ ์ ๋ฐ ๋ ๋ฒจ ๋์์ธ์์์ ์์ [ํธ์ง] ์์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ฐ์ ํ์ํ ๊ฐ์ข ์ฐธ๊ณ ์๋ฃ๋ ์ด๋์ ๋ ํ๋กํ ํ์ ์ด์ ์์ฑ๋ ์์ ๋ฌผ[1] ๋ฑ์ ์นญํ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ (๊ธฐ์ ์ด๋ ์ ์ฌ๋ ฅ์ ๊ฐ์ง) ์ธ์ฌ ๋ฑ์ ์นญํ๊ธฐ๋ ํ๋ค. [1] ์ผ๋ถ์์ ๋ฆฌ์์ค(์์)๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
์๋ฅผ๋ค์ด ์บ๋ฆญํฐ ์ด๋ฏธ์ง, ๊ณต๊ฒฉ ์ฌ์ด๋ ๋ฑ๋ฑ์ด ์์ ์ด ๋๋ค ์ด๋ฌํ ์์ ๋ค์ ๋ฆฌ์์ค๋ผ๊ณ ๋ ๋ถ๋ฅด๋๋ฐ
์ด๋ฐ ๋ฆฌ์์ค๋ค์ ๋ก๋ํ ์ ์๋๋ก ๋์์ฃผ๋ ํด๋์ค๋ฅผ ์ค๊ณํ์ฌ์ผ ํ๋ค.
๋ํ ๋ฆฌ์์ค๋ค์ ํ๋ฒ ๋ก๋ํ๋ฉด ์ฌ๋ก๋ ํ ํ์ ์์ด ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ผ๋ฉด ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค Resources๋ std::map์ ์ด์ฉํด์ ๊ด๋ฆฌํ ๊ฒ ์ด๋ค.
class Resource;
class Resources
{
SINGLE(Resources)
public:
bool Initialize();
private:
std::map<std::wstring, Resource*> mResources;
};
'๐ Development Study > ๐ป Win32API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Component (0) | 2022.09.26 |
---|---|
Path, Resource Load (1) | 2022.09.22 |
Double Buffering (0) | 2022.09.19 |
Input (0) | 2022.09.15 |
Scene, Object, Time (0) | 2022.09.15 |
๋๊ธ