본문 바로가기

Programming/API

마우스의 입력 윈도즈에서 키보드와 함께 가장 많이 쓰이는 입력장치가 있다. 바로 마우스 인데 키보드 입력에 이어 마우스 입력에 대하여 보도록 하겠다.api명령어를 통하여 우리가 사용하는 평범한 마우스부터, 노트북의 터치패드, 트랙볼, 타블릿 등 마우스의 역할을 하는 모든 것들을 메시지를 통하여 마우스 입력 처리가 가능하다.마우스 입력에 관한 메시지는 다음과 같다. 누름놓음더블클릭좌측WM_LBUTTONDOWNWM_LBUTTONUPWM_LBUTTONDBLCLK우측WM_RBUTTONDOWNWM_RBUTTONUPWM_RBUTTONDBLCLK중앙WM_MBUTTONDOWNWM_MBUTTONUPWM_MBUTTONDBLCLK 그리고 마우스 휠에 대한 메시지는 WM_MOUSEWHEEL이 있는데 0~120까지는 휠을 위로 굴리는경우, .. 더보기
무효화 영역과 InvalidateRect 함수 WM_CHAR 메시지나 WM_KEYDOWN 메시지가 발생하여 문자나 키가 입력되고 나서 InvalidateRect 함수를 호출하여서 WM_PAINT메시지를 발생시켜 새로 윈도우를 불러왔었다.그 것은 무효화 영역 때문인데 무효화 영역은 현재 표시 되어야 될 부분이 누락된 상태로 다른 모습을 하고 있는 것을 말 한다.쉽게 말해 두개의 윈도우가 겹쳐있다가 이동하였을때 뒤에 가려져 있어 보이지 않던 부분이 바로 무효화 영역인 것이다.그래서 InvalidateRect 함수를 이용하여 WM_PAINT메시지를 해당 윈도우에 보내 새롭게 윈도우를 그려 무효화 영역을 유효화 시키는 것이다. BOOL InvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);Invalidat.. 더보기
WM_CHAR 메시지와 WM_KEYDOWN 메시지 WM_CHAR 메시지 윈도우즈는 키보드로부터 입력을 받아 하나의 프로그램에 키보드 메세지(WM_CHAR)를 보내준다. 멀티 태스킹 환경에서 여러개의 프로그램을 실행하고 있더라도 활성화된 프로그램만 입력 받을 수 있다. *WndProc에 변수가 선언되어 있는경우 지역변수이기 때문에 메시지 발생할 때마다 초기화되기 때문에 앞에 static을 붙여 정적변수를 만들어야 한다. 아니면 전역 변수로 선언하는 방법도 있다. case WM_CHAR:len = _tcslen(str);str[len]=(TCHAR)wParam;str[len+1]=0;InvalidateRect(hWnd,NULL,TRUE);return 0; 문자키가 입력되어지면 입력되어져있는 문자열의 길이를 strlen함수를 이용하여 얻는다.문자열 끝에 입력.. 더보기
가상키코드 가상 키코드 16진수 키 VK_LBUTTON 01 Left mouse button VK_RBUTTON 02 Right mouse button VK_CANCEL 03 Control-break processing VK_MBUTTON 04 Middle mouse button on a three-button mouse VK_BACK 08 BACKSPACE key VK_TAB 09 TAB key VK_CLEAR 0C CLEAR key VK_RETURN 0D ENTER key VK_SHIFT 10 SHIFT key VK_CONTROL 11 CTRL key VK_MENU 12 ALT key VK_PAUSE 13 PAUSE key VK_CAPITAL 14 CAPS LOCK key VK_ESCAPE 1B ESC key .. 더보기
IME를 사용해서 한글입력기를 만들잣! 출처 : 하이텔 게제동 강좌란 IME를 사용해서 한글입력기를 만들잣! -_-;;. (천리안:kjm37 나우:kjm37 하이털:puriat) 홈피주소 : http://anoa.wo.to ----------------------------------------------------------------------------- 자 생일맞이 대 이벤뚜!! 초간단 IME 강좌를 시작합니닷!! 와아~ 짝짝짝~(박수웃) p.s 강좌내에서는 존칭은 사양합니다;. . IME란 무엇인가? IME란 Input Method Editor의 약자로 한국 중국 일본어등 조합을 해야 사용할수 있는 언어 계열을 위한 에디터를 말한다고 한다.(배낀거다;. -_-;.) . 어떻게 써야하는가? IME란걸 직접 써보니 별것 아니였다;. 물론.. 더보기
멀티바이트와 유니코드 winapi.co.kr(현 http://www.soen.kr/)의 강좌를 보다보면 코드에 자주 오류가 뜨곤 한다.그 이유는 강좌 제작 당시 사용되었던 Visual Studio 6.0은 유니코드는 지원하지 않고, 멀티바이트만 지원하였고 Visual Studio 2005 이후로는 기본적으로 UNICODE를 지원하기때문인데 윈도우 2000 이상에서는 유니코드를 지원하고, 윈도우98은 유니코드를 지원하지 않았기때문이다.멀티바이트는 한 문자에 할당되는 공간이 일정하지 않은데 영어는 1바이트, 다국어 2바이트 공간을 확보하고 유니코드는 항상 문자 하나에 2바이트 공간을 확보한다.문자집합 부분 설정을 멀티바이트로 바꿔주게되면 오류는 발생하지는 않지만,유니코드로 프로그래밍을 하게되면 외국어 윈도우에서도 한글이 깨지지 .. 더보기
메세지 박스 MessageBox함수의 기본형은 다음과 같다.int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType); 첫번째 인수 hWnd는 메세지 박스를 소유하는 Owner Window이다. 메세지 박스를 닫아야만 오너 윈도우를 사용할수 있다. 두번째 인수 lpText는 메세지 박스에 출력할 메세지이다. 세번째 인수 lpCaption은 메세지 박스의 타이틀 바에 표시할 제목이다. 네번째 인수 UINT uType는 메세지 박스의 종류를 결정하는 플레그들로 각각 값은 다음과 같다.MB_ABORTRETRYIGNORE - 중단, 다시 시도, 무시MB_OK - 확인MB_OKCANCEL - 확인, 취소MB_RETRYCANCEL - 다시시도, 취소MB_Y.. 더보기
char*, LPCTSTR, TCHAR 의 차이 어떠한 문자열을 처리하는 자료형은 보통 char, wchar, TCHAR 를 사용한다. 쉽게 보면,char* => LPSTR 라고 생각하면 되고const char* => LPCSTR 라고 할 수 있다. 가운데 'C' 는 const 의 의미다. 'LP' 는 long pointer 의 의미.끝에 STR 이라는 의미는 NULL 포인터로 끝난다는 의미. 즉, 마지막 인덱스에는 항상 NULL 이 채워져 있어야 한다는 것.그래야만 str 관련 함수들이 동작을 하는 것이다. strlen, strcpy, strcmp 등등.. 이것들이 src param 의 끝에 NULL 이 없으면 무지 당황하게 된다. 가운데 'T' 가 들어간다는 것은 TCHAR 이라는 의미.그렇다면 왜 T를 쓸까?? 영문은 1바이트. 그런데, 우리나라.. 더보기