본문 바로가기

C++/WinAPI8

[WinAPI] sound PlaySound() 가장 기본적인 sound 함수 #include #pragma comment(lib,"winmm.lib")를 필요로 한다. #include #pragma comment(lib,"winmm.lib") BOOL PlaySound( LPCTSTR pszSound, HMODULE hmod, DWORD fdwSound ); PlaySound(L"filepath.wav", 0, SND_FILENAME | SND_ASYNC); SND_ASYNC 사운드는 비동기적으로 재생되며 PlaySound 는 사운드가 시작된 직후에 반환됩니다. 비동기적으로 재생되는 파형 사운드를 종료하려면 pszSound 를 NULL 로 설정하여 PlaySound 를 호출합니다 . SND_FILENAME pszSound 매개 .. 2022. 12. 17.
[WinAPI] 키 입력 관리 게임 로직의 GetAsyncKeyState()의 문제점 동일 프레임에서 먼저 실생하는 로직에서 입력을 받아 true가 나오고 뒷부분의 처리엔 키를 누르지 않아 false가 나오는 등의 동기화 문제가 생길 수 있다. KeyDown, KeyHold, KeyUp을 판단하려면 추가적인 코드를 써야 판단이 가능하고 키 입력 판단 할 때마다 코드를 적어야 하니까 불편함 비동기적으로 처리되어 윈도우가 포커싱되어 있지 않아도 동작한다. (최소화 상태에서도 동작함) KeyManager를 따로 생성하여 관리하여 위의 문제점들을 해결한다. KeyManager에서 키 입력을 판단하고 그 값을 통해 동작하도록 한다. 키값에 해당하는 배열을 매칭해서 Down, Hold, UP 쉽게 판단 가능 포커싱 x 상태의 경우도 일괄로 처리.. 2022. 11. 15.
[WinAPI] DC, BITMAP, 더블버퍼링 더블버퍼링 싱글 버퍼링으로 화면을 그릴 경우 화면을 다 그리기 전까진 다음 그림을 그릴 수 없기 때문에 깜빡이는 문제점 이 발생합니다. 이 문제는 (화면출력 -> 초기화 -> 화면출력)를 반복하며 초기화 부분에 순간을 포착해서 생김 위에서 발생하는 깜빡임 문제를 해결하기 위해 사용되는 기법 버퍼 2개로 렌더링 처리를 하는 것 입니다. 한쪽은 보여주고 한쪽은 화면을 그리고 화면을 다 그렸다면 보여주고 반대편은 다시 그리고 이 동작을 반복한다면 깜박임 문제를 해결할 수 있습니다. DC 출력에 필요한 모든 정보를 가지는 구조체, 모든 출력함수는 DC를 참조하여 출력한다. 출력을 하기 위해 DC를 사용해야한다. HDC hdc = GetDC(hwnd); GetDC()로 DC 받아오고 ReleaseDC(hwnd, .. 2022. 11. 15.
[WinAPI] 윈도우 크기 지정 클라이언트 영역 실제 컨텐츠가 동작하는 범위를 가리킨다. SetWindowPos() HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags 위의 매개변수를 가지고 있으며 보통 SetWindowPos()를 이용해서 윈도우의 위치와 화면의 크기를 변환시킨다. cx, cy값으로 1280, 720을 줬을 경우 비 클라이언트 영역의 크기까지 합쳐서 크기를 변환시킨다. AdjustWindowRect() LPRECT lpRect, DWORD dwStyle, BOOL bMenu 위의 매개변수를 가지며 AdjustWindowRect()를 호출하면 첫번째 매개변수로 주어진 화면의 크기만큼 클라이언트 영역이 될 수 있는 크기를 받아 올 수 있다... 2022. 11. 15.
[WinAPI] 그리기 좌표 좌표를 기준으로 그리게 됨 좌표 x,y 좌표에서의 1은 1픽셀을 의미한다. case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // 렌더링 관련 핸들 받아옴 // DC가 그릴 장소 : hWnd // DC의 기본 펜 색상 : 검정색 // DC의 기본 브러쉬 색상 : 흰색 HPEN hRedPen = CreatePen(PS_SOLID, 1, RGB(225, 0, 0)); // 빨간펜 생성 HBRUSH hGrayBrush = (HBRUSH)GetStockObject(GRAY_BRUSH); // 시스템 제공 회색브러쉬 받아옴 HPEN hDefaultPen = (HPEN)SelectObject(hdc, hRedPen); // 빨간펜 장착, 기존.. 2022. 11. 13.
[WinAPI] Win32API 기본 매개변수의 자료형 앞에 _In_, _In_opt_, _In_ 같은건 SAL 주석이다. SAL주석 - SAL 주석을 사용하면 함수를 사용하는 개발자가 함수를 사용하는 방법을 더 잘 이해할 수 있도록 함수를 더 자세히 설명할 수 있습니다. - 함수의 속성 및 구현에 대한 명확성을 제공 wWinMain 매개변수 _IN_ HINSTANCE hInstance 가상 메모리 안 실행 된 프로세스의 시작 주소 _IN_opt_ HINSTANCE hPrevInstance 가상 메모리 사용 이전에 사용한 것으로 현재는 가상 메모리를 사용하기 때문에 거의 사용하지 않는다. 과거엔 프로세스의 실행 주소를 사용하여 관리할 필요가 있었기에 사용했었던 것 _IN_ LPWSTR lpCmdLine 명령프롬프트로 실행 시 문자열을 주면 .. 2022. 11. 13.