클래스
생성/소멸
l CWnd
1. 설명 : CWnd 객체를 생성한다. Windows 윈도는 CreateEx나 Create 멤버 함수가 호출 될 때까지 생성되거나 부가되지 않는다.
l DestroyWindow
1. 설명 : CWnd 객체에 부가되는 Windows 윈도를 파괴한다. DestroyWindow 멤버 함수는 그것의 활동을 제거하고 입력 초점을 제거하기 위해 윈도에 적절한 메시지를 전달한다. 또한 윈도의 메뉴를 파괴하고, 애플리케이션 큐를 지우며, 사용되는 타이머를 지우고, 클립보드 소유를 제거하며, 클립보드-뷰어의 체인이 CWnd의 뷰어 체인의 맨 위에 있다면 파괴한다. 그것은 CWnd 객체를 파괴하지 않는다.
윈도가 어떠한 윈도의 부모이면, 이들의 자식 윈도들은 자동적으로 부모 윈도가 파괴될 때 파괴된다. DestroyWindow 멤버 함수는 또한 CDialog::Create 에 의해 생성된 모델이 없는 다이얼로그 박스를 파괴한다.
파괴된 CWnd가 자식 윈도이고 WS_EX_NOPARENTNOTIFY 스타일 세트를 갖지 않는다면, WM_PARENTNOTIFY 메시지는 부모로 보내진다.
2. 구문 : virtual BOOL DestroyWindow();
3. 파라미터 : 없음.
4. 리턴값 : 윈도가 파괴되면 0 이외의 값이며, 그 외의 경우에는 0을 리턴한다.
초기화
l Create
1. 설명 : Windows 자식 윈도를 생성하고 CWnd 객체에 그것을 부가한다. 두 단계로 자식 윈도를 생성할 수 있다. 우선 생성자를 호출한다. 그것은 CWnd 객체를 생성한다. 그리고 나서 Windows 자식 윈도를 생성하고 그것을 CWnd에 부가하는 Create를 호출한다. Create는 윈도의 클래스 이름과 윈도 이름을 초기화하며, 그것의 스타일, 부모, ID에 대한 값들을 등록한다.
2. 구문 : virtual BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWND* pParentWnd, UINT nID, CcreateContext* pContext=NULL );
3. 파라미터
lpszClassName – Window 클래스에 명명하는 널-종결된 문자 스트링을 가르킨다. ( WNDCLASS 구조체 ) 이 클래스 이름은 전역 AfxRegisterWndClass 함수 또는 이미 정의 된 컨트롤 클래스 이름 중 어느 것으로 등록할 수 있다. 만일 NULL이면, 디폴트 CWnd 속성을 이용한다.
lpszWindowName – 윈도 이름을 포함하고 있는 널 종결 문자 스트링을 가리킨다. 이 윈도 이름은 캡션으로 표시된다.
dwStyle – 윈도를 생성할 때 사용되는 윈도 스타일. WS_POPUP 스타일을 사용할 수 없다. 팝업 윈도우를 생성하기 위하여 CWnd::CreateEx 함수를 사용한다.
rect – pParentWnd의 클라이언트 좌표에서 윈도의 크기와 위치를 나타낸다.
pParentWnd – 윈도의 부모 윈도를 나타내는 CWnd에 대한 포인터. 부모가 테스크탑 윈도이면 NULL이다.
nID- 자식 윈도의 ID.
pContext – 생성되는 윈도우의 컨텍스트를 기술하는 데 사용되는 CCreateContext 구조체에 대한 포인터.
4. 리턴값 : 윈도가 생성되면 비제로, 그렇지 않으면 0.
[ 윈도우 스타일 ]
WS_BORDER |
가는 선 테두리로 된 윈도를 하나 만든다. |
WS_CAPTION |
타이틀 바가 있는 윈도를 하나 만든다. WS_BORDER스타일을 포함한다. |
WS_CHILD |
자식윈도나 컨트롤을 만든다. 이 스타일을 사용하면 WS_POPUP은 사용할 수 없다. |
WS_CHILDWINDOW |
WS_CHILD 스타일과 같다. |
WS_CLIPCHILDREN |
그리기 작업이 일어날 때 컨트롤의 자식 윈도를 클리핑한다. 이 스타일은 부모 윈도를 만들 때 사용된다. |
WS_CLIPSIBLINGS |
그리기 작업이 일어날 때 자식 윈도와 같은 레벨의 윈도들을 클리핑한다. 스타일이 정해져 있지 않고 자식 윈도가 WM_PAINT 메시지를 받으면 동기가 윈도로 윈도가 겹쳐져 있어도 윈도우의 전체 영역이 갱신 영역에 추가된다. |
WS_DISABLED |
만들어 질 때부터 사용자 입력이 불가능한 상태의 윈도가 만들어 진다. |
WS_DLGFRAME |
대화상자에 사용되는 스타일의 테두리가 있는 윈도를 하나 만든다. 이 스타일로 만들어진 윈도는 타이틀 바를 가질 수 없다. |
WS_GROUP |
한 그룹의 처음 컨트롤임을 표시한다. 다음 WS_GROUP 스타일을 가진 컨트롤을 만나면 현재 그룹은 끝나고 다음 그룹이 사작된다. 보통 라디오 버튼이 그룹화되어 존재하며 한 그룹 내의 개개 항목들간은 화살표 키로 이동할 수 있다. |
WS_HSCROLL |
수평 스크롤 바가 있는 윈도를 만든다. |
WS_ICONIC |
WS_MINIMIZE와 같다. |
WS_MAXIMIZE |
처음부터 전체 화면으로 표시되는 윈도를 하나 만든다. |
WS_MAXIMIZEBOX |
전체 화면 표시 버튼이 있는 윈도를 만든다. |
WS_MINIMIZE |
처음부터 아이콘 표시된 윈도를 만든다. |
WS_MINIMIZEBOX |
아이콘 표시 버튼이 있는 윈도를 만든다. |
WS_OVERLAPPED |
타이틀 바와 테두리가 있는 윈도를 만든다. |
WS_OVERLAPPEDWINDOW |
WS_BORDER, WS_POPUP, WS_SYSMENU, WS_THICKFRAME, WS_MAXIMIZEBOX, WS_MINIMIZEBOX의 조합 |
WS_POPUP |
팝업 윈도를 만든다. WS_CHILD는 이 스타일과 함께 쓰일 수 없다. |
WS_POPUPWINDOW |
WS_BORDER, WS_POPUP, WS_SYSMENU의 조합. 시스템 메뉴가 보이도록 WS_CAPTION이 지정되어야 한다. |
WS_SIZEBOX |
WS_THICKFRAME과 같다. |
WS_SYSMENU |
타이틀 바에 시스템 메뉴가 있는 윈도를 만든다. |
WS_TABSTOP |
탭 키 멈춤 컨트롤을 지정한다. |
WS_THICKFRAME |
크기 조절 경계선이 있는 윈도를 만든다. |
WS_TILED |
WS_OVERLAPPED와 같다. |
WS_TILED_WINDOW |
WS_OVERLAPPEDWINDOW와 같다. |
WS_VISIBLE |
처음부터 눈에 보이는 윈도를 만든다. |
WS_VSCROLL |
수직 스크롤 바가 있는 윈도를 만든다. |
l CalcWindowRect
1. 설명 : 계획된 클라이언트 사각형 크기에 바탕을 둔 윈도 사각형의 요구된 크기를 계산하기 위해 이 멤버 함수를 호출한다. 결과로 생성되는 윈도 사각형(lpClientRect에 포함된)은 그때 클라이언트 영역이 원하는 크기를 지닌 윈도를 생성하기 위해 Create 멤버 함수를 지나칠 수 있다. 윈도를 생성하기 전에 윈도의 크기를 조절하기 위하여 프레임워크로 호출한다. 클라이언트 사각형은 클라이언트 영역을 완전히 봉하는 가장 작은 크기의 사각형이다. 윈도 사각형은 윈도를 완전히 봉하는 가장 작은 크기의 사각형이다.
2. 구문 : virtual void CalcWindowRect( LPRECT lpClientRect, UINT nAdjustType = adjustBorder );
3. 파라미터
lpClientRect – 윈도 사각형의 결과 값을 포함하는 RECT 구조체나 Crect 객체에 대한 포인트들을 나타낸다. 함수의 처리가 완료되면, 이 사각형에는 그 결과 윈도 사각형의 좌표로 채워진다.
nAdjustType – 사각형 좌표 계산에 스크롤바를 제외하려면 adjustBorder=0, adjustOutside=1은 사각형의 마지막 측정에 더해짐을 의미한다.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l GetStyle
1. 설명 : 윈도의 스타일 플래그를 리턴한다. GetStyle은 GWL_STYLE 플래그로 SDK함수 ::GetWindowLong를 호출한다.
2. 구문 : DWORD GetStyle() const;
3. 파라미터 : 없음.
l GetExStyle
1. 설명 : 윈도의 확장 스타일 플래그를 얻는다. 이 함수는 단순히 GWL_EXSTYLE 플래그로 SDK함수 ::GetWindowLong를 호출한다.
2. 구문 : DWORD GetExStyle() const;
3. 파라미터 : 없음.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l Attach
1. 설명 : CWnd 오브젝트에 윈도(HWND)를 붙인다. 윈도가 CWnd 오브젝트에 붙어 있으면, CWnd 멤버 함수는 그 윈도를 조작하는데 사용된다. MFC 밖에서(CWnd::Create나 CWnd::CreateEx함수가 아닌) 생성된 윈도를 조작하려면 이 함수를 사용하라. 이것은 시스템 자체나 서드 파티 소프트웨어 라이브러리에서 생성된 윈도이다. CWnd 오브젝트에 윈도를 붙이는 것은 윈도에 전달된 메시지를 자동적으로 받을 수 없게 한다. 메시지를 받는 자세한 내용은 CWnd::SubclassWindow 함수를 참고하라.
2. 구문 : public BOOL Attach(HWND hWndNew);
3. 파라미터
hWndNew – CWnd 오브젝트에 붙어 있게 될 윈도 핸들.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l Detach
1. 설명 : 현재 붙어 있는 윈도우(HWND)에서 CWnd 오브젝트를 떼어낸다. CWnd 오브젝트가 HWND에 붙어 있으면 CWnd는 윈도를 조정하는 데 사용된다. 윈도에서 떨어지면 다시 붙을 때까지 CWnd 오브젝트를 사용할 수 없다.
2. 구문 : public HWND Detach();
3. 파라미터 : 없음.
4. 리턴값 : CWnd 오브젝트에 붙어 있는 HWND.
l FromHandle
1. 설명 : 주어진 윈도 핸들을 CWnd에 대한 포인터로 리턴한다. MFC가 지정 핸들과 관련되는 영구 CWnd를 가지고 있지 않으면 임시 CWnd를 만들어 핸들에 연결한다. 임시 CWnd는 애플리케이션이 윈도에 제어를 리턴할 때 생기는 아이들 루프에 들어갈 때까지 FromHandle에 의해 리턴된 정당한 CWnd를 사용할 수 있도록 아이들 시간 처리 동안 자동적으로 파괴된다.
2. 구문 : static CWnd* PASCAL FromHandle( HWND hWnd );
3. 파라미터
hWnd – CWnd 오브젝트와 관련되는 윈도 핸들.
4. 리턴값 : 임시적인 새로운 CWnd에 대한 포인터.
l GetSafeHwnd
1. 설명 : CWnd 오브젝트와 현재 관련된 윈도 핸들을 리턴한다. NULL CWnd를 호출한다 해도 안전(safe)하기 때문에 GetSafeHwnd라 부른다.
2. 구문 : HWND GetSafeHwnd() const;
3. 파라미터 : 없음.
4. 리턴값 : CWnd 오브젝트와 현재 관련된 현재 관련된 윈도 핸들. CWnd가 NULL이거나 윈도에 관련된 핸들이 없으면 NULL.
l CreateEx
1. 설명 : 주어진 특징과 스타일로 윈도를 생성하고 그 윈도를 CWnd 오브젝트와 관련시킨다. 확장된 스타일로 된 윈도, 예를 들어 투명 윈도를 생성하려면 CWnd::Create 함수 대신에 이 함수를 사용하라.
2. 구문 : public virtual BOOL CreateEx( DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent, HMENU nID 또는 HMenu, LPVOID lpParam = NULL );
3. 파라미터
dwExStyle – 확장된 윈도 스타일.
lpszClassName – 윈도로 사용할 윈도 클래스의 이름을 갖는 널로 끝나는 문자열에 대한 포인터. NULL이면 MFC는 대부분의 경우에 충분히 만족할 수 있는 기본 윈도 클래스를 사용한다. 자기 자신의 윈도 클래스를 등록하기 위하여 AfxRegisterWndClass 함수를 사용할 수 있다.
LpszWindowName – 윈도의 이름을 갖는 널로 끝나는 문자열에 대한 포인터. 이 윈도의 이름은 캡션으로 표시된다.
DwStyle – 윈도를 생성할 때 사용되는 윈도 스타일. WS_POPUP 스타일이 사용될 수 없다는 것에 유의하라. 팝업 윈도를 생성하기 위하여 CWnd::CreateEx함수를 사용하라.
X – 부모윈도의 사용자 좌표로 표시되는 윈도의 왼쪽 상단의 x좌표.
Y – 부모윈도의 사용자 좌표로 표시되는 윈도의 왼쪽 상단의 y좌표.
NWidth – 윈도의 폭.
NHeight – 윈도의 높이.
hwndPrent – 윈도의 부모 윈도의 핸들.
NIDorHMenu – 윈도 스타일에 따라 할당되는 윈도나 메뉴 ID. 이 ID를 사용하여 부모윈도에 있는 자식 윈도를 참조한다. 예를 들어, CWnd::GetDlgItem 함수는 ID로 주어진 자식 윈도에 대한 포인터를 얻는다.
LpParam – 사용자 데이터에 대한 포인터. 이 파라미터에 대해 어떤 포인터도 전달할 수 있다. 이 포인터는 CREATESTRUCT 구조체의 lpCreteParams로 CWnd::OnCreate 핸들러에 전달된다.
4. 리턴값 : 윈도가 생성되면 비제로, 그렇지 않으면 0.
WS_EX_ACCEPTFILES |
드래그 앤 드롭 파일을 받아들이는 윈도를 생성한다. |
WS_EX_APPWINDOW |
최상위 레벨 윈도가 이이콘으로 표시되면 그 윈도를 작업표시줄에 넣는다. |
WS_EX_CLIENTEDGE |
윈도의 테두리에 움푹 들어간 가장자리가 있다. |
WS_EX_CONTEXTHELP |
윈도의 타이틀 바에 (?)표시를 둔다. 사용자가 이 표시를 클릭하면 커서가 물음표 표시가 있는 포인터로 바뀐다. 그 후 자식 윈도를 클릭하면 그 자식 윈도가 WM_HELP 메시지를 받는다. |
WS_EX_CONTROLPARENT |
사용자가 TAB키를 눌러서 자식 윈도 사이를 왔다갔다 할 수 있게 한다. |
WS_EX_DLGMODALFRAME |
이중 테두리를 가진 윈도를 생성한다. 타이틀을 추가하려면 dwStyle값에 WS_CAPTION을 넣는다. |
WS_EX_LEFT |
“좌측 정렬” 속성을 가진 윈도우를 생성한다. 디폴트. |
WS_EX_LEFTSCROLLBAR |
수직 스크롤바를 만들 경우 클라이언트 영역의 왼쪽에 둔다. |
WS_EX_LERREADING |
왼쪽에서 오른쪽으로 읽는 텍스트를 가진 윈도를 생성한다. 디폴트. |
WS_EX_MDICHILD |
MDI 자식 윈도를 생성한다. |
WS_EX_NOPARENTNOTIFY |
WM_PARENTNOTIFY 메시지를 보내지 않는다. |
WS_EX_OVERLAPPEDWINDOW |
WS_EX_CLIENTEDGE와 WS_EX_WINDOEDGE 스타일의 조합이다. |
WS_EX_PALETTEWINDOW |
WS_EX_WINDOWEDGE, WS_EX_SMCAPTION, WS_EX_TOPMOST 스타일의 조합이다. |
WS_EX_RIGHT |
“우측 정렬” 속성을 가진 윈도를 생성한다. |
WS_EX_RIGHTSCROOLBAR |
수직 스크롤바를 만들 경우 클라이언트 영역으 오른쪽에 둔다. 디폴트. |
WS_EX_RTLREADING |
오른쪽에서 왼쪽으로 읽는 텍스트를 가진 윈도를 생성한다. |
WS_EX_STATICEDGE |
입체감 있는 테두리 스타일의 윈도를 생성한다. 사용자 입력을 받아들이지 않는 항목에 이 스타일을 사용한다. |
WS_EX_TOOLWINDOW |
도구(tool) 윈도를 생성한다. 도구 윈도는 위치 이동이 가능한 도구 상자에서 사용된다. |
WS_EX_TOPMOST |
최상위 레벨이 아닌 모든 윈도위에 두고자 하는 윈도를 생성한다. |
WS_EX_TRANSPRENT |
투명한 윈도를 생성한다. 이 윈도에 의해서 가려지는 동기간 윈도는 WM_PAINT 메시지를 먼저 받고 그 후 투명한 모양으로 윈도가 생성된다. |
WS_EX_WINDOWEDGE |
가장자리가 돌출된 테두리가 있는 윈도를 생성한다. |
l CreateControl
1. 설명 : CWnd 객체에 의해 MFC 프로그램에서 나타날 OLE 컨트롤을 생성하는데 사용한다. CreateControl은 CWnd::Create 함수의 직접적인 아날로그로서, CWnd를 위한 윈도를 생성 시킨다. CreateControl은 일상적인 윈도 대신 OLE 컨트롤을 생성시킨다. 단지 윈도 dwStyle 플래그의 서브 세트만이 CreateControl을 지원한다.( WS_VISIBLE, WS_DISABLED, WS_BORDER, WS_GROUP, WS_TABSTOP )
2. 구문 : BOOL CreateControl( LPCTSTR lpszClass{REFCLSID clsid}, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, Cfile* pPersist = NULL, BOOL bStorage = FALSE, BSTR bstrLieKey = NULL );
3. 파라미터
lpszClass – 생성될 컨트롤의 클래스를 대표하는 스트링에 대한 포인터이다.
lpszWindowName – 컨트롤에 표시된 텍스트에 대한 포인터이다. 컨트롤의 Caption표시.
dwStyle – Window 스타일.
rect – 컨트롤의 크기나 위치를 지정한다.
pParentWnd – 컨트롤의 부모 윈도를 지정한다. 이 값이 NULL이면 안된다.
nID – 컨트롤 ID를 지정한다.
pPersist – 컨트롤을 위한 지속적인 상태를 포함하는 Cfile에 대한 포인터이다. 디폴트 값은 NULL이며, 그것은 이 컨트롤을 위해 어느 지속적인 상태도 부하가 가해지지 않음을 가리킨다.
bStorage – 데이터가 IStorage 데이터(TRUE) 또는 IStream 데이터(FALSE)로서 해석이 가능해야 한다. 디폴트 값은 FALSE이다.
bstrLicKey – 선택적인 라이센스 키 데이터이다. 이 데이터는 단지 런타임 라이센스 키가 요구되는 생성 컨트롤에서만 필요하다. 디폴트 값은NULL이다.
clsid – 컨트롤을 위한 유일한 클래스 ID이다.
4. 리턴값 : 성공적으로 수행될 경우 0 이외의 값이며, 작동이 실패할 경우 0 이다.
윈도 상태 함수
l IsWindowEnable
1. 설명 : CWnd이 마우스와 키보드 입력에 대해 실행 가능한지를 지정한다.
2. 구문 : BOOL IsWindowEnable() const;
3. 파라미터 : 없음.
4. 리턴값 : 윈도가 사용할 수 있으면 비제로, 그렇지 않으면 0.
l EnableWindow
1. 설명 : 마우스의 입력과 키보드의 입력을 가능하거나 불가능하게 한다. 입력이 불가능하면, 마우스 클릭이나 키스느로크와 같은 입력은 무시된다. 입력이 가능하면, 윈도는 모든 입력을 처리한다. 마일 실행 가능 상태가 변한다면, WM_ENABLE 메시지가 이 함수가 리턴되기 전에 보내진다. 만일 불가능 상태이면, 비록 WM_ENABLE 메시지가 전달 되었어도 암시적으로 불가능하다. 윈도는 반드시 활동하기 전에 가능하게 되어야 한다. 디폴트로, 윈도는 그것이 생성될 때 사용 가능하다. 초기에 사용 불가능한 윈도를 생성하기 위해 Create 또는 CreateEx 멤버 함수에서 애플리케이션은 WS_DISABLED 스타일을 지정할 수 있다. 윈도가 생성된 후 애플리케이션은 또한 윈도를 사용가능하거나 불가능으로 만들기 위해 EnableWindow 멤버 함수를 이용한다.
애플리케이션은 다이얼로그 박스에서 컨트롤을 사용 가능하거나 불가능하게 만들기 위해 이 함수를 이용할 수 있다. 불가능한 컨트롤은 입력 초점을 받지 못하거나, 액세스할 수도 없다.
2. 구문 : BOOL EnableWindow( BOOL bEnable = TRUE );
3. 파라미터
bEnable – 윈도가 사용할 수 있게 하려면 TRUE, 사용할 수 없게 하려면 FALSE.
4. 리턴값 : 윈도가 이전에 사용할 수 없게 되어 있으면 TRUE, 사용할 수 있게 되어 있으면FALSE.
l GetActiveWindow
1. 설명 : 현재 활성화된 윈도에 대한 포인터를 얻는다. 활성화 윈도는 입력 초점을 갖는 윈도나 CWnd::SetActiveWindow 함수에 대한 호출로 활성화 된 윈도이다.
2. 구문 : static CWnd* PASCAL GetActiveWindow();
3. 파라미터 : 없음.
4. 리턴값 : 활성화된 윈도에 대한 포인터나 어떤 윈도도 현재 활성화되지 않았다면 NULL. 리턴 포인터는 임시적이고 나중 사용을 위하여 보관하지 않아야 한다. 임시 CWnd는 애플리케이션이 윈도에 제어를 리턴할 때 일어나는 아이들 루프에 들어갈 때까지 GetActiveWindow에 의해 리턴되는 정당한 CWnd를 사용할 수 있도록 아이들 시간 처리 동안 자동적으로 파괴된다.
l SetActiveWindow
1. 설명 : 윈도를 활성화 윈도로 만든다.
2. 구문 : CWnd* SetActiveWindow();
3. 파라미터 : 없음.
4. 리턴값 : 이전에 활성화된 윈도에 대한 포인터. 리턴 포인터는 임시적이고 나중 사용을 위하여 보관되지 않아야 한다. 임시 CWnd는 애플리케이션이 윈도에 제어를 리턴할 때 일어나는 아이들 루프에 들어갈 때까지 SetActiveWindow에 의해 리턴되는 정당한 CWnd를 사용할 수 있도록 아이들 시간 처리 동안 자동적으로 파괴된다.
l GetCapture
1. 설명 : 마우스 캡처를 갖는 윈도에 대한 포인터를 얻는다. 한 번에 단 하나의 윈도만이 마우스 캡처를 가질 수 있다. 윈도는 CWnd::SetCapture 함수를 호출하여 마우스를 캡처한다. 윈도가 캡처된 마우스를 가질 때, 커서 위치가 윈도 내에 없더라도 마우스 메시지를 받는다.
2. 구문 : static CWnd* PASCAL GetCapture();
3. 파라미터 : 없음.
4. 리턴값 : 마우스 캡처를 갖는 윈도에 대한 포인터나 마우스 캡처를 갖지 않으면 NULL. 리턴 포인터는 임시적이고 나중 사용을 위하여 보관되지 않아야 한다. 임시 CWnd는 애플리케이션이 윈도에 제어를 리턴할 때 일어나는 아이들 루프에 들어갈 때 까지 GetActiveWindow에 의해 리턴되는 정당한 CWnd를 사용할 수 있도록 아이들 시간 처리 동안 자동적으로 파괴된다.
l SetCapture
1. 설명 : 커서가 이 윈도우 위에 있는가에 관계없이 모든 마우스 메시지가 이 윈도에 보내지게 한다. 마우스 메시지는 CWnd::ReleaseCapture 함수가 호출될 때까지 잡힌다(Capture). 종종 사용자가 왼쪽 마우스 버튼을 누를 때 이 함수를 호출하고 버튼이 해제될 때 캡처를 해제한다.
2. 구문 : CWnd* SetCapture();
3. 파라미터 : 없음.
4. 리턴값 : 전에 캡처를 갖는 윈도에 대한 포인터. 아무 것도 없으면 NULL. 리턴 포인터는 임시 적이고 나중 사용을 위하여 보관되지 않아야 한다. 임시 CWnd는 애플리케이션이 윈도우에제어를 리턴할 때 일어나는 아이들 루프에 들어갈 때까지 SetCapture에 의해 리턴되는 정당한 CWnd를 사용할 수 있도록 아이들 시간 처리 동안 자동적으로 파괴된다.
l GetFocus
1. 설명 : 현재 입력 초점을 갖는 윈도에 대한 포인터를 리턴한다.
2. 구문 : static CWnd* PASCAL GetFocus();
3. 파라미터 : 없음.
4. 리턴값 : 현재 입력 초점을 갖는 CWnd에 대한 포인터. 이 포인터는 임시적이고 나중 사용을 위하여 보관되지 않아야 한다. 임시 CWnd는 애플리케이션이 윈도에 제어를 리턴할 때 일어나는 아이들 루프에 들어갈 때까지 GetFocus에 의해 리턴되는 정당한 CWnd를 사용할 수 있도록 아이들 시간 처리 동안 자동적으로 파괴된다.
l SetFocus
1. 설명 : 입력을 위해 선택된 것을 알린다. 입력 초점은 모든 키보드 입력을 윈도에 직접 전달한다. 이미 입력 초점을 가졌던 윈도는 입력 초점을 잃지 않는다. SetFocus함수는 WM_KILLFOCUS를 윈도에 보내 입력 초점을 잃게 하고 WM_SETFOCUS를 보내 입력 초점을 받아들이게 한다. 그 윈도나 부모 윈도를 활성화시킨다. 어떤 윈도도 초점을 가지고 있지 않았을 때 키가 눌러지면 WM_SYSCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP 메시지를 발생한다.
2. 구문 : CWnd* SetFocus();
3. 파라미터 : 없음.
4. 리턴값 : 초점을 가진 윈도 객체에 대한 포인터. 이런 객체가 없으면 NULL을 리턴한다. 리턴된 포인터는 일시적이며 저장될 수 없다.
l GetDesktopWindow
1. 설명 : 데스크탑 윈도에 대한 포인터를 얻는다. 데스크탑 윈도는 전체 윈도를 나타내는 바탕 화면이고, 그위에 모든 윈도가 그려진다. 이 포인터는 임시 적이고 나중 사용을 위하여 보관되지 않아야 한다.
2. 구문 : static CWnd* PASCAL GetDesktopWindow();
3. 파라미터 : 없음.
4. 리턴값 : 데스크탑 윈도에 대한 포인터.
l ModifyStyle
1. 설명 : 특정 스타일 플래그를 추가하고 다른 특정 스타일 플래그를 제거하여 이 윈도와 관련된 윈도 스타일을 수정한다. 또한 nFlags가 0 이외의 값이면, ModifyStyle은 ::SetWindowPos 함수를 호출하여 다음의 네 가지, 미리 설정된 플래그와 조합하여 윈도를 다시 그린다.
SWP_NOSIZE – 현재의 크기를 유지한다.
SWP_NOMOVE – 현재의 위치를 유지한다.
SWP_NOZORDER – 현재의 Z순서를 유지한다.
SWP_NOACTIVATE – 윈도를 활성화 시키지 않게 한다.
2. 구문 : BOOL ModifyStyle( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );
3. 파라미터
dwRemove – 윈도에서 제거되는 윈도 스타일 플래그의 조합.
dwAdd – 윈도에서 추가되는 윈도 스타일 플래그의 조합.
NFlags – SetWindowPos호출에 전달되는 SetWindowPos 플래그. 플래그 SWP_NOSIZE, SWP_NOMOVE, SWP_NOZORDER, SWP_NOACTIVATE는 ModifyStyle에 필요한 파라미터를 기술하는 어떤 방법도 없기 때문에 자동적으로 사용된다. 이 파라미터가 0이면 SetWindowPos는 호출되지 않는다.
4. 리턴값 : 성공하면 비제로, 그렇지 않으면 0.
[ SetWindowPos의 nFlags 값 ]
SWP_DRAWFRAME |
윈도우 주위에 윈도 클래스의 정의에 따라 프레임을 그린다. |
SWP_FRAMECHANGED |
윈도의 크기가 바뀌지 않더라도 윈도에 WM_NCCALCSIZE 메시지를 강제로 보내게 한다. |
SWP_HIDEWINDOW |
윈도를 숨긴다. |
SWP_NOACTIVATE |
윈도를 활성화 시키지 않는다. |
SWP_NOCOPYBITS |
클라이언트 영역의 내용을 복구 시키지 않는다. |
SWP_NOMOVE |
X와 Y값을 무시한다. 윈도의 크기는 변경만 가능하다. |
SWP_NOOWNERZORDER |
Z-order에서 소유자 윈도의 위치를 변경시키지 않는다. |
SWP_NOREDRAW |
윈도 이동이 있은 후에도 다시 그리는 일을 하지 않게 한다. 그릴 필요가 있는 부분은 응용프로그램이 분명히 무효화 시키고 다시 그려야 한다. |
SWP_NOREPOSITION |
SWP_NOOWNERZORDER 플래그와 같다. |
SWP_NOSENDCHANGING |
윈도가 WM_WINDOWPOSCHANGING 메시지를 받지 못하게 한다. |
SWP_NOSIZE |
cx와 cy 값을 무시한다. 윈도의 이동만 가능하다. |
SWP_NOZORDER |
hwndInsertAfter 값을 무시한다. |
SWP_SHOWWINDOW |
윈도를 출력한다. |
l ModifyStyleEx
1. 설명 : 특정 스타일 플래그를 추가하고 다른 특정 스타일 플래그를 제거하여 이 윈도에 관련되는 윈도 스타일을 수정한다. 또한, ModifyStyleEx는 임으로 특정 플래그로 ::SetWindowPos 함수를 호출한다.
2. 구문 : BOOL ModifyStyleEx( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );
3. 파라미터
dwRemove – 윈도에서 제거되는 윈도 확장 스타일 플래그의 조합.
dwAdd – 윈도에 추가되는 윈도 확장 스타일 플래그의 조합.
nFlags – SetWindowPos 호출에 전달되는 SetWindowPos 플래그. 플래그 SWP_NOSIZE, SWP_NOMOVE, SWP_NOZORDER, SWP_NOACTIVATE는 ModifyStyle에 필요한 파라미터를 기술하는 어떤 방법도 없기 때문에 자동적으로 사용된다. 이 파라미터가 0이면 SetWindowPos는 호출되지 않는다.
4. 리턴값 : 성공하면 비제로, 그렇지 않으면 0.
윈도의 크기와 위치
l IsIconic
1. 설명 : CWnd가 최소화(아이콘화)되는지의 여부를 지정한다.
2. 구문 : BOOL IsIconic() const;
3. 파라미터 : 없음.
4. 리턴값 : CWnd가 최소화되었으면 비제로, 그 외의 경우에는 0이다.
l IsZoomed
1. 설명 : 윈도가 최대 화면인가 아닌가를 판단한다.
2. 구문 : BOOL IsZoomed() const;
3. 파라미터 : 없음.
4. 리턴값 : 윈도가 최대 화면이면 비제로, 그렇지 않으면 0.
l MoveWindow
1. 설명 : 윈도가 특정 위치로 이동시키고 특정 크기로 조정한다. 이 함수로 윈도를 이동할 때 , 윈도는 윈도에 WM_GETMINMAXINFO 메시지를 보낸다. 이 메시지는 윈도의 크기와 위치를 제어할 기회를 윈도에 준다.
2. 구문 : void MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE );
void MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE );
3. 파라미터
x – 윈도의 왼쪽 상단의 새 x좌표. 이 윈도가 최상위 윈도이면, x는 스크린의 왼쪽 상단을 기준으로 한다. 이 윈도가 자식 윈도이면, x는 부모 윈도의 사용자 영역의 왼쪽 상단을 기준으로 한다.
y – 윈도의 왼쪽 상단의 새 y좌표. 이 윈도가 최상위 윈도이면, y는 스크린의 왼쪽 상단을 기준으로 한다. 이 윈도가 자식 윈도이면, y는 부모 윈도의 사용자 영역의 왼쪽 상단을 기준으로 한다.
nWidth – 윈도의 새 폭.
nHeight- 윈도의 새 높이.
bRepaint – 윈도가 다시 칠해져야 하면 TRUE, 그렇지 않으면 FALSE. 이 파라미터에 FALSE를 전달하면 어떤 다시 칠하는 것도 발생하지 않는다.
lpRect – 윈도의 새 위치와 크기를 포함하는 RECT 구조체와 CRect 오브젝트에 대한 포인터.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l SetWindowPos
1. 설명 : 윈도의 크기, 위치, 자식 윈도의 Z 순서, 팝업, 상위 레벨을 변경하기 위해 함수를 호출한다. 윈도는 화면에 Z 순서에 따라 나열 되어 있다. 즉 Z 순서 맨 위에 있는 윈도는 화면 맨 위에 나타난다. 모든 자식 윈도의 좌표는 부모 윈도의 사용자 영역 좌측 상단과 연관 있는 사용자 좌표이다.
2. 구문 : BOOL SetWndowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );
3. 파라미터
pWndInsertAfter – 이 윈도가 Z 순서에 넣은 다음의 윈도. 또한, wndBottom, wndTop, wndTopMost, wndNoTopMost 상수중의 하나이다.
wndBottom |
윈도를 Z 순서 끝에 놓는다. 이 CWnd가 맨 위 윈도이면 상위 상태 속성을 잃게 된다. 시스템이 다른 윈도 밑에 이 윈도를 놓기 때문이다. |
wndTop |
윈도를 Z 순서 맨 위에 놓는다. |
wndTopMost |
윈도를 맨 위에 놓는다. 비활성화되더라도 최상위 자리를 유지한다. |
wndNoTopMost |
윈도를 모든 맨 위 윈도가 아닌 윈도 최상 즉 모든 맨 위 윈도 아래 위치에 재 지정한다 이미 그 위치에 있으면 효과가 없다. |
x – 윈도의 왼쪽 상단의 새 x 좌표.
y – 윈도의 왼쪽 상단의 새 y 좌표.
cx – 윈도의 새로운 폭.
cy – 윈도의 새로운 높이.
nFlags - [ SetWindowPos의 nFlags 값 ]의 조합.
4. 리턴값 : 성공하면 비제로, 그렇지 않으면 0.
l BringWindowToTop
1. 설명 : 윈도를 오버랩 윈도의 스택의 맨 위에 올려 놓는다. 윈도가 완전하게 보이게 하려면 이 함수를 사용하라. 이 함수는 윈도의 스타일을 항상 최상위로 만들지는 않는다. 윈도를 항상 최상위로 만들려면, CWnd::SetWindowPos 함수를 사용하라. 윈도가 팝업, 상위 수준이거나 MDI 자식 윈도이면 이 함수는 그 윈도를 활성화시킨다.
2. 구문 : public void BringWindowToTop();
3. 파라미터 : 없음.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l GetWindowRect
1. 설명 : 윈도의 사각형의 좌표를 얻는다. 좌표는 스크린 좌표이다.
2. 구문 : void GetWindowRect( LPRECT lpRect ) const;
3. 파라미터
lpRect – 윈도 좌표로 채워지는 RECT 구조체나 CRect 오브젝트에 대한 포인터.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l GetClientRect
1. 설명 : 윈도의 사용자 영역을 정의하는 사각형을 얻는다. 사각형은 사용자 좌표로 표시되기 때문에 상대적이므로 외쪽 상단은 항상 (0, 0)이다.
2. 구문 : void GetClientRect( LPRECT lpRect ) const;
3. 파라미터
lpRect – 윈도의 사용자 영역의 좌표로 채워지는 RECT 구조체나 CRect 오브젝트에 대한 포인터.
4. 리턴값 : 아무 것도 리턴하지 않는다.
윈도 액세스 함수
l ChildWindowFromPoint
1. 설명 : 주어진 위치를 갖는 자식 윈도를 알아낸다. 주어진 위치가 자식 윈도우 내에 있지않고, CWnd의 사용자 영역의 밖에 있으면, NULL이 리턴된다. 주어진 위치가 CWnd의 하나의 자식윈도 이상에 있을 경우는 발견한 첫번째 윈도가 리턴된다. 이 함수의 두번째 버전은 윈도 95에서 새롭게 제공되고 검색을 위하여 걸러내는 윈도의 타입을 기술할 수 있다. 보이지 않거나 사용할 수 없거나 투명한 윈도는 제거된다.
2. 구문 : public CWnd* ChildWindowFromPoint( POINT pt ) const;
public CWnd* ChildWindowFromPoint( POINT pt, UINT nFlags ) const;
3. 파라미터
pt – 판단할 자식 윈도에 대한 부모 윈도의 사용자 영역의 위치.
nFlags – 건너뛸 자식 윈도를 지정한다. 다음의 값들의 조합으로 이루어질 수 있다.
CWP_ALL |
어떠한 자식 윈도도 건너 뛰지 말라. |
CWP_SKIPINVISIBLE |
보이지 않는 자식 윈도를 건너 뛰어라. |
CWP_SKIPDISABLED |
기능이 억제된 자식 윈도를 건너 뛰어라. |
CWP_SKIPTRANSPARENT |
투명한 자식 윈도를 건너 뛰어라. |
4. 리턴값 : 지정한 위치를 포함하는 자식 윈도를 나타내는 CWnd에 대한 포인터. 지정한 위치가CWnd의 사용자 영역 내에 있지 않으면, NULL이 리턴된다. 지정한 위치가 사용자 영역 내에 있지만 CWnd의 자식 윈도 내에 있지 않으면 CWnd 자체에 대한 포인터가 리턴된다.
l FindWindow
1. 설명 : 지정한 클래스 이름과 윈도 이름을 갖는 톱 레벨 윈도를 찾는다. FindWindow는 자식 윈도를 찾지 못한다.
2. 구문 : static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName )
3. 파라미터
lpszClassName – 원하는 윈도의 클래스 이름을 갖는 NULL로 끝나는 문자열 버퍼에 대한 포인터. 어느 클래스 이름이나 허용되면 NULL일 수 있다.
lpszWindowName – 원하는 윈도의 윈도 이름을 갖는 NULL로 끝나는 문자열 버퍼에 대한 포인터. 어느 윈도우 이름이나 허용되면 NULL일 수 있다.
4. 리턴값 : 일치하는 CWnd 오브젝트에 대한 포인터, 또는 어느 것도 발견되지 않으면 NULL. 이 포인터는 나중에 사용하기 위하여 보관되지 않도록 임시적이어야 한다.
l GetNextWindow
1. 설명 : 윈도 매니저 리스트에 있는 다음이나 이전 윈도에 대한 포인터를 얻는다. 윈도 메니저 리트스는 최상위 윈도들과 그들과 연관된 자식 윈도, 그리고 어떠한 자식 윈도의 자식윈도에 대한 앤트리들을 포함한다. 이 윈도가 최상위 윈도이면, 이 함수는 다음이나 이전 최상위 윈도를 찾는다. 이 윈도가 자식 윈도이면, 이 함수는 다음이나 이전 자식 윈도를 찾는다.
2. 구문 : CWnd* GetNextWindow( UINT nFlag = GW_HWNDNEXT ) const;
3. 파라미터
nFlag – 다음 윈도를 얻기 위해서는 GW_HWNDNEXT나 이전 윈도를 얻기 위해서는 GW_HWNDPREV.
4. 리턴값 : 멤버 함수가 동작에 성공하면 윈도 메니저의 리스트에 있는 다음의(또는 이전의) 윈도를
확인한다. 리턴된 포인터는 일시적일 수 있으며, 나중에 사용하려고 저장할 수 없다.
l GetOwner
1. 설명 : 윈도의 소유자에 대한 포인터를 얻는다. 윈도가 소유자가 없다면, 부모 윈도 객체에 대한 포인터가 디폴트로 리턴된다. 소유자와 소유된 윈도 사이의 관계가 여러 가지 중요한 면에서 부모-자식 윈도의 관계와는 다르다는 것에 주의한다. 예를 들어, 부모를 지닌 윈도는 그것의 부모 윈도의 클라이언트 영역에 국한된다. 소유된 윈도는 데스크탑의 어떠한 위치에서도 이끌어 낼 수 있다.
2. 구문 : CWnd* GetOwner() const;
3. 파라미터 : 없음.
4. 리턴값 : 이 윈도의 오너 윈도에 대한 포인터. 이 포인터는 나중 사용을 위하여 보관되지 않아야 한다.
l SetOwner
1. 설명 : 이 윈도의 오너를 특정 윈도로 변경한다. 기본적으로, 윈도의 오너는 자신의 부모이다. 오너를 다른 윈도로 설정하는 것은 윈도에서 자신의 부모보다는 다른 윈도에 알림 코드가 전달되게 한다. 이 특징은 자식 윈도의 부모가 컨테이너 애플리케이션에 있지만 오너는 서브 애플리케이션에 뒤에 있는 MFC OLE 구현에서 많이 사용된다.
2. 구문 : void SetOnwer( CWnd* pOnwerWnd );
3. 파라미터
pOnwerWnd – 윈도의 새로운 오너. 윈도가 어떤 오너도 갖지 않으면 NULL이다.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l GetParent
1. 설명 : 이 윈도의 부모 윈도를 얻는다.
2. 구문 : CWnd* GetParent() const;
3. 파라미터 : 없음.
4. 리턴값 : 이 윈도의 부모 윈도에 대한 포인터. 이 포인터는 나중 사용을 위하여 보관되지 않아야 한다. 이 함수는 CWnd 오브젝트가 윈도에 붙어 있지 않거나 윈도가 부모 윈도를 갖지 않으면 NULL를 리턴한다.
l SetParent
1. 설명 : 이 윈도의 부모를 특정 윈도로 변경한다. 이 자식 윈도가 보이면, 필요한 다시 그리기가 자동적으로 행해진다.
2. 구문 : CWnd* SetParent( CWnd* pWndNewParent );
3. 파라미터
pWndNewParent – 새로운 부모 윈도에 대한 포인터.
4. 리턴값 : 이전 부모 윈도에 대한 포인터. 리턴 포인터는 임시적이고 나중 사용을 위하여 보관되지 않아야 한다.
l GetTopWindow
1. 설명 : 이 윈도의 최상위 자식 윈도를 얻는다. 이 윈도가 어떤 자식 윈도도 갖지 않으면 NULL을 리턴한다.
2. 구문 : CWnd* GetTopWindow() const;
3. 파라미터 : 없음.
4. 리턴값 : 이 윈도의 최상위 자식 윈도에 대한 포인터. 이 포인터는 나중 사용을 위하여 보관되지 않도록 임시적이어야 한다.
l GetWindow
1. 설명 : 이 윈도와 특정 관계를 갖는 윈도에 대한 포인터를 얻는다.
2. 구문 : CWnd* GetWindow( UINT nCmd ) const;
3. 파라미터
nCmd – 이 윈도와 원하는 윈도 사이의 관계를 나타내는 상수. 다음 값 중의 하나이다.
GW_CHILD |
윈도의 첫번째 자식 윈도를 얻는다. |
GW_HWNDFIRST |
이 윈도가 자식 윈도이면, 부모가 같은 첫번째 윈도를 얻고 그렇지 않으면 첫번째 최상위 윈도를 얻는다. |
GW_HWNDLAST |
이 윈도가 자식 윈도이면, 부모가 같은 마지막 윈도를 얻고 그렇지 않으면 마지막 최상위 윈도를 얻는다. |
GW_HWNDNEXT |
윈도 관리자 리스트에 있는 다음 윈도를 얻는다. |
GW_HWNDPREV |
윈도 관리자 리스트에 있는 이전 윈도를 얻는다. |
GW_OWNER |
윈도의 오너를 얻는다. |
4. 리턴값 : 요청한 윈도에 대한 포인터.
l GetLastActivePopup
1. 설명 : CWnd에 의해 소유된 팝업 윈도 중 가장 최근 활성화된 팝업 윈도를 결정한다.
2. 구문 : CWnd* GetLastActivePopup() const;
3. 파라미터 : 없음.
4. 리턴값 : 가장 최근에 활성화된 팝업 윈도에 대한 포인터. 리턴값은 다음의 내용 중 일치하는 것이 있으면 윈도 그 자체가 된다.
¨ 윈도 자체가 가장 최근에 활성화 되었다.
¨ 윈도는 어떠한 팝업 윈도들을 가지고 있지 않다.
¨ 윈도는 최상위 윈도가 아니거나 다른 윈도에 의해 소유된다.
이 포인터는 나중 사용을 위하여 보관되지 않아야 한다.
l IsChild
1. 설명 : 특정 윈도가 자식 윈도인지 이 윈도의 후손 윈도인가를 판단한다.
2. 구문 : BOOL IsChild( const CWnd* pWnd ) const;
3. 파라미터
pWnd – 검사할 윈도에 대할 포인터.
4. 리턴값 : 윈도가 이 윈도의 자식 윈도이거나 후손이면 비제로, 그렇지 않으면 0.
l GetDlgItem
1. 설명 : 다이얼로그 박스 또는 다른 윈도에 있는 특정한 컨트롤이나 자식 윈도에 대한 포인터를 검색한다. 리턴된 포인터는 일상적으로 nID에 의해 식별된 컨트롤의 타입에 속하게 된다.
2. 구문 : CWnd* GetDlgItem( int nID ) const;
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
3. 파라미터
nID – 얻을 자식 윈도 ID.
phWnd – 지정 자식 윈도 핸들로 채워지는 HWND에 대한 포인터.
4. 리턴값 : 첫번째 형식의 함수는 지정 자식 윈도에 대한 포인터를 리턴하거나 자식윈도가 존재하지 않으면 NULL.
l GetDlgCtrlID
1. 설명 : 윈도나 어떠한 자식 윈도의 컨트롤 ID값 또는, 다이얼로그 박스에서 컨트롤의 ID 값들을 리턴한다. 최상위 윈도들이 ID 값을 갖지 않으므로, 이 함수의 리턴 값은 CWnd가 최상위 윈도라면 유효하지 않다.
2. 구문 : int GetDlgCtrlID() const;
3. 파라미터 : 없음.
4. 리턴값 : 자식 윈도 ID.
l SetDlgCtrlID
1. 설명 : 윈도 ID나 컨트롤 ID에 새로운 값을 설정한다. 이 윈도는 다이얼로그 박스에 있는 컨트롤이나 자식 윈도는 가능하지만 상위 레벨 윈도는 가능하지 않다.
2. 구문 : int SetDlgCtrlID( int nID );
3. 파라미터
nID – 컨트롤, 자식윈도 새로운 ID.
4. 리턴값 : 컨트롤, 자식윈도 이전 ID.
l GetParentFrame
1. 설명 : 이 윈도의 부모 프레임에 대한 포인터를 얻는다. 이 윈도에 대한 어떤 부모 프레임 윈도가 아니면, GetParentFrame은 NULL을 리턴한다.
2. 구문 : CWnd* GetParentFrame() const;
3. 파라미터 : 없음.
4. 리턴값 : 부모 프레임 윈도에 대한 포인터. 이 포인터는 나중에 사용을 위하여 보관되지 않아야 한다.
l UpdateData
1. 설명 : 다이얼로그 데이터 교환과 확인을 한다. 이 함수는 몇 가지 초기화 작업을 수행하고 실제 데이터 교환과 확인을 수행하기 위하여 CWnd의 CWnd::DoDataExchange 멤버를 호출한다. 보통 MFC는 CDialog::OnInitDialog함수에서 다이얼로그 컨트롤을 초기화하고 CDialog::OnOK의 기본 구현에서 다이얼로그로부터 데이터를 얻기 위하여 이 함수를 자동으로 호출한다.
2. 구문 : BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
3. 파라미터
bSaveAndValidate – TRUE는 데이터가 윈도에서 얻어지고 임의로 확인되어야 한다는 것을 나타내고, FALSE는 데이터가 윈도에 보내야 한다는 것을 나타낸다.
4. 리턴값 : 성공하면 비제로, 그렇지 않으면 0.
l BeginPaint
1. 설명 : 칠하기 위하여 윈도를 준비하고 칠하기 위한 디바이스 컨텍스트를 생성하고 리턴한다. PAINTSTRUCT 구조체에 칠하는 정보를 체운다. 전형적으로 WM_PAINT 메시지에 응답하기 위해서만 이 함수를 호출한다. 이 함수를 호출하면 칠하기를 끝냈을 때에 반드시 CWnd::EndPaint를 호출하여야 한다. 보통 MFC CPaintDC 클래스는 윈도 칠하기를 캡슐화했기 때문에 이 함수를 호출할 필요는 없다. 윈도 갱신 영역이 지워지기 위하여 마크되면 BeginPaint는 윈도에 WM_ERASEBKGND 메시지를 보낸다. 칠해지는 영역에 카렛을 포함하고 있으면 BeginPaint는 자동적으로 칠하여 카렛이 지위지지 않도록 숨긴다.
2. 구문 : public CDC* BeginPaint( LPPAINTSTRUCT lpPaint );
3. 파라미터
lpPaint – PAINTSTRUCT에 대한 구조체.
4. 리턴값 : 칠하는 데 사용되는 CDC 오브젝트에 대한 포인터.
l EndPaint
1. 설명 : WM_PAINT 메시지에 응답하여( CWnd::OnPaint 메시지 핸들러 ) 칠하려고 하는 윈도를 칠하였을 때 이 함수를 호출한다. 이 함수는 CWnd::BeginPaint 함수의 호출로 할당된 디바이스 컨텍스트를 해제한다. 종종 자신의 생성자와 소멸자 내에서 BeginPaint와 EndPaint를 호출을 캡슐화하는 CPaintDC를 사용하는 것이 더 쉽다.
2. 구문 : void EndPaint( LPPAINTSTRUCT lpPaint );
3. 파라미터
lpPaint – CWnd::BeginPaint 호출에 응답으로 제공되는 PAINTSTRUCT 구조체에 대한 포인터.
4. 리턴값 : 아무 것도 리터하지 않는다.
l GetDC
1. 설명 : 윈도의 사용자 영역에 대한 디바이스 컨텍스트를 얻는다. 보통 리턴된 디바이스 컨텍스트는 일반 디바이스 컨텍스트이다. 그러나 윈도우 클래스에 사용되는 스타일 플래그에 따라 개인 또는 클래스 디바이스 컨텍스트가 리턴된다. CS_OWNDC, CS_PARENTDC와 CS_CLASSDC 플래그는 기능을 제어한다. 디바이스가 컨텍스트가 윈도 클래스에 속하지 않으면, ReleaseDC 멤버 함수는 반드시 색칠이 끝난 후에 상황을 풀기 위해 호출되어야 한다. 시스템은 전체 5개의 일반 디바이스 컨텍스트로 제한하기 때문에 16비트 윈도(그리고 Win32s)에서 ReleaseDC를 사용하는 것은 아주 중요하다.
2. 구문 : CDC* GetDC();
3. 파라미터 : 없음.
4. 리턴값 : 디바이스 컨텍스트에 대한 포인터. 이 포인터는 임시적이고 나중 사용을 위하여 보관 되지 않아야 한다.
l GetWindowDC
1. 설명 : 캡션 바, 메뉴들, 그리고 스크롤 바들을 포함하는 전체 윈도에 대한 디스플레이 내용을 얻는다. 클라이언트 영역을 대신하여 내용의 원점이 CWnd의 왼쪽상단 구석이므로, 윈도 디스플레이 내용은 CWnd의 어느 곳에서나 색칠하기를 허용한다. 디포트 속성은 그것이 내용을 얻을 때마다. 디스플레이 내용에 할당된다. 이전의 속성은 잃어버린다. GetWindowDC는 CWnd 비클라이언트 영역 안의 특별한 색칠 효과에 사용되는 의도가 있다. 어떤 윈도의 비클라이언트 영역의 색칠은 추천되지 않는다. GetSystemMetrics Windows 함수는 캡션 바나, 메뉴, 그리고 스크롤 바와 같은 비클라이언트 영역의 다양한 부분들의 치수들을 얻기 위해 사용될 수 있다. 색칠이 완료된 후, ReleaseDC 멤버 함수는 반드시 디스플레이 내용을 해제하기 위해 호출되어야 한다. 디스플레이 내용의 해제에 실패하면 동시에 오픈될 수 있는 디바이스 내용의 수에 제한이 있어서 애플리케이션에 의해 요청된 색칠에 심각한 영향을 미친다.
2. 구문 : CDC* GetWindowDC();
3. 파라미터 : 없음.
4. 리턴값 : 전체 윈도 영역에 대한 디바이스 컨텍스트에 대한 포인터. 이 포인터는 임시적이고 나중 사용을 위하여 보관 되지 않아야 한다.
l ReleaseDC
1. 설명 : CWnd::GetDC나 CWnd::GetDCEx 함수를 사용하여 얻어지는 디바이스 컨텍스트를 해제한다.
2. 구문 : int ReleaseDC( CDC* pDC );
3. 파라미터
pDC – 해제되는 디바이스 컨텍스트에 대한 포인터.
4. 리턴값 : 성공하면 비제로, 그렇지 않으면 0.
l Invalidate
1. 설명 : 윈도의 전 클라이언트 영역을 무효화한다. 이 함수를 호출하는 것은 MULL 사각형 포인터로 CWnd::InvalidateRect를 호출하는 것과 동일하다. 윈도의 무효화 영역은 현재 갱신 영역에 모인다. 갱신 영역은 윈도가 WM_PAINT 메시지를 보내는 다음 번에 칠하는 윈도의 영역이다. 윈도는 갱신 영역이 비어있지 않고 애플리케이션에 대해 대기한 그 이상의 메시지가 없을 때에만 윈도에 칠하기 명령을 보낸다.
2. 구문 : void Invalidate( BOOL bErase = TRUE );
3. 파라미터
bErase – 칠하기 전에 갱신 영역은 지워야 한다면 TRUE. 갱신 영역의 어떤 부분을 지우기 마크되면 전체 갱신 영역이 지워진다. 영역은 윈도에 WM_ERASEBKGND 메시지를 보내 지워진다.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l InvalidateRect
1. 설명 : 특정 사각형을 무효화로 만든다. 윈도의 무효화 영역은 현재 갱신 영역에 쌓인다. 갱신 영역은 윈도가 윈도에 WM_PAINT 메시지를 보내는 다음 번에 칠하는 윈도의 영역이다. 윈도는 갱신 영역이 비어 있지 않고, 애플리케이션에 대해 대기한 그 이상의 메시지가 없을 때에만 윈도에 칠하는 명령을 보낸다. CWnd::ValidateRgn이나 CWnd::ValidateRect 함수를 호출하여 갱신 영역의 일 부분을 제거할 수 있다.
2. 구문 : void InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE );
3. 파라미터
lpRect – 사용자 좌표로 무효화되는 사각형을 갖는 RECT 구조체나 CRect 오브젝트에 대한 포인터. NULL이면, 윈도는 윈도의 전체 사용자 영역을 무효화한다.
BErase – 칠하기 전에 갱신 영역을 지워야 한다면 TRUE. 갱신 영역의 어떤 부분을 지우기 위해 마크되면 전체 갱신 영역이 지워진다. 영역은 윈도에 WM_ERASEBKGND 메시지를 보내 지운다.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l ShowWindow
1. 설명 : 윈도의 보이기,숨기와 상태를 제어한다.
2. 구문 : BOOL ShowWindow( int nCmdShow );
3. 파라미터
nCmdShow – 다음 플래그의 하나이다.
SW_HIDE |
이 윈도를 숨기도 다른 윈도로 활성화를 전달한다. |
SW_MINMIZE |
윈도를 최소화하고 관리자 리스트에 있는 최상위 윈도를 활성화한다. |
SW_RESTORE |
윈도를 활성화 하고 표시한다. 윈도가 최대,최소화되어 있으면 원래 크기와 위치로 복원한다. |
SW_SHOW |
윈도를 현재 크기, 위치로 활성화 하고 디스플레이한다. |
SW_SHOWMAXIMIZED |
윈도를 활성화하고 최대 크기로 디스플레이한다. |
SW_SHOWMINIMIZED |
윈도를 활성화하고 아이콘으로 디스플레이한다. |
SW_SHOWMINNOACTIVE |
윈도를 아이콘으로 디스플레이하고 현재 활성화된 윈도는 활성화 상태로 있다. 즉 다른 윈도를 활성화하지 않는다. |
SW_SHOWNA |
윈도를 현 상태로 디스플레이하고 현재 활성화된 윈도는 활성화 상태로 있다. |
SW_SHOWNOACTIVATE |
윈도를 가장 최근의 크기와 위치로 디스플레이한다. 현재 활성화된 윈도가 활성화 상태로 있다. |
SW_SHOWNOMAL |
윈도를 활성화하고 디스플레이한다. 윈도가 최대, 최소화된 상태이면 원래 크기, 위치로 복원된다. |
4. 리턴값 : 윈도가 이미 나타나 있으면 비제로, 그렇지 않으면 0.
l IsWindowVisible
1. 설명 : 윈도가 보이는지 보이지 않는지를 판단한다. 이 함수는 WS_VISIBLE 스타일이 윈도에 설정되어 있고 부모 윈도도 보이면 TRUE. IsWindowVisible은 실제로 윈도가 표시 화면에 보이는지를 판단하지는 않는다. ( 다른 윈도에 의해 숨겨질 수도 있다. )
2. 구문 : BOOL IsWindowVisible() const;
3. 파라미터 : 없음.
4. 리턴값 : 윈도가 보이면 비제로, 그렇지 않으면 0.
좌표 맵핑 함수
l ClientToScreen
1. 설명 : 주어진 포인트나 스크린 좌표에 표시되는 사각형의 클라이언트 좌표를 스크린 좌표로 전환한다. 클라이언트 좌표는 CWnd의 클라이언트 영역의 왼쪽 상단을 기준으로 한다. 스크린 좌표는 화면 스크린의 왼쪽 상단을 기준으로 한다.
2. 구문 : public void ClientToScreen( LPPOINT lpPoint ) const;
public void ClientToScreen( LPRECT lpRect ) const;
3. 파라미터
lpPoint – 클라이언트 좌표로 된 위치를 갖는 POINT 구조체나 CPoint 오브젝트에 대한 포인터. 이 위치 좌표의 내용은 계산된 스크린 좌표로 교체된다.
lpRect – 클라이언트 좌표로 된 위치를 갖는 RECT 구조체나 CRect 오브젝트에 대한 포인터. 이 사각 좌표의 내용은 계산된 스크린 좌표로 교체된다.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l ScreenToClient
1. 설명 : 윈도에 대한 스크린 좌표를 클라이언트 자표로 변환한다. 스크린 좌표는 스크린의 왼쪽 상단을 기준으로 한다. 클라이언트 좌표는 클라이언트 영역의 왼쪽 상단을 기준으로 한다.
2. 구문 : void ScreenToClient( LPPOINT lpPoint ) const;
void ScreenToClient( LPRECT lpRect ) const;
3. 파라미터
lpPoint – 변환할 위치를 포함하는 POINT 구조체나 CPoint 오브젝트에 대한 포인터.
lpRect – 변환할 위치를 포함하는 RECT 구조체나 CRect 오브젝트에 대한 포인터.
4. 리턴값 : 아무 것도 리턴하지 않는다.
윈도 텍스트 함수
l SetWindowText
1. 설명 : 지정된 텍스트로 윈도 타이틀을 정한다. 윈도가 컨트롤이면 컨트롤 안의 텍스트가 설정된다. 이 함수는 WM_SETTEXT 메시지를 그 윈도에 전한다.
2. 구문 : void SetWindowText( LPCTSTR lpszString );
3. 파라미터
lpszString – 새로운 윈도 텍스트로 사용되는 널로 끝나는 문자열에 대한 포인터.
4. 리턴값 : 아무 것도 리턴하지 않는다.
l GetWindowText
1. 설명 : 현재 윈도 캡션의 텍스트를 얻는다. 편집박스에서 캡션 텍스트는 편집 컨트롤 자체에 있는 텍스트이다.
2. 구문 : int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;
void GetWindowText( CString& rString ) const;
3. 파라미터
lpszStringBuf – 널로 끝나는 윈도에 있는 문자 버퍼에 대한 포인터.
nMaxCount – lpszStringBuf에 의해 가리키는 버퍼의 크기.
rString – 윈도 텍스트로 체워지는 CString에 대한 참조.
4. 리턴값 : 첫번째 형식의 함수는 제공되는 버퍼에 실제 복사되는 문자들의 수이다. 두번째 형식의 함수는 아무 것도 리턴하지 않는다.
l GetWindowTextLength
1. 설명 : 현재 윈도 캡션의 길이를 얻는다. 윈도 캡션 텍스트를 담는 데 필요한 버퍼의 크기를 판단하기 위하여 문자 버퍼 포인터의 파라미터를 받는 GetWindowText 함수의 형식을 호출하기 전에 이 함수를 호출하라.
2. 구문 : int GetWindowTextLength() const;
3. 파라미터 : 없음.
4. 리턴값 : 현재 윈도 캡션에 있는 문자의 수.
l SetFont
1. 설명 : 윈도의 현재 글꼴을 다른 글꼴로 변경한다.
2. 구문 : void SetFont( CFont* pFont, BOOL bRedraw = TRUE );
3. 파라미터
pFont – 새로운 폰트를 지정한다.
bRedraw - TRUE이면 윈도를 다시 그린다.
l GetFont
1. 설명 : 윈도의 현재 글꼴에 대한 포인터를 리턴한다.
2. 구문 : CFont* GetFont() const;
3. 파라미터 : 없음.
4. 리턴값 : 윈도에 의해 사용되는 글꼴에 대한 포인터. 이것은 임시적이고 나중 사용을 위하여 보관되지 않아야 한다.
드래그-드롭 함수
l DragAcceptFiles
1. 설명 : 윈도가 파일관리자에서 드래그되는 파일을 받는가를 나타내기 위하여 이 함수를 호출한다. 받는 것이 가능하면, 윈도는 WM_DROPFILE 메시지를 받는다. 보통 자신의 애플리케이션의 맨 처음 애플리케이션의 메인 윈도에서 이 함수를 호출한다.
2. 구문 : void DragAcceptFiles( BOOL bAccept = TRUE );
3. 파라미터
bAccept – 윈도가 드래그 파일을 받으면 TRUE, 그렇지 않으면 FALSE.
4. 리턴값 : 아무 것도 리턴하지 않는다.
다이얼로그 박스 아이템 함수
l DlgDirList
1. 설명 : 파일이나 디렉토리 리스팅을 지닌 리스트 박스를 채운다. DlgDirList는 LB_RESETCONTENT와 LB_DIR 메시지를 리스트 박스에 전한다. 주어진 경로와 일치하는 모든 파일들의 이름을 갖고 nIDListBox에 의해 지정된 리스트 박스를 채운다.
2. 구문 : public int DlgDirList( LPTSTR lpPathSpec, int nIDListBox, int nIDStaticPath, UINT nFileType );
3. 파라미터
lpPathSpec – 경로나 파일 이름을 함유하고 있는 널 종결 스트링을 가리킨다. DlgDirList는 수정을 충분히 함유할 정도로 긴 이 스트링을 수정한다. 더 많은 정보는 다음의 설명 부분을 참조한다.
nIDListBox – 리스트 박스의 식별자를 지정한다. 만일 nIDListBox가 0이면, DlgDirList는 리스트 박스가 존재하지 않으며 하나의 박스도 채우려하지 않음을 나타낸다.
nIDStaticPath – 현재의 드라이브와 디렉토리를 나타내는데에 사용되는 정적 텍스트 컨트롤의 식별자를 지정한다. 만일 nIDStaticPath가 0이면, DlgDirList는 그와 같은 텍스트 컨트롤이 존재하지 않음을 나타낸다.
nFileType – 나타날 파일들의 속성들을 지정한다. 다음의 값들의 조합으로 나타날 수 있다.
DDL_READWRITE |
부가적인 속성없이 데이터 파일을 읽고 쓴다. |
DDL_READONLY |
읽기 전용 파일들. |
DDL_HIDDEN |
히든 파일들. |
DDL_SYSTEM |
시스템 파일들. |
DDL_DIRECTORY |
디렉토리들. |
DDL_ARCHIVE |
아카이브 |
DDL_POSTMSGS |
LB_DIR 플래그. 만일 LB_DIR 플래그가 설정되면, Windows는 애플리케이션 큐에 있는 DlgDirList에 발생된 메시지를 넣는다. 그렇지 않으면 다이얼로그박스 프로시저에 직접 전달한다. |
DDL_DRIVES |
드라이브. DDL_DRIVES 플래그가 설정되면 DDL_EXCLUSIVE 플래그가 자동으로 설정되기 때문에 드라이브와 파일을 갖는 디렉토리 리스트를 생성하기 위하여 DlgDirList를 두 번 호출해야 한다. 한 번은 DDL_DRIVES 플래그를 설정하여 호출한다. |
DDL_EXCLUSIVE |
Exclusive 비트. Exclusive 비트가 설정되면, 지정 타입의 파일만이 리스트되고, 그렇지 않으면 일반 파일과 지정 타입의 파일들만이 리스트된다. |
4. 리턴값 : 성공하면 비제로, 그렇지 않으면 0.
l DlgDirListComboBox
1. 설명 : 주어진 경로와 파일 스펙과 주어진 위치와 주어진 타입과 일치하는 파일의 리스트를 지정 콤보박스에 채운다.
2. 구문 : public int DlgDirListComboBox( LPTSTR lpPathSpec, int nIDComboBox, int nIDStaticPath, UINT nFileType );
3. 파라미터
lpPathSpec – 리스트되는 파일에 대한 디렉토리와 파일 스펙을 갖는 널로 끝나는 문자열 버퍼를 가리킨다. 이 파라미터가 가리키는 문자열이 파일 스펙을 갖지 않으면, “*.*”이 된다. 이 함수가 실행되면, 지정 문자열의 드라이브와 경로는 제거된다.
nIDComboBox – 파일이 리스트되는 콤보박스의 리소스 ID. 이 파라미터가 0이면, DlgDirListComboBox는 어떤 콤보박스도 파일 문자열로 채워지지 않는다.
nIDStaticPath – 현재 드라이브와 디렉토리로 설정되는 스태틱 컨트롤의 리소스 ID. 이 파라미터가 0이면, DlgDirListComboBox는 어떤 컨트롤도 이 정보를 갖지 않는다.
nFileType – 리스트 되는 파일의 타입을 나타내는 플래그. DlgDirList와 동일.
4. 리턴값 : 성공하면 비제로, 그렇지 않으면 0.
l GetDlgItemText
1. 설명 : 다이얼로그 박스에 있는 컨트롤에 연관된 타이틀이나 텍스트를 얻기 위해 이 멤버 함수를 호출한다. GetDlgItemText 멤버 함수는 lpStr에 의해 지정된 위치에 텍스트를 복사하며 복사한 텍스트의 바이트 수의 크기를 리턴한다.
2. 구문 : int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;
int GetDlgItemText( int nID, CString& rString ) const;
3. 파라미터
nID – 타이틀이 검색될 컨트롤에 대한 정수 식별자를 지정한다.
lpStr – 컨트롤의 타이틀과 텍스트를 받는 버퍼를 가리킨다.
nMaxCount – lpStr에 복사될 스트링의 최대 길이(바이트)를 지정한다. 스트링이 nMaxCount보다 길다면, 짤리게 된다.
rString – CString에 대한 참조이다.
4. 리턴값 : 널 문자의 종결을 포함하지 않은채, 버퍼에 복사된 바이트의 실제 수를 확인한다. 텍스트가 복사되지 않는다면, 0이다.
l SendDlgItemMessage
1. 설명 : 컨트롤에 메시지를 보낸다. SendDlgItemMessage는 멤버 함수는 메시지가 처리될 때까지 리턴되지 않는다. SendDlgItemMessage를 이용하는 것은 주어진 컨트롤에 대해 CWnd*를 얻고 SendMessage 멤버 함수를 호출하는 것과 동일하다.
2. 구문 : LRESULT SendDlgItemMessage( int nID, UINT message, WPARAM wParam=0, LPARAM lParam=0 );
3. 파라미터
nID – 메시지를 받을 다이얼로그 박스 컨트롤의 식별자를 지정한다.
Message – 보내진 메시지를 지정한다.
WParam – 부가적인 메시지 종속 정보를 지정한다.
LParam – 부가적인 메시지 종속 정보를 지정한다.
4. 리턴값 : 컨트롤의 윈도 프로시저에 의해 리턴된 값을 지정한다. 또는 만일 컨트롤이 찾지 못하면 0이다.
메뉴 함수
l GetMenu
1. 설명 : 이 윈도와 관련된 메뉴에 대한 포인터를 얻는다. 자식 윈도는 메뉴를 갖고 있지 않기 때문에, 자식 윈도에 대해 이 함수를 호출하지 않아야 한다.
2. 구문 : CMenu* GetMenu() const;
3. 파라미터 : 없음.
4. 리턴값 : 메뉴를 확인한다. CWnd가 메뉴를 갖지 않는다면 NULL이다. CWnd가 자식 윈도이면 리턴 값은 정의되지 않는다.
l SetMenu
1. 설명 : 현재 매뉴를 다른 매뉴로 변경한다. 변경된 메뉴를 반영하기 위해 윈도가 다시 그려져야 한다. SetMenu는 이전 메뉴를 없애지 않는다. CMenu::DestroyMenu 함수를 호출하여 이전 메뉴를 없애야 한다.
2. 구문 : BOOL SetMenu( CMenu* pMenu );
3. 파라미터
pMenu – 새로운 메뉴를 나타낸다. NULL이면 현재 메뉴가 없어진다.
4. 리턴값 : 성공하면 비제로, 그렇지 않으면 0.
타이머 함수
l SetTimer
1. 설명 : 시스템 타이머를 설치한다. 설정된 시간 간격마다 시스템은 WM_TIMER를 애플리케이션 메시지 큐나 TimerProc 콜백 함수에 보낸다. 타이머는 한정된 전역 자윈이다. 그러므로 프로그램은 타이머가 실제로 사용할 수 있는 것인지 확인하기 위해 SetTimer의 리턴 값을 검사하는 것이 중요하다.
2. 구문 : UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD );
3. 파라미터
nIDEvent – 0이 아닌 타이머 ID를 지정한다.
nElapse – 시간 간격(millisecond 단위)을 지정한다.
lpfnTimer – WM_TIMER를 처리하는 TimerProc 콜백(callback) 함수의 주소. NULL이면 WM_TIMER는 에플리케이션의 메시지 큐에 들어가도 CWnd에 의해 처리된다. lpfnTimer 콜백 함수는 TimerProc로 명명할 필요는 없으나 다음과 같이 정의되고 0을 리턴해야 한다.
Void CALLBACK EXPORT TimerProc(
HWND hWnd, //handle of CWnd that called SetTimer
UINT nMsg, //WM_TIMER
UINT nIDEvent, //timer identification
DWORD dwTime //system time
);
4. 리턴값 : 새로운 타이머의 ID를 리턴한다. 타이머를 없애기 위해 KillTimer 함수에 이 값을 넘긴다. 성공이면 비제로, 그렇지 않으면 0.
경고 함수
l FlashWindow
1. 설명 : 주어진 윈도를 한번 플래쉬하게 한다. 연속적인 플래쉬를 위해서는 시스템 타이머를 생성하고 반복적으로 FlashWindow를 호출한다. CWnd를 호출하는 것은 마치 CWnd가 비활성에서 활성으로의 변환을 의미하거나, 또는 그 역을 행하는 것처럼 윈도의 타이틀 바의 외형을 변화시키는 것을 의미한다.(비활성 타이틀 바는 활성화된 타이틀 바로 변화된다. 활성화된 타이틀 바는 비활성화된 바로 변환된다.) 전형적으로 윈도는 주의를 요구하거나 현재 입력 초점을 지니고 있지 않는 사용자에게 정보를 알려주기 위해 플래쉬하게 된다. 파라미터 bInvert는 윈도가 입력 초점을 취하거나 더 이상 플래쉬하지 않을 때에만 FALSE가 되어야 한다. 입력 초점을 취하기 위해 기다리는 동안 연속적인 호출하는 것에는 TRUE이어야 한다. 이 함수는 항상 최소화된 윈도들에 대해 0 이외의 값을 리턴한다. 윈도가 최소화되면, FlashWindow는 간단히 윈도의 아이콘을 플래쉬시킨다. bInvert는 최소화된 윈도들에 대해 무시한다.
2. 구문 : BOOL FlashWindow( BOOL bInvert );
3. 파라미터
bInvert – CWnd가 플래쉬되었거나 윈래의 상태로 리턴했는지를 지정한다. CWnd는 bInvert가 TRUE이면 한 상태에서 다른 상태로 플래쉬한다. 만일 bInvert가 FALSE이면 윈도는 원래의 상태를(활성화에 관계없이) 리턴한다.
4. 리턴값 : FlashWindow 멤버 함수를 호출하기 전에 윈도가 활성화되었다면 비제로, 그 외의 경우에는 0이다.
l MessageBox
1. 설명 : 애플리케이션 제공된 메시지와 캡션을 포함하는 윈도를 생성하고 디스플레이하며, 이미 정의된 아이콘들과 Message-Box Style 리스트에서 기술한 푸시 버튼의 조합을 추가할 수 있다. 메시지 박스 스타일의 리스트를 위해, “Style” 절에 있는 “Message-Box Style”을 참조한다. 애플리케이션에 메시지를 처리하기 위해 이 멤버 함수를 대신하여 전역 함수인 AfxMessageBox를 이용한다.
2. 구문 : int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );
3. 파라미터
lpszText – 디스플레이될 메시지를 포함하는 CString 객체나 널 종결 스트링을 가리킨다.
lpszCaption – 메시지 박스 캡션에 이용될 메시지를 포함하는 CString 객체나 널 종결 스트링을 가리킨다. 만일 lpszCaption이 NULL이면, 디폴트 캡션 “Error”가 이용된다.
nType – 메시지 박스의 내용과 거동을 지정한다.
4. 리턴값 : 함수의 결과를 지정한다. 메시지 박스를 생성할 만큼 충분한 메모리가 없다면 0이다.
윈도 메시지 함수
l GetCurrentMessage
1. 설명 : 현재 처리되는 메시지에 대한 포인터를 얻는다. 보내는 정확한 메시지를 판단하기 위해서 메시지에 응답할 때 이 함수를 호출할 수 있다.
2. 구문 : static const MSG* PASCAL GetCurrentMessage();
3. 파라미터 : 없음.
4. 리턴값 : 현재 메지시를 정의하는 MSG 구조체에 대한 포인터.
l PreTranslateMessage
1. 설명 : TranslateMessage(virtual-key messages를 character messages로 변환하는 함수)와 DispatchMessage(The DispatchMessage function dispatches a message to a window procedure. It is typically used to dispatch a message retrieved by the GetMessage function.)
Windows 함수로 그들이 디스패치하기 전에 윈도 메시지를 번역하기 위해 클래스 CWinApp에 의해 이용된다. 툴팁 메시지를 거르고 전달하기 위해 MFC에 의해 호출된다.
2. 구문 : virtual BOOL PreTranslateMessage( MSG* pMsg );
3. 파라미터
pMsg – 처리할 메시지를 포함하는 MSG 구조체를 가리킨다.
4. 리턴값 : 만일 메시지가 번역되고 디스패치가 안된다면 TRUE, 그렇지 않으면 FALSE.
l SendMessage
1. 설명 : 윈도에 메시지를 보낸다. 보내지는 메시지는 즉시 전달되기 때문에 포스트되는 메시지와는 다르다. SendMessage는 그 메시지가 처리될 때까지 리턴하지 않는다. 메시지를 윈도의 메시지 큐에 보낸 후 이 값을 즉시 리턴한다.
2. 구문 : LRESULT SendMessage( UINT message, WPARAM wParam=0, LPARAM lParam=0 );
3. 파라미터
message – 전송할 메시지를 나타낸다.
wParam – 부가적인 메시지에 의존하는 정보를 나타낸다.
lParam – 부가적인 메시지에 의존하는 정보를 나타낸다.
4. 리턴값 : 처리되는 메시지의 결과이다. 그것의 값은 보내진 메시지에 의존하므로 메시지에 따라 리턴값이 다르다.
l PostMessage
1. 설명 : 애플리케이션의 메시지 큐에 메시지를 포스트한다. 메시지를 포스트하는 것은 메시지를 보내는 것과는 다르다. 메시지를 보내면 즉시 받게 된다. 메시지가 포스트될 때, 큐에 이미 있는 다른 메시지들의 뒤에 넣어지고 나중 어느 시점에서 애플리케이션에서 받게 된다. PostMessage는 메시지가 처리되는 것을 기다리지 않는다. 메시지 큐의 메시지는 GetMessage나 PeekMessage Windows 함수에 대해 호출함으로써 검색된다. Windows PostMessage 함수는 다른 애플리케이션에 액세스하는데 이용될 수 있다.
2. 구문 : BOOL PostMessage( UINT message, WPARAM wParam=0, LPARAM lParam=0 );
3. 파라미터
message – 포스트되는 메시지.
wParam – 부가적인 메시지 종속 정보를 지정한다. 이 파라미터의 내용은 전송된 메시지에 의존한다.
lParam – 부가적인 메시지 종속 정보를 지정한다. 이 파라미터의 내용은 전송된 메시지에 의존한다.
4. 리턴값 : 메시지가 전송되면 비제로, 그렇지 않으면 0.
오버라이드 가능한 함수
l DefWindowProc
1. 설명 : 애플리케이션이 처리되지 않은 어떠한 윈도 메시지에 대한 디폴트 프로세싱을 제공하는 디폴트 윈도 프로시저를 호출한다. 이 멤버 함수는 모든 메시지가 처리됨을 확실히 한다. 윈도 프로시져에 의해 받은 것과 동일한 파리미터들을 지닌채 호출되어야 한다.
2. 구문 : virtual LRESULT DefWindowProc( UINT message, WPARAM wParam, LPARAM lParam );
3. 파라미터
message – 처리될 윈도 메시지를 지정한다.
WParam – 부가적인 메시지 의존 정보를 지정한다.
LParam – 부가적인 메시지 의존 정보를 지정한다.
4. 리턴값 : 보내진 메시지에 따라 다르다.
l DoDataExchange
1. 설명 : 다이얼로그 데이터를 교환하고 유효화 하기 위해 프레임워크로 호출한다. 이 함수는 절대로 직접 호출하지 말아야 한다. 이 함수는 UpdateData 멤버 함수로 호출한다. 대화 박스의 컨트롤을 초기화하거나 다이얼로그 박스로부터의 데이터를 얻는데 UpdateData를 호출한다. Cdialog에서 애플리케이션 특정 다이얼로그 박스 클래스를 이끌어 내려면, 또는 프레임워크의 자동 데이터 교환과 유효화를 이용하기를 원한다면 이 멤버 함수를 오버라이드할 필요가 있다. ClassWizard는 다이얼로그 데이터교환(DDX)과 유효화(DDV) 전역 함수 호출의 의도된 “데이터 맵”을 포함하는 멤버 함수의 오버라이드 버전을 작성할 것이다. UpdateData(TRUE)가 호출되면 DoDataExchange 함수가 호출되면서 DDV_로 시작되는 함수들이 호출되고, 이 함수들은 컨트롤에 입력된 값이 이 컨트롤과 Value형 멤버 변수로 전송되기에 적합한 데이터 형으로 되어 있는지, 또 유효한 입력 범위 안에 있는지를 확인하는 일을 한다. 컨트롤에 입력된 값이 Value형 멤버 변수로 전송되기에 적합한 데이터 형이고 유효한 입력 범위 안에 있으면 DDX_로 시작하는 함수들이 호출되어 실제로 데이터가 전송되고, 그렇지 않으면 에러 메시지가 출력되고, 데이터 전송은 취소된다. 여기서 DDV와 DDX는 각각 Dialog Data Validation(다이얼로그 데이터 유효성 확인)과 Dialog Data exchange(다이얼로그 데이터 교환)의 약자이다. UpdateData(FALSE)가 호출되면 DoDataExchange함수가 호출되면서 DDX_로 시작하는 함수들이 호출되어 Value형 멤버 변수에 설정된 데이터가 컨트롤로 전송되어 화면에 출력된다. DoDataExchange 오버라이드 멤버 함수는 반드시 소스 파일에 있는 메크로 문장을 실행해야 한다.
2. 구문 : virtual void DoDataExchange( CDataExchange* pDX );
3. 파라미터
pDX – CDataExchange 객체에 대한 포인터.
4. 리턴값 : 아무 것도 리턴하지 않는다.
시스템 메시지 핸들러
l OnSysCommand
1. 설명 : 사용자가 제어 메뉴에서 명령을 선택할 때나 또는 사용자가 최대화 또는 최소화 버튼을 선택할 때 이 함수가 호출된다. 기본적으로 설정된 값에 의해, OnSysCommand는 이전의 테이블에서 지정된 미리 정해진 동작에 대한 제어 메뉴의 요구를 수행한다. WM_SYSCOMMAND 메시지 내에서, 윈도는 내부적으로 nID의 네 개의 low-order 비트들을 사용한다. 애플리케이션이 nID의 값을 조사할 때, 애플리케이션은 올바른 결과를 얻기 위해 AND 연산자를 사용함으로써 0xFFF0 값과 nID값을 결합시켜야 한다. 제어 시스템 내의 메뉴 아이템은 GetSystmeMenu, AppendMenu, InsertMenu, 그리고 ModifyMenu 함수에 의해 변경될 수 있다. 제어 메뉴를 변경시키는 애플리케이션들은 WM_SYSCOMMAND 메시지와 OnSysCommand에 전달되어야 하는 애플리케이션이 다루지 않는 모든 WM_SYSCOMMAND 메시지를 처리해야만 한다. 애플리케이션이 추가하는 모든 명령어 값들은 애플리케이션이 처리해야만 하고, OnSysCommand에 전달될 수는 없다. 애플리케이션은 WM_SYSCOMMAND 메시지를 OnSysCommand에 전달함으로써 언제든지 모든 시스템 명령을 수행할 수 있다. 제어 메뉴에서 아이템을 선택하기 이해 정의된 단축키들을 눌렀는지를 해석하여 OnSysCommand를 호출하게 된다. 모든 단축키들이 WM_SYSCOMMAND 메시지로 해석된다.
2. 구문 : afx_msg void OnSysCommand( UINT nID, LPARAM lParam );
3. 파라미터
nID – 요청되는 시스템 명령 타입을 지정한다. 이 파라미터는 다음 중 어느 값을 가질 수 있다.
SC_CLOSE |
CWnd 객체를 종료한다. |
SC_HOTKEY |
애플리케이션에서 지정한 단축키와 관련된 CWnd 객체를 활성화한다. Lparam의 low-order 단어는 활성화되는 윈도의 HWND를 판별한다. |
SC_HSCROLL |
수평으로 스크롤한다. |
SC_KEYMENU |
키가 눌렸는지의 여부로 메뉴를 검색한다. |
SC_MAXIMIZE
(or SC_ZOOMM) |
CWnd를 최대화. |
SC_MINIMIZE
(or SC_ICON) |
CWnd를 최소화(아이콘화). |
SC_MOUSEMENU |
마우스 버튼이 눌렸는지의 여부로 메뉴를 검색한다. |
SC_MOVE |
CWnd 객체를 이동한다. |
SC_NEXTWINDOW |
다음 윈도로 이동한다. |
SC_PREVWINDOW |
이전의 윈도로 이동한다. |
SC_RESTORE |
정상적인 윈도의 크기와 위치로 윈도를 복원한다. |
SC_SCREENSAVE |
[부트] 섹션의 SYSTEM.INI 파일에서 지정한 화면 보호기를 실행한다. |
SC_SIZE |
CWnd 객체의 크기를 정한다. |
SC_TASKLIST |
윈도의 태스크 매니저 애플리케이션을 실행 또는 활성화한다. |
SC_VSCROLL |
수직으로 스크롤한다. |
LParam – 마우스로 제어 메뉴 명령을 선택하면 lParam은 커서의 좌표를 포함하게 된다. low-order 단어에는 x 좌표, 그리고 high-order 단어에는 y 좌표를 포함한다. 다른 경우에는 이 파라미터는 사용되지 않는다.
Low-order – 단어에는 x 좌표, 그리고 high-order 단어에는 y 좌표를 포함한다. 다른 경우에는 이 파라미터는 사용되지 않는다. SC_HOTKEY, SC_SCREENSAVE.
4. 리턴값 : 아무 것도 리턴하지 않는다.
일반 메시지 핸들러
l OnCommand
1. 설명 : 프레임워크는 사용자가 메뉴의 아이템을 선택할 때나 자식 컨트롤이 주의 메시지를 전달할 때, 또는 accelerator 키스트로크가 전환될 때 이 멤버 함수를 호출한다. OnCommand는 컨트롤 주의와 ON_COMMAND 엔트리들에 대한 메시지 맵을 처리하며, 적절한 멤버 함수를 호출한다. WM_COMMAND 메시지를 다루기 위해 파생된 클래스에서 이 함수를 오버라이드 한다. 오버라이드는 베이스 클래스 OnCommand가 호출되지 않으면 메시지 맵을 처리하지 못한다. 프레임워크에서 이 함수를 호출함으로써 사용자의 애플리케이션이 윈도의 메시지를 다룰 수 있게 된다. 사용자의 함수에 전달된 파라미터들은 메시지가 수신되었을 때 프레임워크가 수신한 파라미터들을 반영하게 된다. 사용자가 이 함수의 기본 수행을 호출하면 이것은 사용자가 함수에 제공한 파라미터들을 사용하는 것이 아니라 메시지를 갖고 전달된 파라미터들을 원래대로 사용할 것이다.
2. 구문 : virtual BOOL OnCommand( WPARAM wParam, LPARAM lParam );
3. 파라미터
wParam – wParam의 low-order 단어는 메뉴 아이템이나 컨트롤의 명령 ID를 확인한다. WParam이 high-order 단어는 만일 메시지가 컨트롤에서 나온 것이면 주의 메시지를 지정한다. 만일 메시지가 accelertor에서 나온 것이면 high-order 단어가 1이다. 만일 메시지가 메뉴에서 나온 것이면, high-order 단어가 0이다.
LParam – 만일 메시지가 컨트롤에서 나온 것이면 메시지를 전송하는 컨트롤을 확인한다. 그 외
의 경우에는, lParam은 0이다.
4. 리턴값 : 만일 애플리케이션이 이 메시지를 처리한다면 0이외의 값, 그 외의 경우에는 0이다.
// example for ON_COMMAND
BEGIN_MESSAGE_MAP( CMyDoc, CDocument )
//{{AFX_MSG_MAP( CMyDoc )
ON_COMMAND( ID_MYCMD, OnMyCommand )
// ... More entries to handle additional commands
//}}AFX_MSG_MAP
END_MESSAGE_MAP( )
l OnActivate
1. 설명 : 프레임워크는 CWnd 객체가 활성화나 비활성화될 때에 이 멤버함수를 호출한다. 처음에는, 비활성화된 주 윈도는 OnActivate를 호출시키며, 그리고 나서 활성화된 주 윈도가 OnActivate를 호출한다. CWnd 객체가 마우스 클릭으로 활성화되면, OnMouseActivate 멤버 함수의 호출을 받는다.
2. 구문 : afx_msg void OnActivate( UINT nState, CWnd* pWndOther, BOOL bMinimized );
3. 파라미터
nState – CWnd가 활성화되거나 비활성화되고 있는지의 여부를 지정한다. 다음 값들 중 하나일 수 있다.
WM_INACTIVE |
윈도가 비활성화 된다. |
WM_ACTIVE |
윈도가 마우스 클릭외의 다른 방법들을 통하여 활성화된다. (예를 들어, 윈도를 선택하기 위한 키보드 인터페이스의 사용을 통한다.) |
WM_CLICKACTIVE |
윈도가 마우스 클릭으로 활성화된다. |
PWndOther – 활성화되거나 비활성화된 CWnd에 대한포인터이다. 그 포인터는 NULL이 될 수 있으며, 일시적이다.
BMinimized – 활성화되거나 비활성화된 CWnd의 최소화된 상태를 지정한다. TRUE 값은 윈도가 최소화됨을 가리킨다.
l OnClose
1. 설명 : 프레임워크는 CWnd 또는 애플리케이션이 종결하는 신호로서 이 멤버함수를 호출한다. 디폴트 수행은 DestroyWindow를 호출한다.
2. 구문 : afx_msg void OnClose();
3. 파라미터 : 없음.
l OnCreate
1. 설명 : Create나 CreateEx 멤버 함수 호출에 의해 생성되는 Windows 윈도를 애플리케이션이 요청할 때에 이 멤버 함수를 호출한다. CWnd 객체는 윈도가 생성된 후 그러나 가시화되기 전에 이 호출을 받는다. OnCreate는 Create나 CreateEx 멤버 함수가 리턴하기 전에 호출된다. 파생된 필수의 초기화를 수행하기 위해 이 멤버 함수는 오버라이드된다.
2. 구문 : afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct);
3. 파라미터
lpCreateStruct – 생성될 CWnd 객체에 대한 정보를 함유하고 있는 CREATESTRUCT 구조체를 가리킨다.
4. 리턴값 : OnCreate는 CWnd 객체의 생성을 계속하기 위해 0을 리턴해야한다. 만일 애플리케이션이 –1을 리턴하면, 그 윈도는 파괴된다.
l OnDestroy
1. 설명 : 프레임워크는 파괴될 CWnd 객체에 정보를 주기 위해 이 멤버 함수를 호출한다. OnDestroy는 CWnd 객체가 스크린에서 제거된 후에 호출된다. OnDestroy는 처음에 파괸된 CWnd를 위해 호출되며, 그리고 나서 파괴되었기 때문에 CWnd의 자식 윈도를 위해 호출된다. 모든 자식 윈도들은 여전히 OnDestroy가 가동 중인 동안에 존재한다고 가정할 수 있다.
2. 구문 : afx_msg void OnDestroy()
l OnEraseBkgnd
1. 설명 : 프레임워크는 CWnd 객체 배경을 지우려고 할 때 이 멤버 함수를 호출한다. 색칠을 위한 무효화된 영역을 준비하기 위해 호출한다. 디폴트 수행은 윈도 클래스 구조체의 hbrBackground 멤버에 의해 지정된 윈도 클래스 배경을 이용하여 배경을 지운다. 만일 hbrBackground 멤버가 NULL이면, OnEraseBkgnd의 오버라이드 버전은 배경색을 지워야 한다. 또한 브러시를 위한 UnrealizeObject를 처음에 호출함으로써 CWnd 좌표들을 갖고 의도된 브러시의 원점을 정렬해야 한다. 만일 오버라이드된 OnEraseBkgnd가 메시지를 처리하고 배경을 지운다면 OnEraseBkgnd는 WM_ERASEBKGND에 대한 응답으로써 0 이외의 값을 리턴한다. 이것은 더 이상 지우기가 필요하지 않다는 것을 가리킨다. 만일 그것이 0을 리턴한다면, 윈도는 지워야할 필요의 의미로 표시된 채 남아 있다.
2. 구문 : afx_msg BOOL OnEraseBkgnd( CDC* pDC );
3. 파라미터
pDC – 디바이스 칸텍스트 객체를 지정한다.
4. 리턴값 : 만일 배경이 지워진다면 0 이외의 값, 그 외의 경우에는 0이다.
l OnMove
1. 설명 : CWnd의 위치가 변경된 후에 호출된다.
2. 구문 : afx_msg void OnMove( int x, int y );
3. 파라미터
x – 클라이언트 영역의 좌측 상단의 새로운 x좌표를 지정한다. 이 새로운 위치는 윈도를 겹쳐지게 하거나 생성하기 위해, 그리고 자식 윈도에 대한 부모 클라이언트 좌표를 위해 스크린 좌표로 주어진다.
Y – 클라이언트 영역의 좌측 상단의 새로운 y좌표를 지정한다. 이 새로운 위치는 윈도를 겹쳐지게 하거나 생성하기 위해, 그리고 자식 윈도에 대한 부모 클라이언트 좌표를 위해 스크린 좌표로 주어진다.
l OnPaint
1. 설명 : 윈도 또는 애플리케이션이 한 애플리케이션 윈도의 일부분을 다시 칠하도록 요구할 때 호출된다. UpdateWindow 또는 RedrawWindow 함수가 호출되면 WM_PAINT 메시지가 보내진다. 윈도는 결과적으로 RDW_INTERNALPAINT 플래그 세트를 가진 RedrawWindow 함수를 호출 함으로써 내부적인 색칠 메시지를 받을 수 있다. 이 경우, 윈도는 새로 갱신된 영역을 갖지 않을 수 있다. 애플리케이션은 윈도가 새로 갱신된 영역을 갖고 있는지 결정하기 위해 GetUpdateRect 함수를 호출해야 한다. 만약 GetUpdateRect 함수가 0인 값을 리턴하면 애플리케이션은 BeginPaint와 EndPaint 함수를 호출해서는 안된다. WM_PAINT 메시지는 무효영역과 RDW_INTERNALPAINT 플래그 세트를 가진 RedrawWindow 함수에 대한 호출 모두에 대해 발생할 수 있으므로 애플리케이션은 내부적으로 다시 칠하는 것 또는 각각의 WM_PAINT 메시지에 대한 내부 데이터 구조체들을 살펴봄으로써 새로 갱신해야 하는 것들을 체크 할 책임이 있다. 내부의 WM_PAINT 메시지는 단지 한 번만 윈도로 전송된다. UpdateWindow 함수는 WM_PAINT 메시지를 윈도로 보낸 후에, 윈도가 무용 지물이 되거나 RDW_INTERNALPAINT 플래그 세트를 가진 RedrawWindow 함수가 다시 호출될 때까지 WM_PAINT 메시지는 전송되거나 배치되지 않는다. 뷰 애플리케이션 내에 이미지를 렌더링하는데에 대한 정보는 CView::OnDraw를 참조한다.
2. 구문 : afx_msg void OnPoint();
l OnSetFocus
1. 설명 : 입력 포커스를 얻은 후에 이 함수가 호출된다. 삽입 기호를 디스플레이하기 위해 이 시점에서 CWnd는 적절한 삽입 기호 함수를 호출해야 한다.
2. 구문 : afx_msg void OnSetFocus( CWnd* pOldWnd );
3. 파라미터
pOldWnd – 입력 포커스를 유실하는 CWnd 객체를 포함한다. 이 포인터는 임시적일 수 있으며, 나중에 사용하기 위해 저장할 수 없다.
l OnShowWindow
1. 설명 : CWnd 객체가 감춰지거나 표시될 때 이 함수가 호출된다. 윈도는 ShowWindow 함수가 호출될 때, 겹쳐진 윈도가 최대화 또는 저장될 때, 또는 겹쳐졌거나 생성되는 윈도가 닫히거나(아이콘화되거나) 열릴 때(화면 상에 디스플레이될 때) 감춰지거나 표시 된다. 겹쳐진 윈도가 닫힐 때, 모든 그 윈도와 연관된 모든 생성되는 윈도는 감춰지게 된다.
2. 구문 : afx_msg void OnShowWindow( BOOL bShow, UINT nStatus );
3. 파라미터
bShow – 윈도가 표시되는지를 지정한다. 윈도가 표시된다면 TRUE, 윈도가 감춰지니다면 FALSE이다.
NStatus – 표시되는 윈도의 상태를 지정한다. ShowWindow 함수의 호출 때문에 메시지가 보내진다면 0, 그렇지 않으면 다음 값들 중 하나가 된다.
SW_PATENCLOSING |
부모 윈도가 닫히거나(아이콘화되거나) 생성되는 윈도가 숨겨진다. |
SW_PARENTOPENING |
부모 윈도가 열리거나(디스플레이되거나)생성되는 윈도가 표시된다. |
l OnSize
1. 설명 : 윈도의 크기가 변화된 후 이 함수가 호출된다. OnSize에서 자식 윈도에 대해 SetScrollPos 또는 MoveWindow 함수가 호출된다면 CWnd가 다시 칠해지도록 하기 위해 SetScrollPos 또는 MoveWindow 함수의 bRedraw 파라미터는 0이 아닌 값이 되어야 한다.
2. 구문 : afx_msg void OnSize( UINT nType, int cx, int cy );
3. 파라미터
nType – 크기를 재조절하도록 요청하는 형태를 지정한다. 이 파라미터는 다음 값들 중 하나가 될 수 있다.
SIZE_MAXIMIZED |
윈도가 최대화되었다. |
SIZE_MINIMIZED |
윈도가 최소화되었다. |
SIZE_RESTORED |
윈도의 크기가 재조절되었다. 그러나 SIZE_MINIMIZED 또는 SIZE_MAXIMIZED가 적용된 것은 아니다. |
SIZE_MAXHIDE |
다른 윈도가 최대화될 때 생성되는 모든 윈도에 메시지가 전달된다. |
SIZE_MAXSHOW |
다른 윈도가 이전의 크길 환원되었을 때 생성되는 모든 윈도에 메시지가 전달된다. |
Cx – 클라이언트 영역의 새로운 폭을 지정한다.
Cy – 클라이언트 영역의 새로운 높이를 지정한다.
컨트롤 메시지 핸들러
l OnWndMsg
1. 설명 : WindowProc로 호출하거나, 메시지를 반영하는 동안 호출된다.
2. 구문 : virtual BOOL OnWndMsg( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult );
3. 파라미터
message – 보내진 메시지를 지정한다.
wParam – 부가적인 메시지 종속 정보를 지정한다.
LParam – 부가적인 메시지 종속 정보를 지정한다.
PResult – WindowProc의 리턴 값이다. 메시지에 종속된다. NULL이 될 수 있다.
4. 리턴값 : 만일 메시지가 다루어졌다면 0 이외의 값, 그 외의 경우에는 0이다.
입력 메시지 핸들러
l OnChar
1. 설명 : 프레임워크는 넌시스템 문자로 키스트로크가 전환할 때 이 멤버 함수를 호출한다. 이 함수는 OnKeyUp 멤버 함수가 호출되기 이전에 OnKeyDown 멤버 함수가 호출된 이후에 호출된다. OnChar는 누르거나 풀었을 때의 키보드 키의 값을 포함한다. 눌러진 키들 간의 1대1 대응이 필요없고 OnChar의 호출이 발생되기 때문에, nFlags 상의 정보는 일반적으로 애플리케이션에는 유용하지 못하다. NFlags 에 있는 정보는 단짖 최근의 OnKeyUp 멤버 함수나 또는 OnChar의 호출을 처리하는 OnKeyDown 멤버 함수에 적용된다. ALT 키와 CTRL 키, 숫자 키패드 왼쪽에 회색의 INS, DEL, HOME, END, PAGE UP, PAGE DOWN, 그리고 화살키들, 그리고 숫자 패드에 있는 슬래쉬(/)와 엔터키이다. 다른 키보드들도 nFlags에서 이러한 확장된 키 비트를 지원할 수 있어야 한다.
2. 구문 : afx_msg void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );
3. 파라미터
nChar – 키의 문자 코드를 포함한다.
NRepCnt – 반복되는 카운트, 사용자가 키를 아래로 고정할 때 반복되는 키스트로크의 횟수를 포함한다.
NFlags – 다음의 표에 나오는 스캔 코드, 키-변환 코드, 이전의 키 상태, 그리고 칸텍스트 코드들을 포함한다.
값 |
플래그들의 설명 |
0-7 |
스캔 코드(OEM 의존 값) |
8 |
확장키, 기능키 또는 숫자 패드 상의 키(확장키라면 1, 이외의 키라면 0) |
9-10 |
사용되지 않음. |
11-12 |
윈도가 내부적으로 사용. |
13 |
칸텍스트 코드( ALT 키가 눌려 있는 동안 키를 눌렀을 때 1, 이외의 경우 0) |
14 |
이전 키의 상태(메시지가 보내지기 전에 키를 누를 때 1, 키를 놓았을 때 0) |
15 |
전환 상태(키를 놓았을 대 1, 키를 눌렀을 때 0) |
l OnKeyDown
1. 설명 : 프레임워크는 넌시스템 키가 눌러졌을 때 이 멤버 함수를 호출한다. 넌시스템 키는 ALT 키가 눌러지지 않은 키보드의 키이거나 CWnd가 입력 초점일 때 눌러진 키보드의 키이다. 자동 반복 때문에, 이 함수는 OnKeyUp 멤버 함수가 호출되기 이전에 OnKeyDown 멤버 함수가 호출된 호출된 이후에 호출된다. 이전 키의 상태가 OnKeyDown의 호출이 첫 번째 다운 전환이거나 만복된 다운 전환인지의 여부를 결정하는데에 이용될 수 있다. Enhanced 키들은 주요 부분들 상의 오른쪽 ALT 키와 오른쪽 CTRL 키이다. INS, DEL, HOME, END, PAGE UP, PAGE DOWN, 그리고 화살키들, 그리고 숫자 패드에 있는 슬래쉬(/)와 엔터키이다. 다른 키보드들도 nFlags에서 이러한 확장된 키 비트를 제공 한다.
2. 구문 : afx_msg void OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags );
3. 파라미터
nChar – 주어진 키의 가상 키 코드를 지정한다.
NRepCnt – 카운트를 반복한다. (키스트로크 횟수는 사용자가 키를 누르고 있는 결과이다.)
NFlags – 다음 리스트에 나온것과 같은, 스캔 코드, 키 전환 코드, 이전 키의 상태, 그리고 칸텍스트 코드들이다. => OnChar 참조
l OnKeyUp
1. 설명 : 프레임워크는 넌시스템 키가 눌러졌을 때 이 멤버 함수를 호출한다. . 넌시스템 키는 ALT 키가 눌러지지 않은 키보드의 키이거나 CWnd가 입력 초점일 때 눌러진 키보드의 키이다. 자동 반복 때문에, 이 함수는 OnKeyUp 멤버 함수가 호출되기 이전에 OnKeyDown 멤버 함수가 호출된 호출된 이후에 호출된다. 이전 키의 상태가 OnKeyDown의 호출이 첫 번째 다운 전환이거나 만복된 다운 전환인지의 여부를 결정하는데에 이용될 수 있다. Enhanced 키들은 주요 부분들 상의 오른쪽 ALT 키와 오른쪽 CTRL 키이다. INS, DEL, HOME, END, PAGE UP, PAGE DOWN, 그리고 화살키들, 그리고 숫자 패드에 있는 슬래쉬(/)와 엔터키이다. 다른 키보드들도 nFlags에서 이러한 확장된 키 비트를 제공 한다.
2. 구문 : afx_msg void OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags );
3. 파라미터 : OnKeyDown과 동일.
l OnTimer
1. 설명 : 타이머를 설치하는데 사용된 SetTimer 함수 내에 지정된 각각의 시간 간격 후에 이 함수가 호출된다. 애플리케이션의 메시지 큐 내에 다른 어떤 메시지도 없을 때 DispatchMessage 윈도 함수는 WM_TIMER 메시지를 보낸다.
2. 구문 : afx_msg void OnTimer( UINT nIDEvent );
3. 파라미터
nIDEvent – 타이머의 식별자를 지정한다.
MDI 메시지 핸들러
l OnMDIActivate
1. 설명 : 프레임워크는 자식 윈도를 활성화 또는 비활성화시키기 위해 이 멤버 함수를 호출한다. MDI 자식 윈도는 MDI 프레임 윈도에 따라 활성화된다. 프레임이 활성화되면 OnMDIActivate 호출을 받고 마지막으로 활성화된 자식 윈도는 WM_NCACTIVATE 메시지를 받아 활성화된 윈도 프레임과 캡션 바를 그리게 된다. 그러나 또다른 OnMDIActivate 호출을 받지 않는다.
2. 구문 : afx_msg void OnMDIActivate( BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd );
3. 파라미터
bActivate – 자식이 활성화되면 TRUE, 비활성화되면 FALSE이다.
PActivateWnd- MDI 자식 윈도가 활성화되도록 하는 포인터를 갖는다. MDI 자식 윈도가 전해주면 pActvateWnd는 활성화되는 자식 윈도에 대한 포인터를 갖는다. 이 포인터는 일시적인 것일 수 있으며, 이후에 사용하기 위해 저장해서는 안된다.
PDeactivateWnd – MDI 자식 윈도가 비활성화되도록 하는 포인터를 갖는다. 이 포인터는 일시적인 것일 수 있으며 이후에 사용하기 위해 저장해서는 안된다.