'API Reference'에 해당되는 글 75건

  1. 2007.10.17 RadioButton
  2. 2007.10.17 BM_GETCHECK, BM_SETCHECK( 컨트롤의 메시지 )
  3. 2007.10.17 CheckBox
  4. 2007.10.17 Notification Message( 통지 메시지, WM_COMMAND )
  5. 2007.10.17 Button
  6. 2007.10.17 Control
  7. 2007.10.17 SetTextColor, SetBkColor, SetBkMode
  8. 2007.10.17 CreateFontIndirect
  9. 2007.10.17 CreateFont
  10. 2007.10.17 GetObject

RadioButton

API Reference 2007. 10. 17. 10:59

라디오 버튼도 일종의 버튼이며 "button" 클래스에 BS_RADIOBUTTON, BS_AUTORADIOBUTTON 둘 중 하나의 스타일을 지정하면 라디오 버튼이 된다. 체크 박스와 마찬가지로 수동, 자동의 두 가지 종류가 있는데 대개의 경우 자동 라이오 버튼을 사용한다.


체크 버튼은 진위적인 옵션을 개별적으로 입력받는데 비해 라디오 버튼은 여러 가지 선택 사항 중 한 가지만 선택할 필요가 있을 때 사용한다. 그래서 하나의 선택 사항에 대해 여러 개의 라디오 버튼들이 그룹을 이루어 사용된다는 특징이 있다.


라디오 버튼의 그룹을 구성하는 방법은 첫 번째 라디오 버튼에만 WS_GROUP 스타일을 주면 최초로 WS_GROUP 을 가지는 라디오 버튼부터 다음 WS_GROUP 스타일을 가지는 라디오 버튼 직전 까지가 한 그룹이 된다.



어떤 라디오 버튼들이 같은 그룹에 속하는지를 사용자에게 표시하기 위해 그룹 박스 컨트롤이 사용되는데 그룹 박스는 BS_GROUPBOX 스타일을 가지는 버튼의 일종이지만 화면으로 보여지기만 할 뿐 사용자의 입력을 받아들이거나 어떤 기능을 가지는 것은 아니다.

Posted by 명혀니
,

컨트롤은 자신에게 어떤 변화가 있을 때마다 부모 윈도우로 메시지를 보내며 이 메시지를 통지 메시지라고 부른다. 예를 들어 체크 박스의 경우 사용자가 마우스로 클릭할 때마다 부모 윈도우로 BN_CLICKED 메시지를 보낸다.


컨트롤이 부모 윈도우로 보내는 통지 메시지와는 달리 부모 윈도우가 체크 박스의 현재 상태를 알아보거나 상태를 바꾸고자 할 때도 차일드 윈도우로 메시지를 보낸다.


통지 메시지는 차일드가 부모로 보내는 보고 메시지이고 그냥 메시지는 부모가 차일드에게 어떤 지시를 내리기 위해 보내는 명령이다.


메시지의 종류는 컨트롤마다 다르다.



부모 윈도우가 체크 박스로 보낼 수 있는 메시지에는 다음 두 가지가 있다.


BM_GETCHECK

체크 박스가 현재 체크되어 있는 상태인지를 조사하며 wParam, lParam 은 사용하지 않는다.

체크 상태는 리턴값으로 돌려진다.


BM_SETCHECK

체크 박스의 체크 상태를 변경하며 wParam 에 변경할 체크 상태를 지정한다.



BM_GETCHECK 에 의해 리턴되는 값, 또는 BM_SETCHECK 에 의해 설정되는 체크 박스의 상태는 다음 세 가지가 있다.


BST_UNCHECKED( 값 : 0 )

현재 체크되어 있지 않다.


BST_CHECKED( 값 : 1 )

현재 체크되어 있다.


BST_INDETERMINATE( 값 : 2 )

체크도 아니고 언체크도 아닌 상태

Posted by 명혀니
,

CheckBox

API Reference 2007. 10. 17. 10:58

체크 박스를 만드는 방법은 푸쉬 버튼을 만드는 방법과 동일하다.

클래스 이름도 푸쉬 버튼과 같은 "button" 을 사용하되 스타일에 BS_PUSHBUTTON 대신 체크 박스 스타일을 지정한다는 것만 다르다. 스타일에 따라 4 가지 종류의 체크 박스가 있다.


선택 가능한 옵션의 개수에 따라 두 가지 상태를 가지는 체크 박스( BS_CHECKBOX )와 세 가지 상태를 가지는 체크 박스( BS_3STATE )로 구분된다. 두 가지 상태를 가지는 체크 박스는 선택/비선택 둘 중 하나의 상태를 가지지만 세 가지 상태를 가지는 체크 박스는 선택/비선택 외에도 Grayed 라는 제 3 의 상태를 가진다. Grayed 는 알수 없음, 결정할 수 없음의 뜻을 가진다.


또한 동작 방법에 따라 자동 체크 박스와 수동 체크 박스로 나누어지는데 수동 체크 박스는 선택/비선택 상태를 부모 윈도우가 직접 바꾸어야 하며 자동 체크 박스는 스스로 체크 상태를 바꾼다.

Posted by 명혀니
,

컨트롤은 자신에게 무슨 일이 일어났을 때, 예를 들어 버튼을 클릭했다거나 에디트에 문자열을 입력했다거나 할 경우 부모 윈도우로 통지 메시지( Notification Message )를 보내 어떤 사건이 발생했는지를 알린다.


버튼을 클릭할 경우 WM_COMMAND 메시지를 부모 윈도우에게 보내며 이때 전달되는 정보는 다음과 같다.


HIWORD( wParam )

통지 코드, 차일드 컨트롤이 왜 메시지를 보냈는가를 나타내는 값


LOWORD( wParam )

컨트롤의 ID


lParam

메시지를 보낸 차일드 윈도우의 윈도우 핸들



WM_COMMAND 메시지는 컨트롤의 통지 메시지뿐만 아니라 메뉴 항목, 액셀러레이터 등의 명령을 처리하는 중요한 일을 한다. 이름 그대로 버튼을 누르거나, 메뉴를 선택하거나 액셀러레이터를 누르는 등 사용자로부터의 명령이 될 만한 것들을 모두 처리한다. 이때 컨트롤의 ID, 메뉴 ID, 액셀러레이터 ID 등은 모두 LOWORD( wParam ) 으로 전달되므로 이 세 가지 명령들끼리는 0 ~ 65535 까지의 범위에서 상호 중복되지 않는 ID 를 가져야 한다.

Posted by 명혀니
,

Button

API Reference 2007. 10. 17. 10:58

CreateWindow( TEXT( "button" ), TEXT( "Click Me" ), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

        20, 20, 100, 25, hWnd, ( HMENU )0, g_hInst, NULL );


컨트롤은 윈도우이기는 하지만 홀로 사용될 수 없으며 반드시 부모 윈도우의 차일드로 존재해야 한다.

차일드 컨트롤은 보통 부모 윈도우가 만들어질 때 즉, WM_CREATE 메시지가 발생했을 때 만든다.



button

만들고자 하는 윈도우의 윈도우 클래스이며 컨트롤은 운영체제에 의해 윈도우 클래스가 미리 등록되어 있으므로 별도로 등록할 필요없이 이 인수에 만들고자 하는 컨트롤의 윈도우 클래스명을 적어주면 된다.

대소문자는 구분하지 않는다.


Click Me

윈도우의 타이틀 바에 나타날 윈도우의 제목이되 컨트롤에 따라 캡션이 나타날 위치가 달라진다.

리스트 박스나 스크롤 바처럼 캡션이 필요없고 내용만 있는 컨트롤은 NULL 을 지정하면 된다.

단순한 문자열일 뿐이므로 한글도 사용할 수 있다.


WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON( 스타일 )

윈도우의 속성값이다. 컨트롤은 차일드 윈도우이므로 예외없이 WS_CHILD 스타일은 반드시 주어야 한다.

또한 WS_VISIBLE 스타일을 주어야 ShowWindow 함수를 호출하지 않아도 컨트롤이 화면에 나타나므로 컨트롤의 경우 이 두 스타일값은 거의 예외없이 지정하는 것이 정석이다.


그 외 컨트롤에 따른 고유한 스타일을 추가로 지정하는데 버튼의 경우 다음과 같은 스타일을 사용하며

BS_ 접두어로 시작된다.


BS_PUSHBUTTON

푸시 버튼


BS_DEFPUSHBUTTON

디폴트 푸시 버튼


BS_CHECKBOX

체크 박스


BS_3STATE

3가지 상태를 가지는 체크 박스


BS_AUTOCHECKBOX

자동 체크 박스


BS_AUTO3STATE

3가지 상태를 가지는 자동 체크 박스


BS_RADIOBUTTON

라디오 버튼


BS_AUTORADIOBUTTON

자동 라디오 버튼


BS_GROUPBOX

그룹 박스



20, 20, 100, 25( 위치 )

윈도우의 위치와 크기를 지정한다. 컨트롤의 경우는 부모 윈도우의 작업영역을 기준으로 한 좌표가 사용된다.


hWnd

컨트롤의 부모 윈도우를 지정하는데 컨트롤은 차일드이므로 반드시 부모 윈도우가 있어야 한다.


( HMENU )0 : ID

윈도우에서 사용할 메뉴의 핸들이다. 단 차일드 컨트롤은 메뉴를 가지지 않으므로 이 인수를 컨트롤의 ID 지정 용도로 사용한다.


g_hInst

이 윈도우를 만드는 인스턴스의 핸들


NULL

사용자 정의 데이터이며 MDI 에서 사용하는 구조체인데 일단 무시하고 NULL 로 지정하면 된다.



CreateWindow 함수는 생성된 차일드 컨트롤의 윈도우 핸들을 리턴하는데 핸들이 필요할 경우 별도의 변수에 핸들값을 저장해 두면 된다.

생성한 컨트롤은 부모 윈도우가 파괴되면 자동으로 파괴된다.

Posted by 명혀니
,

Control

API Reference 2007. 10. 17. 10:57

Control( 컨트롤 : 제어, 조절 )

사용자와의 인터페이스를 이루는 도구이다.( 사용자가 프로그램을 제어하는 수단 ) 인터페이스를 이룬다는 말은 사용자로부터 명령과 입력을 받아들이고 출력 결과를 보여준다는 뜻이므로 컨트롤은 곧 입출력 도구를 뜻한다.



표준 컨트롤

버튼, 에디트, 리스트 박스, 콤보 박스, 스크롤 바, 스태틱



컨트롤도 하나의 윈도우이다. 화면상의 일정한 영역을 차지하며 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다. 컨트롤은 윈도우즈가 운영체제 차원에서 제공하기 때문에 윈도우 클래스를 등록할 필요없이 미리 등록되어 있는 윈도우 클래스를 사용하기만 하면 된다.


미리 정의된 윈도우 클래스는 다음과 같다.


button

버튼, 체크, 라디오


static

텍스트


scrollbar

스크롤 바


edit

에디트


listbox

리스트 박스


combobox

콤보 박스



이 윈도우 클래스들은 시스템 부팅시에 운영체제에 의해 등록되므로 윈도우 클래스를 따로 등록할 필요없이 CreateWindow 함수의 첫 번째 인수로 클래스 이름만 주면 해당 컨트롤을 만들 수 있다.

Posted by 명혀니
,

COLORREF SetTextColor( HDC hdc, COLORREF crColor );


글자의 색상을 지정



COLORREF SetBkColor( HDC hdc, COLORREF crColor );


글자 뒤쪽의 배경 색상을 지정



GetTextColor, GetBkColor


현재 설정된 문자색과 배경색을 조사하는 함수



int SetBkMode( HDC hdc, int iBkMode );


배경 색상을 사용할 방법을 설정하며 QPAQUE 와 TRANSPARENT 두 가지 옵션 중 한 가지를 선택할 수 있으며 디폴트는 QPAQUE 이다.



QPAQUE

불투명한 배경을 사용한다. 그래서 배경 색상에 의해 뒷쪽의 그림이 지워진다.


TRANSPARENT

투명한 배경색상을 사용한다. 그래서 문자를 출력한 후에도 배경이 바뀌지 않는다. 즉 문자 획 사이의 여백에 있는 원래 배경이 지워지지 않는다.

Posted by 명혀니
,

CreateFontIndirect

API Reference 2007. 10. 17. 10:56

HFONT CreateFontIndirect( CONST LOGFONT *lplf );


LOGFONT 구조체를 사용하여 폰트를 정의하고 CreateFontIndirect 함수로 폰트 생성



LOGFONT 구조체는 CreateFont 함수의 인수 전체를 멤버로 가지는 구조체이다.

Posted by 명혀니
,

CreateFont

API Reference 2007. 10. 17. 10:56

HFONT CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight,

DWORD fdwltalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet,

DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality,

DWORD fdwPitchAndFamily, LPCTSTR lpszFace );


폰트를 만드는 함수



nHeight

폰트의 높이를 논리적인 단위로 지정한다. 이 값이 0 일 경우는 디폴트 크기가 사용된다.


nWidth

폰트의 폭을 지정하되 이 값이 0 이면 nHeight 에서 지정한 높이에 따라 폭이 자동으로 결정된다.

즉 이 값이 0 이면 폰트의 종횡비( 장평 )가 일정하다.


nEscapement

폰트의 각도를 0.1 도 단위로 설정한다. 이 각도는 문자가 출력될 X 축과 문자열과의 각도이며 일상적인 360 분법의 각도 체계를 사용한다. 즉 세 시 방향이 0 도로 사용되며 반시계 방향으로 각도가 증가한다.


nOrientation

글자 한 자와 X 축과의 각도를 지정한다. nEscapement 는 전체 문자열의 기울기를 지정하는데 비해 이 인수는 개별 문자의 기울기를 설정한다.


fnWeight

폰트의 무게를 0 ~ 1000 까지의 값으로 설정한다.( 폰트의 두께를 설정한다. )

보통 굵기인 FW_NORMAL 이 400 이다.


fdwItalic, fdwUnderline, fdwStrikeOut

기울임체, 밑줄, 관통선 속성을 설정한다. 데이터형이 DWORD 이지만 불린형처럼 사용한다. 속성을 주고 싶으면 0 이외의 값( TRUE )을 주고 속성을 주지 않으려면 0( FALSE )을 준다.


fdwCharSet

문자 코드와 문자의 대응관계를 정의하는 문자셋이다. 폰트 정보 중 가장 중요하다.


fdwOutputPrecision

출력 정확도를 설정한다.


fdwClipPrecision

클리핑 정확도를 설정한다.


fdwQuality

논리적 폰트를 물리적 폰트에 얼마나 근접시킬 것인가를 지정한다.


fdwPitchAndFamily

폰트의 피치와 그룹을 설정한다.


lpszFace

글골의 이름을 나타내는 문자열을 설정한다.

Posted by 명혀니
,

GetObject

API Reference 2007. 10. 17. 10:56

int GetObject( HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject );


지정한 GDI Object의 정보를 얻는데 사용된다.



hgdiobj

정보를 원하는 GDI 오브젝트 핸들


cbBuffer

오브젝트의 정보를 저장할 버퍼의 크기


lpvObject

오브젝트를 저장할 버퍼를 가리키는 포인터



핸들로부터 펜, 브러시, 비트맵 등의 GDI 오브젝트 정보를 조사하는 함수인데 BITMAP 구조체의

bmWidth, bmHeight 멤버를 읽으면 비트맵 크기를 구할 수 있다.

Posted by 명혀니
,