본문 바로가기

프로그래밍/API32

API-GetAsyncKeyState( 키보드 입력함수 ) DX에서 키보드 입력을 받게 될때, API함수를 사용해 보았는데, 자꾸 까먹게 되어 따로 포스팅을 한다. 키보드 입력을 처리 하는 함수로는 GetAsyncKeyState 함수와 GetKeyState가 존재 하는데 GetAsyncKeyState에 대해서 간단하게 필요한 부분만 빠르게 포스팅하도록 하자. 주로 GetAsyncKeyState를 사용할 때 함수만 딸랑 쓰는게 아니라 추가적인 연산을 해주게 되는데, if( GetAsyncKeyState( VK_DOWN ) & 0x0001 )// 이렇게 쓰거나 if( GetAsyncKeyState( VK_DOWN ) & 0x8000 )// 이렇게 쓴다.​ GetAsyncKeyState는 키가 눌렸을 때 GetAsyncKeyState의 0x8000 bit가 1이된다... 2010. 6. 28.
API-ini파일 특정 값이나, 상황, 옵션등을 설정하고 싶을 때, 프로그램 코드에서 설정하거나, 사용자에게 입력받는 방법도 존재 하지만, 모든 상황에 대해서 그 값을 입력받는다거나, 확인하는 작업이 그렇게 편리하지만은 않다. 그래서 존재 하는 것이 ini파일의 활용인데, (확장자만 바꾸면 꼭 ini가 아니여도 상관은 없지만, 보통 확장자를 ini로 많이 사용한다.) 크게 ini파일을 만들면, 세션 과 키값, 그리고 데이터로 분리된다. [TEST1] HP=1 MP=2 라는 식을 ini 파일이 가지고 있다고 했을 때 TEST1은 세션 HP, MP는 키값 1과 2는 데이터라고 보면 된다. 크게 어려운 것은 없고. WritePrivateProfileString 를 사용해 세션을 만들고, 키 값을 만들고, 데이터를 삽입한다. 이.. 2010. 5. 10.
API-알파값(비트맵 이미지 투명화) 사실 예전엔 알파값을 사용하기 위해 매우 복잡한 연산을 사용(비트연산)하였으나, 지금은 TransparentBlt를 함수를 사용하면 1줄로 아주 간편하게 특정 값에 대한 수치를 제거 할 수 있다. 다음과 같은 이미지에 붉은값( 255, 0, 0 )을 투명처리 하고 싶다고 하자. 흔히들 알파값, 컬러키 라고 많이 불리우는데, #include #include "resource.h" #pragma comment(lib, "Msimg32.lib") HBITMAP hBitDice; LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); HINSTANCE g_hInst; LPCTSTR lpszClass = TEXT("알파값"); int APIENTRY WinMain( H.. 2010. 5. 10.
API-애니메이션 애니메이션의 기본은 여러장, 또는 한장이지만 부분별로 쪼개어 번갈아 가면서 계속 보여줌으로써 애니메이션을 연출 할 수 있다. 긴 설명이 필요 할거 같지는 않고, 다음의 이미지를 번갈아서 출력한다고 생각해 보자. 이미지의 크기는 x축 48*12, y출 48이다. 따로 애니메이션을 플레이 해주는 함수가 존재하는 것은 아니고, BitBlt 함수를 사용해 간단하게 화면에 뿌려 줄 수 있다. 예제를 보면 쉽게 이해 할 수 있다. #include #include "resource.h" int frame; HBITMAP hBitDice; LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); HINSTANCE g_hInst; LPCTSTR lpszClass = TEXT(".. 2010. 5. 10.
API-PlaySound API에서 음악을 출력하기 위해 사용하는, PlaySound라는 함수만 사용해 주면된다. 특별히 주의할 점은 없고. 딱히 소스를 첨부 하지도 않겠다. 단지 PlaySound라는 함수를 사용하기 위해서는, 프로젝트에서 winmm.lib를 링크 하거나, #pragma comment(lib, "winmm.lib" ) 를 선언해야 하며, #include 가 필요하다. PlaySound의 첫번째 인자는 파일의 주소 TEXT("test.wav") 식으로 선언해 주고, 두번째 인자는 리소스의 Wave 파일을 연주할 경우 그 핸들을 지정, 3번째에 플래그 값이 들어 가는데, SND_ASYNC를 삽입해 주는 것이 가장 무난하다. PlaySound( TEXT("test.wav"), NULL, SND_ASYNC); 처럼 사.. 2010. 5. 10.
API-더블 버퍼링 api에서 paint를 호출 할때 사용하는 InvalidateRect 함수는 특정 영역(또는 전 화면)을 지우고 다시 그려주는 일을 하게 되는데, 그 순서는 기존의 이미지 -> 특정 영역(모든 영역)을 화면에서 지운다 -> 다시 그려준다 (물론 그려주기 위해서 MemDC가 필요 하다.) 이런 구조를 지니게 되는데, 그렇기 때문에 가끔씩 느껴지는 깜박임 현상을 보게 된다. 그때 그 문제를 해결하기 위해서 더블 버퍼링이라는 기술을 사용하게 되는데, 따로 더블버퍼링 함수를 제공한다거나 하는것이 아니기 때문에 처음엔 많이 해맬 수 있다. 기존에 영역을 지우고 다시 그려주는 것이 아닌, hdc가 뿌려준 기존의 화면 -> 다음에 그려줄 이미지를 BackDC에 임시 저장 -> BackDC에 내용을 MemDC에 삽입한.. 2010. 5. 10.