win32_step_10 - 8BitsCoding/RobotMentor GitHub Wiki


GetStockObject : ์ž์ฃผ์‚ฌ์šฉํ•˜๋Š” Object์— ๋Œ€ํ•ด์„œ๋Š” Windows์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•œ๋‹ค.

CreateSolidBrush, CreateHatchBrush : ๋‚ด๊ฐ€ ๋งŒ๋“œ๋Š” Object

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if (uMsg == WM_DESTROY) PostQuitMessage(0);
	else if (uMsg == WM_LBUTTONDOWN) {
		HDC h_dc = GetDC(hWnd);

		HGDIOBJ h_old_brush = SelectObject(h_dc, GetStockObject(GRAY_BRUSH));
		Rectangle(h_dc, 20, 20, 80, 80);
		SelectObject(h_dc, GetStockObject(NULL_BRUSH));
		Rectangle(h_dc, 60, 60, 120, 120);
		SelectObject(h_dc, h_old_brush);

		ReleaseDC(hWnd, h_dc);
	}

	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

HDC h_dc = GetDC(hWnd);

HBRUSH h_blue_brush = CreateSolidBrush(RGB(0, 0, 255));
HGDIOBJ h_old_brush = SelectObject(h_dc, h_blue_brush);
HPEN h_null_pen = CreatePen(PS_NULL, 0, RGB(0, 0, 0));
HGDIOBJ h_old_pen = SelectObject(h_dc, h_null_pen);
Rectangle(h_dc, 10, 10, 100, 100);
SelectObject(h_dc, h_old_brush);
SelectObject(h_dc, h_old_pen);
DeleteObject(h_blue_brush);
DeleteObject(h_null_pen);

ReleaseDC(hWnd, h_dc);

์ฐธ๊ณ ๋กœ FillRect ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๋จ.(ํ™ˆํŽ˜์ด์ง€ ์ฐธ์กฐ)

HDC h_dc = GetDC(hWnd);

HBRUSH h_blue_brush = CreateSolidBrush(RGB(0, 0, 255));

RECT r = {10, 10, 100, 100};
FillRect(h_dc, &r, h_blue,brush);

DeleteObject(h_blue_brush);
ReleaseDC(hWnd, h_dc);

HDC h_dc = GetDC(hWnd);
HBRUSH h_brush;

// Brush์˜ ์†์„ฑ์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  Brush ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์†์„ฑ ๋ช…์นญ์„ ์ง€์ •ํ•œ๋‹ค.
const char *p_style_string[6] = { "HS_BDIAGONAL", "HS_CROSS", "HS_DIAGCROSS", "HS_FDIAGONAL", "HS_HORIZONTAL", "HS_VERTICAL" };
// Brush์˜ ์†์„ฑ์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  Brush ๊ฐ์ฒด์˜ ์†์„ฑ ์ธ์ž ๊ฐ’๋“ค์„ ์ง€์ •ํ•œ๋‹ค.
int brush_style[6] = { HS_BDIAGONAL, HS_CROSS, HS_DIAGCROSS, HS_FDIAGONAL, HS_HORIZONTAL, HS_VERTICAL };
// ์„ ์˜ ๊ฒฝ์šฐ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์˜ ์ƒ‰์ƒ์ด ๋ฐฐ๊ฒฝ์ƒ‰์œผ๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋„๋ก ๋ฐฐ๊ฒฝ์ƒ‰์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ํ•˜๋Š” ์˜ต์…˜์„ ์„ค์ •ํ•œ๋‹ค.
SetBkMode(h_dc, TRANSPARENT);
// ํ˜„์žฌ DC์— ์„ค์ •๋œ Brush ํ•ธ๋“ค ๊ฐ’์„ ์–ป๋Š”๋‹ค.
HGDIOBJ h_old_brush = GetCurrentObject(h_dc, OBJ_BRUSH);


// ์œ„์—์„œ ์ง€์ •ํ•œ 6๊ฐ€์ง€์˜ ์†์„ฑ๋ณ„๋กœ ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆฐ๋‹ค. 
for (int i = 0; i < 6; i++) {
    // Brush์˜ ์†์„ฑ๋ณ„ ๋ช…์นญ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.
    TextOutA(h_dc, 10, 10 + i * 30, p_style_string[i], strlen(p_style_string[i]));
    // ์ €์žฅํ•œ Brush์˜ ์†์„ฑ๊ฐ’์œผ๋กœ ํŒŒ๋ž€์ƒ‰ Brush ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    h_brush = CreateHatchBrush(brush_style[i], RGB(0, 0, 255));
    // DC์— ์ƒ์„ฑํ•œ Brush ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
    SelectObject(h_dc, h_brush);

    Rectangle(h_dc, 200, 5 + i * 30, 400, 30 + i * 30);  // ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

    // ์‚ฌ์šฉ์ด ๋๋‚œ Brush ๊ฐ์ฒด๋Š” ์ œ๊ฑฐํ•œ๋‹ค.
    DeleteObject(h_brush);
}
// ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ Brush ๊ฐ์ฒด๋กœ ๋ณต๊ตฌํ•œ๋‹ค.
SelectObject(h_dc, h_old_brush);