검색결과 리스트
프로그래밍/API에 해당되는 글 5건
- 2013.04.13 CEdit의 EN_CHANGE 와 EN_UPDATE 의 차이점
- 2013.03.18 WINAPI] GetOpenFileName
- 2013.03.07 BN_CLICKED, BM_CLICK
- 2013.02.23 IExplore Tab관련, 최상위창 만들기
- 2013.02.23 ListBox Message, LB_메세지 종류
WINAPI] GetOpenFileName (0) | 2013.03.18 |
---|---|
BN_CLICKED, BM_CLICK (0) | 2013.03.07 |
IExplore Tab관련, 최상위창 만들기 (0) | 2013.02.23 |
ListBox Message, LB_메세지 종류 (0) | 2013.02.23 |
http://Soenlab.com (구 : winapi.co.kr) 레퍼런스 확인중
http://soenlab.com/lecture/win32api/reference/Function/GetOpenFileName.htm
을 보면서 따라하던중
헤더파일을 못읽는건지..
도무지 GetOpenFileName 함수가 컴파일되지 않는것이었다
해결방법은
WIN32_LEAN_AND_MEAN을 주석처리하면된다.
GetOpenFileName 사용시-> //#define WIN32_LEAN_AND_MEAN
CEdit의 EN_CHANGE 와 EN_UPDATE 의 차이점 (0) | 2013.04.13 |
---|---|
BN_CLICKED, BM_CLICK (0) | 2013.03.07 |
IExplore Tab관련, 최상위창 만들기 (0) | 2013.02.23 |
ListBox Message, LB_메세지 종류 (0) | 2013.02.23 |
의문점:
SubClassing으로 Button Window를 연결했을때
Click Message를 받을려면 어떻게 해야하는가?
BN_CLICKED : Button에서 "Click"시 발생한 메세지를 부모에게 메세지로 보내준것이다
아래의 코드를 보면
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case ID_BUTTON3:
switch(wmEvent)
{
case BN_CLICKED:
MySend();
EditAddLast(hEdit,"BN_CLICKED");
break;
case BM_CLICK:
MySend();
EditAddLast(hEdit,"BM_CLICK");
break;
}
break;
}
break; |
결과를 출력하게 되어있다. (EditAddLast는 개인적인출력함수)
결과를 보면
부모Procedure에서는 BN_CLICKED가 발생됨을 확인할 수 있다.
asdasd가 씌어진 부분은 Edit Window 이다.
EditWindow에서 VK_RETURN ( 엔터키 )에 Button이 눌린것처럼 Message를 보냈다.
case WM_KEYDOWN:
if (wParam == VK_RETURN)
{
SendMessage(GetDlgItem(g_hWnd,ID_BUTTON3), BM_CLICK, 0, 0);//SendMessage버튼이 클릭되게 메세지 보냄
SetFocus(GetDlgItem(g_hWnd,ID_EDIT2));
}
return false; |
VK_RETURN ( 엔터키 ) 가 눌린경우 역시 BN_CLICKED 메세지가 발생된다.
SubClassing을 한 상태이다
|
message값을 알아보기위해 여러가지 상황별로 셋팅해두었다.
->복잡하니 실제 발생된 결과값을 보자
두번 클릭했을경우의 값이다
<WINUSER.h> 를 보면
위의 데이터를 해석해보면
f3 : STATE를 변경한다 (눌렀다가)
f3 : STATE를 변경한다 (뗐다가)
215 : CAPTURECHANGED [ MSDN ] When it receives this message, a window should redraw itself
윈도우 자신을 다시그리고있을때(클릭하면 모양 바뀌자너?)
BM_SETSTATE 살펴보면
A BOOL that specifies whether the button is highlighted. A value of TRUE highlights the button. A value of FALSE removes any highlighting.
Not used.
CEdit의 EN_CHANGE 와 EN_UPDATE 의 차이점 (0) | 2013.04.13 |
---|---|
WINAPI] GetOpenFileName (0) | 2013.03.18 |
IExplore Tab관련, 최상위창 만들기 (0) | 2013.02.23 |
ListBox Message, LB_메세지 종류 (0) | 2013.02.23 |
먼저 네이버 홈페이지를 켜둔 상태로
"네이버"핸들을 검색해보면 2가지가 나온다
SPY++을 찾아보니
두가지 내용중,
하나는 IEFrame이라고 표기되어있고
다른하나는 TabThumbnailWindow 라고 표기되어있다.
둘의 차이는 뭔가 하고
창을 최상위로 당겨본결과, (BringWindowToTop 함수사용)
TabThumbnailWindow는 창이 제대로 최상위로 변경되는 반면
IEFrame은, 작업표시줄에서만 반짝일뿐!
또한, 탭이 여러개인경우에도 BringWindowToTop을 하게되면 다른탭보다 밑에있더라도 최상위로 올라오게된다
TabThumbnailWindow 실제로 작동하는 핸들이다, IEFrame은 작업표시줄 윈도우일뿐이다.
라고 답이 나온다.
(최소화된경우 BringWindowToTop 또는 SetForegroundWindow를 통해 변경되지 않는다
이때 http://debugjung.tistory.com/421 << 여기를 통해 강제로 최상위창을 만든다)
CEdit의 EN_CHANGE 와 EN_UPDATE 의 차이점 (0) | 2013.04.13 |
---|---|
WINAPI] GetOpenFileName (0) | 2013.03.18 |
BN_CLICKED, BM_CLICK (0) | 2013.03.07 |
ListBox Message, LB_메세지 종류 (0) | 2013.02.23 |
1.ListBox 생성
HWND hList; //전역변수
hList=CreateWindow("listbox",NULL,WS_CHILD |
WS_VISIBLE | WS_BORDER |
LBS_NOTIFY | LBS_NOINTEGRALHEIGHT |
WS_VSCROLL,
10,100,900,200,hWnd,(HMENU)
ID_LISTBOX,hInst,NULL);
SendMessage(hList, LB_RESETCONTENT,0,0);
2.Message종류
포인터 = 끝이 NULL값인 배열의 주소
포인터의 길이 = 배열의 크기(최대 크기)
아이템 인덱스 = 0을 기준으로 아이템의 인덱스
low = low-word 하위워드
high = high-word 상위워드
설정할 값 = 각 메세지마다 설정할 값
메세지 | 설명 | wParam | lParam |
LB_ADDFILE | DlgDirList 함수에 의해 채워진 리스트 박스에 파일을 추가한다. | 사용 안함 | 포인터 |
LB_ADDSTRING | 문자열 항목을 추가하여 그 인덱스를 리턴한다. | 사용 안함 | 포인터 |
LB_DELETESTRING | 문자열 항목을 삭제하며 남아있는 항목의 개수를 리턴한다. | 아이템 인덱스 | 사용 안함 |
LB_DIR | 파일 목록을 리스트 박스에 추가한다. | 플래그 | 포인터 |
LB_FINDSTRING | 주어진 검색식에 맞는 첫 번째 항목의 인덱스를 조사한다. | 찾을 위치 0이면 처음부터 | 포인터 |
LB_FINDSTRINGEXACT | 주어진 검색식과 정확하게 일치하는 항목의 인덱스를 조사한다. | 찾을 위치 0이면 처음부터 | 포인터 |
LB_GETANCHORINDEX | 마우스에 의해 마지막으로 선택된 항목의 인덱스를 조사한다. | 사용 안함 | 사용 안함 |
LB_GETCARETINDEX | 포커스 사각형을 가진 항목의 인덱스를 조사한다. | 사용 안함 | 사용 안함 |
LB_GETCOUNT | 총 항목 개수를 조사한다. | 사용 안함 | 사용 안함 |
LB_GETCURSEL | 현재 선택되어 있는 항목의 인덱스를 조사한다. | 사용 안함 | 사용 안함 |
LB_GETHORIZONTALEXTENT | 스크롤 가능한 폭을 픽셀 단위로 리턴한다. | 사용 안함 | 사용 안함 |
LB_GETITEMDATA | 주어진 항목의 데이터를 조사한다. | 아이템 인덱스 | 사용 안함 |
LB_GETLOCALE | Locale 정보를 조사한다. 상위워드에는 국가코드, 하위워드에는 언어 ID가 전달된다. | 사용 안함 | 사용 안함 |
LB_GETSEL | 항목의 선택 상태를 조사한다. | 아이템 인덱스 | 사용 안함 |
LB_GETSELCOUNT | 다중 선택 리스트 박스에서 선택된 항목의 개수를 조사한다. | 사용 안함 | 사용 안함 |
LB_GETSELITEMS | 다중 선택 리스트 박스에서 선택된 항목의 인덱스를 조사한다. | 포인터의 길이 | 포인터 |
LB_GETTEXT | 주어진 항목의 문자열을 조사한다. | 아이템 인덱스 | 포인터 |
LB_GETTEXTLEN | 주어진 항목의 문자열 길이를 조사한다. | 아이템 인덱스 | 사용 안함 |
LB_GETTOPINDEX | 화면에 보이는 최상위 항목의 인덱스를 조사한다. | 사용 안함 | 사용 안함 |
LB_INISTORAGE | 대량의 데이터를 추가할 때 메모리를 미리 준비하도록 한다. 이 메세지를 미리 보내놓으면 필요한 만큼 메모리를 확보하므로 삽입 속도가 빨라진다. | 아이템의 개수 | 메모리의 크기 |
LB_INSERTSTRING | 주어진 위치에 문자열을 삽입한다. | 아이템 인덱스 -1이면 마지막 | 포인터 |
LB_ITEMFROMPOINT | lParam으로 주어진 좌표에 가장 가까운 항목의 인덱스를 조사한다. 좌표는 리스트 박스의 작업영역 좌표이다. | 사용 안함 | low x좌표 high y좌표 |
LB_RESETCONTENT | 모든 항목을 삭제한다. | 사용 안함 | 사용 안함 |
LB_SELECTSTRING | 주어진 검색식에 일치하는 첫 번째 문자열을 선택한다. | 찾을 위치 0이면 처음부터 | 포인터 |
LB_SELITEMRANGE | 주어진 범위의 항목들을 선택한다. | TRUE면 선택 ZERO면 반전 | low 시작 값 high 끝 값 |
LB_SELITEMRANGEEX | 주어진 범위의 항목들을 선택하되 시작 항목이 끝 항목보다 뒤쪽에 있으면 선택이 취소된다. | 시작 인덱스 | 끝 인덱스 |
LB_SETANCHORINDEX | 마우스에 의해 최후로 선택된 항목을 설정한다. | 새로운 ANCHOR의 인덱스 | 사용 안함 |
LB_SETCARETINDEX | 포커스 사각형을 주어진 항목으로 옮긴다. | 설정할 값 | TRUE,FALSE |
LB_SETCOLUMNWIDTH | 다중 컬럼 리스트 박스에서 컬럼의 폭을 픽셀 단위로 지정한다. | 설정할 값 | 사용 안함 |
LB_SETCOUNT | 총 항목의 개수를 설정한다. | 설정할 값 | 사용 안함 |
LB_SETCURSEL | 주어진 항목을 선택 상태로 만든다. | 아이템 인덱스 | 사용 안함 |
LB_SETHORIZONTALEXTENT | 스크롤이 가능한 폭을 픽셀 단위로 설정한다. 이 폭을 설정하지 않으면 항목의 길이가 아무리 길어도 수평 스크롤 바가 나타나지 않는다. | 설정할 값 | 사용 안함 |
LB_SETITEMDATA | 항목데이터를 대입한다. | 아이템 인덱스 | 설정할 값 |
LB_SETITEMHEIGHT | 개별 항목의 높이를 설정한다. | 아이템 인덱스 | 설정할 값 |
LB_SETLOCALE | Locale값을 설정한다. | 설정할 값 | 사용 안함 |
LB_SETSEL | 다중 선택 리스트박스에서 한 항목을 선택 상태로 만든다. | TRUE면 선택 ZERO면 반전 | 아이템 인덱스 |
LB_SETTABSTOPS | 탭 중지점을 설정한다. | 설정할 값 | 찾아보세요 |
LB_SETTOPINDEX | 주어진 항목이 화면의 최상위에 있도록 스크롤 시킨다. | 아이템 인덱스 | 사용 안함 |
반환되는 메시지 :
LB_OKAY 0
LB_ERR (-1)
LB_ERRSPACE (-2)
Message종류 출처 : http://blog.naver.com/nawoo/80103964940
3.Message사용방법
종류 |
사용법 |
LB_ADDSTRING | SendMessage(hList, LB_ADDSTRING,0,(LPARAM)buffer); //TCHAR buffer[256]; |
LB_RESETCONTENT | SendMessage(hList, LB_RESETCONTENT,0,0); |
LB_GETCURSEL | curNum = SendMessage(hList,LB_GETCURSEL,0,0); |
LB_DELETESTRING |
SendMessage(hList,LB_DELETESTRING,curNum,0); |
LB_ERR | if(curNum == LB_ERR) "Nothing is Selected" |
LB_GETTEXT | SendMessage(hList,LB_GETTEXT,curNum,(LPARAM)buffer); //TCHAR buffer[256]; |
LB_FINDSTRING | curNum = SendMessage(hList, LB_FINDSTRING, -1, (LPARAM)buffer); //TCHAR buffer[256]; |
CEdit의 EN_CHANGE 와 EN_UPDATE 의 차이점 (0) | 2013.04.13 |
---|---|
WINAPI] GetOpenFileName (0) | 2013.03.18 |
BN_CLICKED, BM_CLICK (0) | 2013.03.07 |
IExplore Tab관련, 최상위창 만들기 (0) | 2013.02.23 |
RECENT COMMENT