달력

52025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

대화상자는 사용자에게 값을 보여주거나 또는 값을 입력받는 장치이다. 그러므로 대화상자와 부모 윈도우간에 정보를 교환할 수 있는 방법이 필요하다. 그래야 대화상자가 열릴 때 보여주고자 하는 정보를 컨트롤에 출력할 수 있으며 또한 대화상자가 닫힐 때 사용자가 입력한 값을 다시 돌려 받을 수가 있다. 대화상자와 부모 윈도우간에 교환할 수 있는 정보의 종류는 크게 문자열과 정수형 두가지가 있다. 우선 문자열 값을 교환하는 함수에는 컨트롤로부터 문자열을 읽는 함수와 컨트롤로 문자열을 출력하는 함수가 있다.


UINT GetDlgItemText( HWND hDlg, int nIDDlgItem, LPTSTR lpString, int nMaxCount );
BOOL SetDlgItemText( HWND hDlg, int nIDDlgItem, LPCTSTR lpString );


 

첫번째 인수는 대화상자의 윈도우 핸들이며 두번째 인수 nIDDlgItem은 값을 읽거나 쓸 컨트롤의 ID이다. lpString은 대입하고자 하는 문자열, 또는 문자열을 읽을 버퍼이며 문자열을 읽을 때는 버퍼의 길이를 nMaxCount로 명시해 주어야 한다. 정수를 교환하는 함수도 이와 유사하다.


UINT GetDlgItemInt( HWND hDlg, int nIDDlgItem, BOOL *lpTranslated, BOOL bSigned );
BOOL SetDlgItemInt( HWND hDlg, int nIDDlgItem, UINT uValue, BOOL bSigned );


 

첫번째, 두번째 인수는 문자열의 경우와 동일하다. GetDlgItemInt는 해당 컨트롤에 입력된 정수값을 읽어 리턴값으로 둘려주되 네번째 인수 bSigned가 TRUE일 경우는 부호있는 정수값을 읽어주며 FALSE일 경우는 부호를 무시하고 무조건 양수로 읽어준다. 그런데 컨트롤로부터 정수형값을 읽어들일 때는 항상 에러가 발생할 소지가 있다. 예를 들어 에디트에 입력된 정수를 읽어들일 경우 에디트에 숫자 이외의 문자가 있거나 숫자가 너무 클 경우 등이다. 이럴 경우 GetDlgItemInt는 세번째 인수로 지정된 BOOL형 포인터에 에러가 있었는지 없었는지를 대입해준다. 에러 검사를 할 필요가 없을 때는 세번째 인수로 NULL값을 주면 된다.


정수값을 대입하는 SetDlgItemInt는 지정한 컨트롤에 nValue 정수값을 대입해 준다. 잠시 후에 실습을 통해 이 함수들을 사용해 보도록 하자.

Posted by CokeBell
|