win32 메뉴에 타이머함수를 넣었는데 작동을 하지 않습니다.
조회수 484회
#include"resource1.h"
#include <windows.h>
#include<iostream>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
HBITMAP hBmpAir, hBmpBack;
HINSTANCE hInst;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
int nShowCmd)
{
HWND hWnd;
MSG mSg;
char szTitle[] = "My First Airplane Game";
char szClass[] = "Class";
hInst = hInstance;
WNDCLASSEX WndEx;
WndEx.cbSize = sizeof(WndEx);
WndEx.style = NULL;
WndEx.lpfnWndProc = WndProc;
WndEx.cbClsExtra = 0;
WndEx.cbWndExtra = 0;
WndEx.hInstance = hInstance;
WndEx.hIcon = LoadIcon(NULL, "");
WndEx.hCursor = LoadCursor(NULL, IDC_ARROW);
WndEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndEx.lpszMenuName = "IDR_MENU";
WndEx.lpszClassName = szClass;
WndEx.hIconSm = LoadIcon(hInstance, "");
RegisterClassEx(&WndEx);
hWnd = CreateWindowEx(NULL, szClass, szTitle,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
320 * 2, 240 * 2, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);
hBmpAir = LoadBitmap(hInstance, "IDB_Air");
hBmpBack = LoadBitmap(hInstance, "IDB_Back");
while (TRUE)
{
if (PeekMessage(&mSg, NULL, 0, 0, PM_NOREMOVE))
{
if (!GetMessage(&mSg, NULL, 0, 0))
break;
TranslateMessage(&mSg);
DispatchMessage(&mSg);
}
}
return mSg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
char szText[100];
HPEN hPen;
PAINTSTRUCT ps;
static POINT pOint;
static BOOL bSw = TRUE;
static HWND hButtStart, hButtExit, hButtStop;
HDC hDC, hMemDC, hMemDC1;
static int aX = 0, aY = 0;
static int bX = 0, bY = 321;
switch (uMsg)
{
case WM_COMMAND:
switch (LOWORD(wParam)) {
case ID_ACTION_START:
SetTimer(hWnd, 1, 100, NULL);
break;
case ID_ACTION_STOP:
KillTimer(hWnd, 1);
break;
}
return FALSE;
case WM_TIMER:
aX = aX + 5;
if (aX < 0)aX = 640;
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
bX -= 2;
if (bX > 640)bX = 0;
return FALSE;
case WM_KEYDOWN:
switch (LOWORD(wParam))
{
case VK_UP:
aY = aY - 5; //aY-=3;
if (aY < 0)aY = 480;
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
break;
case VK_DOWN:
aY = aY + 5;
if (aY > 480)aY = 0;
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
break;
case VK_LEFT:
aX = aX - 5;
if (aX < 0)aX = 640;
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
bX += 2;
if (bX > 640)bX = 0;
break;
case VK_RIGHT:
aX = aX + 5;
if (aX > 640)aX = 0;
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
bX -= 2;
if (bX < 0)bX = 640;
break;
}
return FALSE;
case WM_PAINT:
hDC = GetDC(hWnd);
hMemDC = CreateCompatibleDC(hDC);
SelectObject(hMemDC, hBmpAir);
BitBlt(hDC, aX, aY, 127, 37, hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hBmpBack);
BitBlt(hDC, bX, bY, 640, 150, hMemDC, 0, 0, SRCCOPY);
BitBlt(hDC, bX - 640, bY, 640, 150, hMemDC, 0, 0, SRCCOPY);
ReleaseDC(hWnd, hDC);
DeleteDC(hMemDC);
return FALSE;
case WM_DESTROY:
PostQuitMessage(0);
return FALSE;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
전체 코드를 올립니다. 이런식으로 작성을 했는데 메뉴에서 Start를 눌러봐도 작동을 하지 않습니다. 뭐가 문제인지 잘 모르겠습니다. 빌드가 실패하지는 않는데 타이머는 작동을 안하네요...
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력