#include "resource.h"
#include <windows.h>
#include <TCHAR.H>
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam);
HINSTANCE hInst;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS WndClass;
hInst = hInstance;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = WndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = _T("Window Class Name");
Regi ster(금지어) Class(&WndClass);
hwnd = CreateWindow(_T("Window Class Name"),
_T("Window Title Name"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
void Animation(int xPos, int yPos, HDC hdc)
{
HDC memdc;
HBITMAP RunBit+, hBit, oldBit, Mask+;
static int count;
int i;
count++;
count = count % 10;
RunBit[0] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R1)); // for (i = 0; i < 10; i++)
RunBit[1] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R2)); // RunBit[i] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R1+i));
RunBit[2] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R3)); //
RunBit[3] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R4)); //
RunBit[4] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R5)); //
RunBit[5] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R5)); //
RunBit[6] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R7)); //
RunBit[7] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R8)); //
RunBit[8] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R9)); //
RunBit[9] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R10)); //
Mask[0] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M1)); // for (i = 0; i < 10; i++)
Mask[1] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M2)); // Mask[i] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M1+i));
Mask[2] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M3));
Mask[3] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M4));
Mask[4] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M5));
Mask[5] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M6));
Mask[6] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M7));
Mask[7] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M8));
Mask[8] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M9));
Mask[9] = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_M10));
memdc = CreateCompatibleDC(hdc);
hBit = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP5_6)); // 배경
oldBit = (HBITMAP)SelectObject(memdc, hBit);
BitBlt(hdc, 0, 0, 819, 614, memdc, 0, 0, SRCCOPY);
SelectObject(memdc, Mask[count]);
BitBlt(hdc, xPos, yPos, 180, 240, memdc, 0, 0, SRCAND);
SelectObject(memdc, RunBit[count]);
BitBlt(hdc, xPos, yPos, 180, 240, memdc, 0, 0, SRCPAINT);
SelectObject(memdc, oldBit);
for (i = 0; i < 10; i++)
{
DeleteObject(RunBit[i]);
DeleteObject(Mask[i]);
}
DeleteDC(memdc);
DeleteObject(hBit);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM IParam)
{
HDC hdc, memdc;
HBITMAP RunBit+, hBit, oldBit, Mask+;
PAINTSTRUCT ps;
static HBITMAP cBitmap, mBitmap;
HBITMAP oldBitmap;
static POINT mouse, cat;
static BOOL Drag;
static int stepX, stepY, count;
switch (iMsg) {
case WM_CREATE:
cBitmap = (HBITMAP)LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R1)); // 쫓아가는 거
mBitmap = (HBITMAP)LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_R1)); // 마우스 커서
cat.x = 100; cat.y = 100;
Drag = FALSE;
count = 0;
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
memdc = CreateCompatibleDC(hdc);
hBit = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP5_6)); // 배경
oldBit = (HBITMAP)SelectObject(memdc, hBit);
BitBlt(hdc, 0, 0, 819, 614, memdc, 0, 0, SRCCOPY);
SelectObject(memdc, Mask[count]);
oldBitmap = (HBITMAP)SelectObject(memdc, cBitmap);
BitBlt(hdc, cat.x, cat.y, 67, 47, memdc, 0, 0, SRCCOPY);
if (Drag)
{
SelectObject(memdc, mBitmap);
BitBlt(hdc, mouse.x, mouse.y, 68, 49, memdc, 0, 0, SRCCOPY);
}
SelectObject(memdc, oldBitmap);
DeleteDC(memdc);
EndPaint(hwnd, &ps);
break;
case WM_LBUTTONDOWN:
mouse.x = LOWORD(IParam);
mouse.y = HIWORD(IParam);
Drag = TRUE;
stepX = (mouse.x - cat.x) / 10;
stepY = (mouse.y - cat.y) / 10;
InvalidateRgn(hwnd, NULL, TRUE);
count = 0;
SetTimer(hwnd, 1, 200, NULL);
break;
case WM_LBUTTONUP:
Drag = FALSE;
KillTimer(hwnd, 1);
InvalidateRgn(hwnd, NULL, TRUE);
break;
case WM_MOUSEMOVE:
if (!Drag) break;
mouse.x = LOWORD(IParam);
mouse.y = HIWORD(IParam);
stepX = (mouse.x - cat.x) / 10;
stepY = (mouse.y - cat.y) / 10;
count = 0;
InvalidateRgn(hwnd, NULL, TRUE);
break;
case WM_TIMER:
count++;
cat.x += stepX;
cat.y += stepY;
InvalidateRgn(hwnd, NULL, TRUE);
if (count == 10)
{
stepX = 0;
stepY = 0;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hwnd, iMsg, wParam, IParam));
}
프로그래밍 이제 막 배우기 시작해서
이번에 비트맵 관련해서 배우고 좌클릭 하면 애니메이션 출력되면서 쫓아오고 좌클릭 때면 멈추는거 과제로 받았는데
배경이랑 쫓아오는거 까지는 인터넷에서 어떻게든 뒤져서 하는 방법 알아냈는데
이게 클릭하면 애니메이션 재생 시키는걸 못하겠음.. 이미지도 그냥 검은색 네모 밖에 안뜨고..
진짜 어디서 부터 해야할지 감도 안잡혀서 꽉 막혔는데 좀 알려줄 수 있냐..
chatgpt한테 물어보셈
그럴까
구와악
어우 가독성