```C++
#define X_COUNT 19
#define Y_COUNT 19
#define START_X 50
#define START_Y 50
#define INTERVAL 26
#define HALF_INTERVAL INTERVAL / 2
#define XPOS(x) (START_X + (x) * INTERVAL)
#define YPOS(y) (START_Y + (y) * INTERVAL)
unsigned char g_dol[Y_COUNT][X_COUNT];
unsigned char g_step;
void OnPaint(HWND ah_wnd)
{
PAINTSTRUCT ps;
HDC h_dc = BeginPaint(ah_wnd, &ps);
for (int x = 0; x < X_COUNT; x++) {
MoveToEx(h_dc, XPOS(x), YPOS(0), NULL);
LineTo(h_dc, XPOS(x), YPOS(Y_COUNT - 1));
}
for (int y = 0; y < Y_COUNT; y++) {
MoveToEx(h_dc, XPOS(0), YPOS(y), NULL);
LineTo(h_dc, XPOS(X_COUNT - 1), YPOS(y));
}
for (int y = 0; y < Y_COUNT; y++) {
for (int x = 0; x < X_COUNT; x++) {
if (g_dol[y][x] > 0) {
if (g_dol[y][x] == 1)SelectObject(h_dc, GetStockBrush(BLACK_BRUSH));
else SelectObject(h_dc, GetStockBrush(WHITE_BRUSH));
Ellipse(h_dc, XPOS(x) - HALF_INTERVAL, YPOS(y) - HALF_INTERVAL
, XPOS(x) + HALF_INTERVAL, YPOS(y) + HALF_INTERVAL);
}
}
}
EndPaint(ah_wnd, &ps);
}
void OnLButtonDown(HWND ah_wnd, int a_x, int a_y)
{
if (a_x > (XPOS(0) - HALF_INTERVAL) && a_y > (YPOS(0) - HALF_INTERVAL)
&& a_x < (XPOS(X_COUNT - 1) + HALF_INTERVAL)
&& a_y < (YPOS(Y_COUNT - 1) + HALF_INTERVAL)){
int x = (a_x - START_X + HALF_INTERVAL) / INTERVAL;
int y = (a_y - START_Y + HALF_INTERVAL) / INTERVAL;
if (g_dol[y][x] == 0) {
g_dol[y][x] = g_step + 1;
g_step = !g_step;
}
InvalidateRect(ah_wnd,NULL,TRUE);
}
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_PAINT) {
OnPaint(hWnd);
return 0;
}
else if (uMsg == WM_LBUTTONDOWN) {
int x = LOWORD(lParam);
int y = HIWORD(lParam);
OnLButtonDown(hWnd, x, y);
}
else if (uMsg == WM_DESTROY)PostQuitMessage(0);
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
```
'MFC' 카테고리의 다른 글
Brush Handle값 받아서 테두리없는 사각형패턴 (0) | 2020.09.09 |
---|---|
Pen Handle값 받아서 Pen이나 Brush 다르게 그리는 것 (0) | 2020.09.09 |
BitBlt,WM_CLOSE (0) | 2020.09.07 |
마우스로 사각형 움직이기 (0) | 2020.09.06 |
선그리기 (0) | 2020.09.05 |
댓글