본문 바로가기

Program Languege/WinAPI

공통 대화상자 - 3

색상 대화상자

 

 사용자에게 색상을 입력받을 필요가 있을 때 사용한다. 색상값은 그 특성상 직접 눈으로 보지 않고 선택하기 어렵기 때문에 일반적인 방법으로 입력받기 곤란한다. 색상은 빨간색, 파란색, 초록색의 삼원색의 혼합으로 표현되는데 이 방식대로 색상을 선택하려면 3개의 정수 값을 입력받아야 하며 게다가 수치만으로는 실제 색상이 어떻게 나올지 바로 알 수 없으므로 무척 불편하다.

 

BOOL ChooseColor(LPCHOOSECOLOR lpcc);

 

 파일 열기 대화상자와 마찬가지로 구조체의 포인터만을 인수로 가진다. 사용자가 색상을 선택했으면 TRUE를 리턴하며 취소했으면 FALSE를 리턴한다.  CHOOSECOLOR 구조체는 다음과 같다.

 

typedef struct {
    DWORD IStructSize;
    HWND hwndOwner;
    HWND hlnstance;
    COLORREF rgbResult;
    COLORREF* IpCustColors;
    DWORD Flags;
    LPARAM ICustData;
    LPCCHOOKPROC IpfnHook;
    LPCTSTR IpTemplateName;
} CHOOSECOLOR;

 

 lStructSize, hwndOwner, hInstance 등의 인수와 커스터마이징에 관련된 인수들은 파일열기와 동일하다. 사용자가 선택한 색상은 rgbResult 멤버로 전달되며 lpCustColor는 커스텀 색상을 전달하거나 돌려받기 위한 배열이다. Flags에 지정할 수 있는 플래그도 대부분 파일 열기 대화상자와 유사하며 다음과 같다.

 

 

 CHOOSECOLOR 구초제를 0으로 초기화하고서 lStructSize, hwndOwner, lpCustColor만 값을 지정해준 후 ChooseColor함수를 호출 한 뒤 rgbResult 값만 읽으면 된다.

 

 

 

 

 

폰트 선택 대화상자

 

 사용자로부터 글꼴을 입력받는 대화상자이다. ChooseFont 함수를 사용한다.

 

 BOOL ChooseFont(LPCHOOSEFONT lpcf);

 

 이 함수가 요구하는 CHOOSEFONT 구조체는 다음과 같다.

 

typedef struct {

DWORD IStructSize;
HWND hwndOwner;
HDC hDC;
LPLOGFONT IpLogFont;
INT iPointSize;
DWORD Flags;
DWORD rgbColors;
LPARAM ICustData;
LPCFHOOKPROC IpfnHook;
LPCTSTR IpTemplateName;
HINSTANCE hlnstance;
LPTSTR IpszStyle;
WORD nFontType;
WORD _MISSING_ALlGNMENT_ ;
INT nSizeMin;
INT nSizeMax;

} CHOOSEFONT;

 

각 멤버의 설명은 다음과 같다.(앞에 대화상자들의 구조체와 동일한 부분은 생략되어있다.)

 

Flags 에 들어가는 Flag값들은 다음과 같다.

 

 

 

 사용자가 선택한 폰트에 대한 정보는 네 번째 멤버인 lpLogFont 멤버를 통해 리턴된다.

 

 

 

 

 

찾기 대화상자

 

 프로그램이 관리하는 어떤 데이터 중에서 원하는 문자열을 검색할 때는 검색조건을 입력받기 위해 사용된다. 이 대화상자는 입력 받는 대화상자일 뿐 이 대화상자가 직접 찾기지 않는다. 그리고 다른 공통 대화상자와는 달리 이 두 대화상자는 특이하게도 모델리스로만 동작한다. 한번 찾을 때마다 창을 열었다 닫았다 하기엔 너무 불편할 것이기때문이다.

 

(대화상자는 동작방식에 따라 크게 모달형과 모델리스형으로 나뉘어진다. 모달형의 경우 대화상자를 닫기 전에 다른 윈도우로 전환할 수 없고 OK나 CANCEL 버튼을 눌러 대화상자를 닫아야 다른 윈도우로 전환할 수 있다. 모델리스의 경우 대화상자가 열려있는 상태에서 다른 윈도우로 전환할 수 있다.)

 

HWND FindText(LPFINDREPLACE lpfr);

HWND ReplaceText(LPFINDREPLACE lpfr);

 

 두 함수의 기능이 유사하기 때문에 사용하는 구조체도 동일하다.

 

typedef struct {

DWORD IStructSize;
HWND hwndOwner;
HINSTANCE hlnstance
DWORD Flags;
LPTSTR IpstrFindWhat;
LPTSTR IpstrReplaceWith;
WORD wFindWhatLen;
WORD wReplaceWithLen;
LPARAM ICustData;
LPFRHOOKPROC IpfnHook;
LPCTSTR IpTemplateName;

} FINDREPLACE, *LPFINDREPLACE;

 

 

Flags에 들어가는 Flag 값은 다음과 같으며 대화상자를 초기화하기 위한 것과 사용자의 입력을 리턴하는 것도 있다. [출]이라고 되어있는 Flag는 사용자의 선택을 리턴하기 위한 Flag이다.

 

 

 대화상자로부터 리턴 값을 받는 방법은 다른 공통 대화상자와는 다르다. FindText함수는 대화상자를 띄우기만 할 뿐이므로 이 함수 호출 후 곧바로 리턴 값을 받는 것이 아니고 실행중에 FINDMSGSTRING이라는 메시지로 리턴 값을 받는다. 다음 찾기 또는 바꾸기 등의 버튼을 누를 때 사용자가 입력한 옵션을 FINDREPLACE 구조체에 담아 이 메시지의 lParam으로 전달한다.

 

 

 

출처 - 윈도우즈 API 정복

'Program Languege > WinAPI' 카테고리의 다른 글

컨트롤  (0) 2014.05.08
공통 대화상자 - 2  (0) 2014.05.05
공통 대화상자 - 1  (0) 2014.05.05
스레드  (0) 2014.04.29
프로세스  (0) 2014.04.29