검색결과 리스트
글
API
*메세지 구동방식(이벤트 처리방식)
-windows용 P/G의 명령문 처리방식
*이벤트
-사용자가 어떤 처리를 위해 A/P에게 보내는 각종신호
( 이벤트발생 -> O/S -> A/P )
*메세지
-사용자가 발생시킨 각종 신호를 표준화한 정보
*windows환경에서 main함수(WinMain)
[형식]
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
리턴형 함수호출류약 함수명
*함수호출규약
-함수호출시 미리 정의해 놓은 약속에 의해 호출하는 방식지정
[종류]
----------------------------------------------------------------------
| __stdcall | __cdecl
======================================================================
default |Basic, pascal, windows | C
----------------------------------------------------------------------
인수가매개변수에 |right->left | right->left
전달하는 순서 | |
----------------------------------------------------------------------
매개변수의 |호출받는함수 | 호출하는함수
메모리해제 | |
----------------------------------------------------------------------
__stdcall과 같은 define값들 : WINAPI, APIENTRY 등등~
*핸들값(H가 앞에 붙은 클래스?)
-windows용 p/g에서 구성요소중 무언가를 구분하기위해
o/s가붙여 놓은 정수형 번호(식별번호)
-각 요소를 접근,제어할때 핸들값을 이용해 설정
*windows용 p/g의 기본 골력함수
----------------------------------------------------------------------
WinMain | p/g의 시작 p/g의 기본요소설정(윈도우 객체생서이/메세지루프)
----------------------------------------------------------------------
WndProc | 메세지 처리함수
| 사용자가 발생시킨 이벤트에 따른 여러가지 설정
----------------------------------------------------------------------
*WinMain함수의 역할
1.출력할 윈도우에 대한 속성지정
(커서/배경색/아이콘/메세지처리함수/속성지정한 윈도우이름등등)
2.윈도우 클래스 O/S에 등록
register class(WndClass)
3.등록한 클래스를 통해 메모리에 윈도우 생성
4.메모리상에 설정된 윈도우 정보를 바탕으로 화면에 출력
5.메세지루프
사용자가 발생시킨 메세지를 순차적으로
꺼내와서 메세지 처리함수에세 보낸다.
(프로그램 종료할때까지)
1.Brush생성
2.생성한 Brush 정보를 O/S의 그리기 정보 구조체에 등록
3.그리기
4.원상복구
5.사용자가 생성한 Brush정보 해제
----------------------------------------------------------------------
*리소스resource
-프로그램의 구성요소중, 사용자가 직접 코딩한 데이터가 아닌
그림형태로 제공되어 출력되는 데이터 요소
(메뉴,아이콘,커서,문자열테이블,비트맵등등...)
-resource script 기능을 이용하여 visual하게 편집, 생성한다.
*메뉴의 속성지정
-선택된 메뉴에 대한 표시
-DWORD CheckMenuItem(HMENU hmenu, 메뉴ID, 메뉴속성);
----------------------------------------------------------------------
*비트맵(bitmap)
-작은 점들의 2차원 배열형식의 비트에 영상정보를 저장하고 있는것
-이미지정보저장(픽셀당 표현할수있는 색상수, 이미지크기,
해상도, 색상단면등등~)
[비트맵출력]
1.리소스파일추가
-비트맵파일(insert/import) 256컬러초과는 편집안됨
2.rc파일로부터 비트맵정보 읽어내기
-HBITMAP LoadBitmap(HINSTANCE, "비트맵ID");
3.메모리에 비트맵 정보 올리기
-메모리에 DC설정(DC를 직접 생성)
-HDC Create(CompatibleDc(HDC);
-메모리에 지정 한 수와 DC와 똑같은 출격정도를 만드는 함수
4.메모리DC가 비트맵정보 저장
-SelectObject(메모리DC,비트맵핸들)
5.bmp보여주기
-메모리DC선택하고 있는 영상정보를 화면에 출력
Bool BitBlt(출력할곳의 DC, x, y, width, hsight,
출력할 데이터의 DC, x, y, 출력mode);
6.생성한 DC정보 삭제
-DeleteDC(HDC);
----------------------------------------------------------------------
*GDI객체의 정보 알아내기
int GetObject(객체 핸들,저장할곳의크기,각객체별로저장할구조체번지);
*이미지크기변경(축소/확대)
BOOL StrechBit(출력할 곳의 DC,x,y,w,h,출력할 곳의 데이터,x,y,w,h,출력모드);
*가상bitmap정보설정
CreateCompatibleBitmap
-해당DC와 호환되는(같은출력정보) 비트맵 영역을 메모리에 만드는 함수
----------------------------------------------------------------------
폰트(FONT)
-같은 활자체, 크기, 장식, 굵기를 갖는 글자들의 모임
-폰트객체를 이용하여 사용자가 지정한 논리적인 폰트 설정
[폰트종류]
래스트폰트 :비트맵 형태로 표현
벡터 폰트 :선분 ..
투루타입폰트:선분 + 곡선 ..
[폰트객체생성]
HFONT CreateFont(14개인수);
*논리폰트 : 사용자가 정의한 폰트
*물리폰트 : system에 설치된 폰트
-사용자가 논리적인 폰트를 지정하면 폰트매퍼는 물리적인 폰트중에
가장 비슷한 형태의 폰트 출력
HFONT CreateFontIndirect(LPLOGFONT);
-폰트의 속성을 한꺼번에 기억할수 있는 LOGFONT 구조체에 값을
지정한 후에 , 폰트 객체 생성
----------------------------------------------------------------------
*컨트롤
-사용자와의 특정 데이터를 주고 받을수 있는 인터페이스 도구
-주로, 대화상자안에 위치하며, 한 화면에 여러개의
데이터를 동시에 입력받기 위해 사용
-모양이나 동작방식이 정해져 있기때문에 OS에 의해 제공된다.
-차일드윈도우
[컨트롤생성]
-HWND CreateWindow("botton","컨트롤안에 출력할 문자열",윈도우style+각컨트롤 style,
x,y,w,h, 부모윈도핸들,(HMENU)ID,g_hInst,NUll);
----------------------------------------------------------------------
[관련메세지]
WM_COMMAND
-컨트롤에 사용자가 이벤트발생시 보내지는 메세지
[메세지]
-일반메세지
:윈도우관련메세지(WS_ : 모든윈도우 관련 메시지)
:특정컨트롤에만 발생시킬수 있는 메세지(BM_ :버튼용 ,EM_ ,CB_ :콤보박스등등)
-사용자정의 메세지
:사용자가 지정하여 사용할수 있는 메세지
:OS에서 설정한 메세지 값과 겹치면 안된다.
WM_USER+ ? -_-;;;;;
-통지메세지(notify message)
:컨트롤에서 자신의 상태가 변경됐을때
그 상태를 알리기 위해 부모윈도로 보내는 메세지
----------------------------------------------------------------------
*버튼메세지(부모윈도우 -> 버튼)
-부모윈도우에서 버튼에게 메세지를 보내 이미 저장된 특정 동작을 수행하게끔 설정
-OS에 등록된 윈도우(컨트롤)들은 각 동작 방식대로 이미 등록된 메시지 처리함수가 있다.
-부모윈도에서 자식윈도에 명령설정시
SendMessage()함수에 의해 메세지를 본낸다.
----------------------------------------------------------------------
*콤보박스
-클래스명 : "combobox"
-에디트+리스트box
-style : CBS_SIMPLE : 박스가 항상 펼쳐짐
CBS_DROPDOWN : 필요시 펼쳐짐
CBS_DROPDOWNLIST : 입력불가, 필요시 펼쳐짐
-리스트box에 설정한 메세지 똑같이 적용 CB_****
----------------------------------------------------------------------
*선택한 항목 넘기기
1.선택한 항목의 index알아내기
LB_GETSELCOUNT 선택한 항목의 총갯수 알아내기
LB_GETSEEITEMS 다중선택리스트박스설정시 지정한(lParam) 정수형 배열에
선택한 항목의 index를 차례대로 기억시키는 메시지처리)
LB_DELETESTRING 지정한 Index의 문자열 삭제할때 보내는 메세지
이때 리스트박스는 하나의 항목을 지우면 자동으로 밑에 항목이
위로 땡겨진다. 따라서 여러개의 항목을 지울때는 뒤에서 부터 지운다.
----------------------------------------------------------------------
*대화상자(dialog)
-팝업윈도우
-컨트롤을 배치시켜 사용자로부터 데이터를 입력받거나
데이터를 보여주기위해 설계된 윈도우
-리소스 스크립트에 의해 디자인(리소스 자원)
[대화상자 종류]
-모달형(modal)
:대화상자를 닫기전에는 다른메뉴 선택이나 명령문 처리를 할수 없는
형태의 대화상자
[생성]
int DialogBox(HINSTANCE,"대화상자ID",소유윈도우핸들,메세지처리함수명);
BOOL EndDialog(대화상자핸들,종료시 지정한 버튼 ID);
-대화상자출력, 운영, 종료
-enddiaog함수가 호출되어 종료시 지정한 ID값을 return해주면 종료.
-모델리스형(modeless)
:대화상자를 열어놓은 상태에서 다른메뉴 선택이나 명령문 처리를 할수 있는
형태의 대화상자
[모델리스대화상자]
HWND CreateDialog(HINSTANCE,"대화상자ID", HWND, 대화상자프로시져)
-지정한 대화상자 관련 정보를 메모리에 생성한 후 그 핸들을 return
ShowWindow(HWND,보이기모드);
BOOL DestroyWindow(HWND);
*대화상자프로시져
-대화상자에서 발생하는 메세지 처리 함수
[타입]
BOOL CALLBACK 함수명(HWND, UINT, WPARAM, LPARAM);
-사용자가 처리하면 return TRUE;
사용자가 처리하지않으면 return FALSE;
이렇게 하면 OS가 알아서 처리
----------------------------------------------------------------------
*tab order 지정
-tab key에 의해 입력받을 순서지정
-첫번째 taborder를 갖는 컨트롤의 출력시 마우스 포커스를 갖는다.
-layout메뉴 -> tab order(ctrl+D)
[대화상자 컨트롤관한 통신관련함수]
HWND GetDlgItem(HWND,ID);
UINT GetDlgItemText(HWND,hDlg,ID, 저장할곳, 최대크기);
SetDlgItemText
GetDlgItemInt(HWND,ID,
BOOL *, //사용자가 지정한 4번째 옵션이 맞는지틀린지여부
//결과값체크할 변수의 주소지정
양수값체크유무);//
----------------------------------------------------------------------
*WM_INITDIALOG
//다이얼로그 초기화 설정~!!!
*파일입출력작업
[설정작업]
-파일열기 c에서는 : FILE *fp=fopen("파일명","작업모드");
api에서는 : HANDLE CreateFile(~~~~~~~);
-파일쓰기/읽기
*공통대화상자
-사용자가 자주 사용되는 대화상자를 미리 만들어 OS차원에서 제공하는 대화상자
-색상, 폰트, 프린터(인쇄), 파일열기/저장 (모달다이얼로그 란다.)
-찾기/바꾸기 (모델리스)
*콤보box에 보여줄 파일명과 파일형식은 \0으로 구분해준다.
"콤복박스에 출력할 문자\0*.txt"; <=이게 한쌍
----------------------------------------------------------------------
*스레드
-하나의 P/G에서 작업단위별로 독립적으로 수행되도록 설정한 것.
RECENT COMMENT