질문과 답변

윈도우즈 API정복 1권 콜백함수(108페이지) 질문있습니다. 날짜:2022-5-15 2:34:37 조회수:101
작성자 : 황금가물치
포인트 : 30
가입일 : 2022-05-06 15:33:18
방문횟수 : 28
글 4개, 댓글 5개
소개 : 안녕하세요. 윈도우즈api를 공부하기위하여 가입했습니다. 잘 부탁드립니다.
작성글 보기
쪽지 보내기
예제 콜백함수 소스코드 따라하면서 하는데 오류가 납니다. 비주얼스튜디오 2022사용 중입니다.
RGB부분에서 오류와 SetTimer함수에서 오류가 납니다. 확인부탁드립니다.
제가 작성한 파일 올려드립니다.
확인부탁드립니다.



#include<Windows.h>
#include<WinUser.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("Callback");

int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lnCmdLine, _In_ int nCmdShow) {
    
    HWND hWnd;
    MSG message;
    WNDCLASS WndClass;
    g_hInst = hInstance;

    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hInstance = hInstance;
    WndClass.lpfnWndProc = WndProc;
    WndClass.lpszClassName = lpszClass;
    WndClass.lpszMenuName = NULL;
    WndClass.style = CS_HREDRAW | CS_VREDRAW;

    RegisterClass(&WndClass);

    hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW, 600, 300, 500, 500, NULL, (HMENU)NULL, hInstance, NULL);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    while (GetMessage(&message, NULL, 0, 0)) {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }
    return((int)message.wParam);

}

void CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTime) {
    HDC hdc;
    int i;
    hdc = GetDC(hWnd);
    for (i = 0; i < 1000; i++) {
        SetPixel(hdc, rand() % 500, rand() % 400, RGB(rand() % 256, rand() % 256, , rand() % 256)); // 오류발생
    }
    ReleaseDC(hWnd, hdc);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {

    HDC hdc;

    switch (iMessage) {
    case WM_CREATE:
        SetTimer(hWnd, 1, 100, TimerProc); //오류발생
        return(0);
    case WM_LBUTTONDOWN:
        hdc = GetDC(hWnd);
        Ellipse(hdc, LOWORD(lParam) - 10, HIWORD(lParam) - 10, LOWORD(lParam) + 10, HIWORD(lParam) + 10);
        ReleaseDC(hWnd, hdc);
        return(0);
    case WM_DESTROY:
        KillTimer(hWnd, 1);
        PostQuitMessage(0);
        return(0);
    }

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



김민수
첨부 파일 220515-143431_Ex29_CallBack.zip(3650 byte). 다운로드 : 4

목록보기 삭제 수정 신고 스크랩

작가K 5월15일 10:35:27  

RGB(rand() % 256, rand() % 256, , rand() % 256));

이 줄에서 중간에 콤마가 2개입니다.
하나를 지우시면 잘 컴파일 됩니다.

황금가물치 5월15일 10:44:53  

void CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)로 수정하니 되네요.
비주얼 스튜디오 2022에서 UINT idEvent가 아닌 UINT_PTR idEvent로 변경된 것인지요?

작가K 5월16일 12:01:34  

콤마가 두 개여서 발생한 에러이지 원형과는 상관 없습니다.
UINT_PTR은 64비트로 컴파일할 때 64비트 정수가 되는 중간 타입이며 32비트로 컴파일하면 UINT와 같습니다.

황금가물치 5월16일 10:24:27  

현재 비주얼스튜디오 2022이며, 64비트로 컴파일하고 있는데 그럼 UINT가 아닌 UINT_PTR로 쓰는것이 맞는지요?


로그인하셔야 댓글을 달 수 있습니다.