728x90
윈도우 메뉴
- 리소스 - 윈도우 프로그램에서 화면을 통해 사용자에게 입력받고 출력하는 코드 외의 부분
- 메뉴항목에서 WM_COMMAND메시지 발생 → iMsg에 저장되어 WndProc()에 전달
- tchar_t *_fgetts(tchar_t *str, int n, FILE *fPtr) - fPtr파일에서 한 줄을 읽어와 str에 저장. 파일의 끝을 만나면 NULL반환
- int *_fputts(const tchar_t *str, FILE *fPtr) - str문자열을 fPtr파일에 출력함
- errno-t _tfopen_s(FILE** fPtr, const tchar_t *filename, const tchar_t *mode) - 열고자하는 filename으로 파일을 연후 fPtr에 연 파일 포인터저장
- int _stprintf_s(tchar_t (&buffer)[size], const tchar_t *format, argument…) - format이 가리키는 문자열을 buffer공간으로 복사한다. 반환값은 출력한 문자열의 길이이고 오류 발생시 -1반환.
- int _tcscmp(const tchar_t *string1, const tchar_t *string2) - string1,string2을 비교 -> string1-string2
단축키와 비트맵
- 단축키 설정단계
- 메뉴 속성창의 Caption에 단축키 표시
- 새로운 액셀러레이터 추가
- 단축키 매핑
- 단축키 설정 코드 작성
- 비트맵 이미지 출력과정
- 비트맵 가져오기 - 그림을 비주얼 스튜디오의 비트맵으로 불러온다
- 비트맵 로드하기 - 비트맵의 ID와 LoadBitmap() 함수를 잉ㅇ해 비트맵 핸들에 비트맵 로드
- 화면 얻기 - DC 얻기
- 메모리 디바이스 콘텍스트 만들기 - CreateCompatibleDC() 함수를 이용해 hdc와 호환되는 memdc(화면이 없고 메모리에만 존재) 만들기
- 비트맵 사용 선언 - SelectObject() 함수를 이용해 hBitmap에 로드된 이미지를 memdc에 설정
- 화면에 비트맵 출력 - memdc 그림을 BitBlt(), StretchBit() 로 hdc에 옮김
- 더블버퍼링
- 비트맵 이미지를 hBit2에 로드
- hdc에서 호환이 되는 mem1dc를 만들고 mem1dc에서 호환이 되는 mem2dc 만들기
- hdc와 호환이 되도록 CreateCompatibleBitmap() 함수를 이용해 hBit1 만들기
- mem1dc에 hBitmap1 설정(그리기) , mem2dc에 hBitmap2 설정(그리기)
- mem2dc 그림을 mem1dc에 옮기기
- mem1dc에 텍스트 쓰기 → 화면에 출력할 내용이 mem1dc에 모두 출력완료
- BitBlt() 함수로 mem1dc내용을 hdc에 옮긴다
- 애니메이션 출력
- AND연산으로 마스크 출력 OR연산으로 같은 자리에 이미지 출력
대화상자 컨트롤
- 대화상자 이용
- 리소스에서 새로운 대화상자 만들기
- 대화상자에 대한 메시지 처리 함수 작성
- 대화상자 띄우기
- 컨트롤을 대화상자에서 기본적으로 사용할 수 있도록 제공되는 것
- 컨트롤에서 대화상자로 오는 WM_COMMAND 메시지
- wParam - HIWORD - 컨트롤에 따른 통지 정보
- wParam - LOWORD - 컨트롤 ID
- lParam - 컨트롤 핸들 값
- 컨트롤에 메시지를 전송하는 함수(콤보박스, 리스트박스 등에 사용)
- LRESULT SendMessage(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
- hwnd - 메시지를 받을 윈도우나 컨트롤의 핸들 값
- iMsg - 전송할 메시지
- wParam, lParam - 메시지의 부가 정보
- 버튼 컨트롤
- 통지 정보 종류
- BN_CLICKED - 버튼클릭
- BN_DBCLICK - 버튼 더블클릭
- BN_DISABLE - 버튼 사용 불가능 상태
- BN_HILITE - 사용자가 버튼 선택
- BN_SETFOCUS - 버튼이 포커스를 받음
- 윈도우에 작은 윈도우가 존재하고, 그걸 GetDigitem() 함수를 이용해 ID로 얻어올 수 있다.
- 통지 정보 종류
- 에디트 컨트롤 - 사용자의 키보드 입출력을 위한 편집 창
- 통지 정보 종류
- EN_CHANGE - 에디트 컨트롤의 내용이 변함
- EN_HSCROLL - 에디트 컨트롤의 수평 스크롤바 선택
- EN_VSCROLL - 에디트 컨트롤의 수직 스크롤바 선택
- EN_SETFOCUS - 에디트 컨트롤이 포커스를 받음
- 통지 정보 종류
- 콤보박스 컨트롤 - 항목의 리스트 컨트롤을 보여주어 이 중 하나를 선택할 때 사용
- 통지 정보 종류
- CBN_DROPDOWN - 콤보박스 컨트롤에 등록된 항목이 아래로 펼쳐짐
- CBN_DBCLK - 아래로 펼쳐진 항목 리스트 컨트롤에서 하나를 더블 클릭
- CBN_EDITCHANGE - 콤보박스 컨트롤의 텍스트 편집 공간에 텍스트를 추가, 수정
- CBN_SELCHANGE - 항목 리스트 컨트롤에서 하나를 선택
- 콤보 박스 컨트롤에 보내는 iMsg
- CB_ADDSTRING - 콤보박스 컨트롤의 항목 리스트에 문자열 새로추가
- wParam - 사용 x
- lParam - 추가될 문자열의 시작 주소
- CB_DELETESTRING - 콤보박스 컨트롤에 있는 항목 하나를 삭제
- wParam - 삭제하고자 하는 항목의 인덱스
- lParam - 0
- CB_FINDSTRING - 항목 리스트 컨트롤에 있는 텍스트 중 원하는 텍스트를 찾음
- wParam - 찾기 시작할 위치를 지정하는 인덱스 값으로 0부터 시작. -1로 하면 리스트 컨트롤 전체에서 찾는다.
- lParam - 찾고자 하는 문자열 시작 주소
- CB_GETCOUNT - 콤보 박스 컨트롤의 항목 리스트에 있는 항목 개수 얻기
- wParam - 0
- lParam - 0
- CB_GETCURSEL - 현재 선택한 항목의 인덱스 번호 얻기
- wParam - 0
- lParam - 0
- CB_SERCURSEL - 콤보박스 컨트롤의 텍스트 편집 공간에 지정한 항목의 텍스트를 보여줌
- wParam - 나타내고자 하는 항목의 인덱스 번호
- lParam - 사용 x
- 통지 정보 종류
- 리스트 박스 컨트롤 - 외부 입력 없이 여러 개의 항목을 일렬로 보여주는 컨트롤
- 통지 정보 종류
- LBN_DBCLK - 리스트 박스 컨트롤의 여러 항목 중 하나를 더블클릭
- LBN_SELCHANGE - 항목 중 하나가 선택
- LBN_SETFOCUS - 리스트 박스 컨트롤이 포커스를 받음
- LBN_KILLFOCUS - 리스트 박스 컨트롤이 포커스를 잃음
- LBN_DELETEITEM - 리스트 박스 컨트롤의 항목 중 하나가 삭제됨
- 리스트 박스 컨트롤에 보내는 iMsg
- LB_ADDSTRING - 리스트 박스 컨트롤의 항목 리스트 마지막에 문자열을 추가
- wParam - 사용 x
- lParam - 문자열의 시작 주소
- LB_DELETESTRING - 리스트 박스 컨트롤에 있는 항목 중 하나를 삭제
- wParam - 삭제하려는 항목의 인덱스 정수
- lParam - 0
- LB_FINDSTRING - 항목 리스트 컨트롤에 있는 텍스트 중 원하는 텍스트 찾기
- wParam - 찾기 시작할 위치를 지정하는 인덱스 값으로 0부터 시작, -1로 하면 리스트 컨트롤 전체에서 찾는다.
- lParam - 찾고자 하는 문자열의 시작 주소
- LB_GETCOUNT - 리스트 박스 컨트롤의 항목 리스트에 있는 항목 개수 얻기
- wParam - 0
- lParam - 0
- LB_GETCURSEL - 현재 선택한 항목의 인덱스 번호 얻기
- wParam - 0
- lParam - 0
- LB_SETCURSEL - 선택한 항목을 보여준다
- wParam - 선택한 항목의 인덱스 번호
- lParam - 사용 x
- LB_GETSELCOUNT - 리스트 컨트롤 중 선택한 항목의 인덱스 번호 가져오기
- wParam - 선택할 수 있는 항목의 최대 개수
- lParam - 선택한 항목들의 인덱스 번호를 저장할 정수 배열의 시작주소
- LB_GETTEXT - 항목 리스트 컨트롤 중 wParam에서 지정한 인덱스 항목의 텍스트 얻어오기
- wParam - 얻어올 항목의 인덱스 번호
- lParam - 얻어온 텍스트를 저장할 버퍼의 시작 주소
- LB_INSERTSTRING - 항목 리스트 중간에 문자열을 새로운 항목으로 추가
- wParam - 항목 리스트 중 추가될 위치의 인덱스 번호
- lParam - 문자열 시작 주소
- LB_ADDSTRING - 리스트 박스 컨트롤의 항목 리스트 마지막에 문자열을 추가
- 통지 정보 종류
- 모덜리스 대화상자
- 모덜 대화 상자는 대화상자의 핸들 값이 필요없지만, 모덜리스 대화상자는 부모 윈도우와 대화상자가 동시에 구동되기 때문에 부모 윈도우가 대화상자의 윈도우 핸들 값을 가져야 한다.
- 모덜 대화상자 생성, 삭제 - DiglogBox(), EndDialog()
- 모덜리스 대화상자 생성, 삭제 - CreateDialog(), DestroyWindow()
728x90
'Computer > WINAPI 32' 카테고리의 다른 글
3. MDI, 파일 입출력 (0) | 2023.01.19 |
---|---|
1. 윈도우 프로그래밍, 기본 입출력, 제어 메시지 (0) | 2023.01.17 |