Common Dialog Box(공용 대화 상자)
CommonDialog 컨트롤은 Visual Basic과 Microsoft Windows 동적 연결 라이브러리 Commdlg.dll 루틴 간에 인터페이스를 제공합니다. 이 컨트롤을 사용하여 대화 상자를 만들려면 Commdlg.dll이 Microsoft Windows \System 디렉터리에 있어야 합니다.
공통 대화 상자를 폼에 추가하고 속성을 설정하여 응용 프로그램에서 사용할 수 있습니다. 컨트롤이 표시하는 대화 상자는 컨트롤의 메서드에 의해 결정됩니다. 실행 모드에서 대화 상자가 표시되거나 적절한 메서드가 호출될 때 도움말 엔진이 실행됩니다. 디자인 모드에서 CommonDialog 컨트롤은 폼에서 아이콘으로 표시됩니다. 이 아이콘의 크기를 변경할 수 없습니다.
CommonDialog 컨트롤을 사용하여 다음과 같은 공통으로 사용되는 대화 상자를 표시할 수 있습니다.
- 열기, 다른 이름으로 저장, 색, 글꼴, 인쇄 상자
CommonDialog 컨트롤을 사용하려면
- CommonDialog 컨트롤을 추가하지 않았다면 [프로젝트] 메뉴의 [구성 요소]를 선택하여 도구 상자에 추가하십시오. [컨트롤] 탭이 있는 대화 상자를 찾아서 선택한 다음 [확인] 단추를 누르십시오.
- 도구 상자에서 CommonDialog 컨트롤을 선택하여 폼에서 그리십시오.
폼에서 CommonDialog 컨트롤을 그리면 자동으로 크기가 조정됩니다. Timer 컨트롤과 마찬가지로 CommonDialog 컨트롤도 실행 모드에서 표시되지 않습니다.
- 실행 모드에서는 다음 표에서처럼 적절한 메서드를 사용하여 원하는 대화 상자를 표시할 수 있습니다.
메서드 | 표시되는 대화 상자 |
ShowOpen | 열기 |
ShowSave | 다른 이름으로 저장 |
ShowColor | 색 |
ShowFont | 글꼴 |
ShowPrinter | 인쇄 |
ShowHelp | Windows 도움말 항목 목차 |
cancelError 속성(true/false) : True 로 설정되면 [취소] 단추를 선택시 오류를 발생시킵니다. (대화상자 모두 공통)
1. 열기 및 다른 이름으로 저장상자의 Flags 설정은 다음과 같습니다.
상수 | 값 | 설명 |
cdlOFNAllowMultiselect | &H200 | [파일 이름] 목록 상자가 여러 구역을 허용하는지의 여부를 지정합니다. 실행 모드에서 원하는 파일을 선택하려면 |
cdlOFNCreatePrompt | &H2000 | 현재 없는 파일을 작성할지 여부를 대화 상자에서 물을지를 지정합니다. 이 플래그는 cdlOFNPathMustExist 플래그와 cdlOFNFileMustExist 플래그를 자동으로 설정합니다. |
cdlOFNExplorer | &H80000 | 탐색기 모양의 파일 [열기] 대화 상자의 서식 파일을 사용합니다. Windows 95와 Windows NT 4.0에서 사용됩니다. |
CdlOFNExtensionDifferent | &H400 | 반환하는 파일의 확장명이 DefaultExt 속성에 지정된 확장명과 다른지를 나타냅니다. 이 플래그는 DefaultExt 속성이 Null일 때 또는 확장명이 일치할 때 혹은 파일에 확장명이 없을 때 설정됩니다. 대화 상자를 닫자마자 이 플래그 값을 확인할 수 있습니다. |
cdlOFNFileMustExist | &H1000 | [파일 이름] 입력란에 기존 파일 이름만 입력할 수 있음을 지정합니다. 이 플래그가 설정하고 부적합한 파일 이름을 입력하면 경고 메시지가 표시됩니다. 이 플래그는 자동으로 cdlOFNPathMustExist 플래그를 설정합니다. |
cdlOFNHelpButton | &H10 | 대화 상자에 도움말 단추를 표시합니다. |
cdlOFNHideReadOnly | &H4 | [읽기 전용] 확인란을 숨깁니다. |
cdlOFNLongNames | &H200000 | 긴 파일 이름을 사용합니다. |
cdlOFNNoChangeDir | &H8 | 대화 상자에서 대화 상자가 열릴 때 디렉터리를 현재 디렉터리로 설정합니다. |
CdlOFNNoDereferenceLinks | &H100000 | 셸 연결(바로 가기 키라고도 함) 참조를 해제하지 마십시오. 기본적으로 셸 연결을 선택하면 셸에서 연결 참조를 해제합니다. |
cdlOFNNoLongNames | &H40000 | 긴 파일 이름은 사용할 수 없습니다. |
CdlOFNNoReadOnlyReturn | &H8000 | 반환된 파일이 읽기 전용 속성으로 설정되어 있지 않고, 쓰기 금지 디렉터리에 있지 않음을 지정합니다. |
cdlOFNNoValidate | &H100 | CommonDialog이 반환하는 파일 이름에 유효하지 않은 문자가 들어갈 수 있음을 지정합니다. |
cdlOFNOverwritePrompt | &H2 | 선택한 파일이 이미 있을 경우 [다른 이름으로 저장] 대화 상자에서 메시지 상자를 표시하도록 합니다. 파일을 겹쳐 쓸지의 여부를 결정해야 합니다. |
cdlOFNPathMustExist | &H800 | 유효한 경로만 입력할 수 있는지를 지정합니다. 이 플래그를 설정하고 잘못된 경로를 입력하면 경고 메시지가 나타납니다. |
cdlOFNReadOnly | &H1 | 대화 상자를 만들 때 [읽기 전용] 확인란이 기본적으로 선택표시되도록 합니다. 또한 대화 상자가 닫힐 때 [읽기 전용] 확인란의 상태도 알려줍니다. |
cdlOFNShareAware | &H4000 | 파일 공유 오류를 무시할 것인지를 지정합니다. |
2. 색 대화상자의 Flags 설정은 다음과 같습니다.
상수 | 값 | 설명 |
cdCClFullOpen | &H2& | 사용자 정의 색 구역을 포함하여 전체 대화 상자를 표시합니다. |
cdlCCHelpButton | &H8& | 대화 상자에서 [도움말] 단추를 표시합니다. |
cdlCCPreventFullOpen | &H4& | [사용자 정의 색] 명령 단추를 비활성화하여 사용자 정의 색을 지정할 수 없도록 합니다. |
cdlCCRGBInit | &H1& | 대화 상자의 초기색 값을 설정합니다. |
3. 글꼴 대화상자의 Flags 설정은 다음과 같습니다.
상수 | 값 | 설명 |
cdlCFANSIOnly | &H400 | 대화 상자에서 Windows 문자 집합을 사용하는 글꼴만 선택할 수 있도록 지정합니다. 이 플래그를 설정하는 경우에는 기호만 들어있는 글꼴을 선택할 수 없습니다. |
cdlCFApply | &H200 | 대화 상자에서 [적용] 단추를 활성화합니다. |
cdlCFBoth | &H3 | 대화 상자가 사용할 수 있는 프린터 글꼴과 화면 글꼴을 나열하도록 합니다. HDC 속성은 프린터와 관련된 장치 컨텍스트을 지정합니다. |
cdlCFEffects | &H100 | 대화 상자에서 취소선, 밑줄, 색 효과를 설정할 수 있도록 합니다. |
cdlCFFixedPitchOnly | &H4000 | 대화 상자에서 고정 피치 글꼴만 선택하도록 지정합니다. |
cdlCFForceFontExist | &H10000 | 없는 글꼴이나 유형을 선택하려고 할 때 오류 메시지 상자가 나타나도록 지정합니다. |
cdlCFHelpButton | &H4 | 대화 상자에 [도움말] 단추를 표시하도록 합니다. |
cdlCFLimitSize | &H2000 | 대화 상자에서 Min 속성과 Max 속성에 지정한 값 범위에 있는 글꼴 크기만 사용하도록 지정합니다. |
cdlCFNoFaceSel | &H80000 | 글꼴 이름을 선택하지 않았습니다. |
cdlCFNoSimulations | &H1000 | 대화 상자에서 가상 글꼴 그래픽 장치 인터페이스(GDI)를 하지 않도록 지정합니다. |
cdlCFNoSizeSel | &H200000 | 글꼴 크기를 선택하지 않았습니다. |
cdlCFNoStyleSel | &H100000 | 글꼴 유형을 선택하지 않았습니다. |
cdlCFNoVectorFonts | &H800 | 대화 상자에서 벡터 글꼴 선택을 선택할 수 없도록 지정합니다. |
cdlCFPrinterFonts | &H2 | hDC 속성에서 지정된 대로 프린터에서 지원하는 글꼴만 대화 상자에 나열하도록 지정합니다. |
cdlCFScalableOnly | &H20000 | 대화 상자에서 크기 조정할 수 있는 글꼴만 선택할 수 있도록 지정합니다. |
cdlCFScreenFonts | &H1 | 대화 상자에 시스템이 지원하는 화면 글꼴만 나열하도록 합니다. |
cdlCFTTOnly | &H40000 | 대화 상자에서 트루타입 글꼴만 선택할 수 있도록 지정합니다. |
cdlCFWYSIWYG | &H8000 | 대화 상자에서 프린터와 화면에서 사용할 수 있는 글꼴만 선택할 수 있도록 지정합니다. 이 플래그를 설정하는 경우 cdlCFBoth 플래그와 cdlCFScalableOnly 플래그도 설정해야 합니다. |
3. 프린트 대화상자의 Flags 설정은 다음과 같습니다.
상수 | 값 | 설명 |
cdlPDAllPages | &H0 | [전체] 옵션 단추의 상태를 반환하거나 설정합니다. |
cdlPDCollate | &H10 | [한 부씩] 확인란의 상태를 반환하거나 설정합니다 |
cdlPDDisablePrintToFile | &H80000 | [파일로 인쇄] 확인란을 비활성화합니다. |
cdlPDHelpButton | &H800 | 대화 상자에 [도움말] 단추를 표시합니다. |
cdlPDHidePrintToFile | &H100000 | [파일로 인쇄] 확인란을 숨깁니다. |
cdlPDNoPageNums | &H8 | [페이지] 옵션 단추와 관련된 편집 컨트롤을 비활성화합니다. |
cdlPDNoSelection | &H4 | [선택] 옵션 단추를 비활성화합니다. |
cdlPDNoWarning | &H80 | 기본 프린터가 없을 때 경고 메시지가 나타나지 않도록 합니다. |
cdlPDPageNums | &H2 | [페이지] 옵션 단추의 상태를 반환하거나 설정합니다. |
cdlPDPrintSetup | &H40 | 시스템에서 [인쇄] 대화 상자보다는 프린터 설정 대화 상자를 표시하게 합니다. |
cdlPDPrintToFile | &H20 | [파일로 인쇄] 확인란의 상태를 반환하거나 설정합니다. |
cdlPDReturnDC | &H100 | 대화 상자에서 선택한 프린터에 대한 장치 컨텍스트를 반환합니다. 장치 컨텍스트는 대화 상자의 hDC 속성에서 반환합니다. |
cdlPDReturnDefault | &H400 | 기본 프린터 이름을 반환합니다. |
cdlPDReturnIC | &H200 | 대화 상자에서 선택한 프린터에 대한 정보 컨텍스트를 반환합니다. 정보 컨텍스트를 사용하면 장치 컨텍스트를 만들지 않고 빠르게 장치에 대한 정보를 얻을 수 있습니다. 정보 컨텍스트는 대화 상자의 hDC 속성으로 반환합니다. |
cdlPDSelection | &H1 | [선택] 옵션 단추의 상태를 반환하거나 설정합니다. CdlPDPageNums와 cdlPDSelection 중 아무 것도 지정하지 않으면 모든 옵션 단추를 선택한 상태가 됩니다. |
CdlPDUseDevModeCopies | &H40000 | 프린터 드라이버가 여러 장의 인쇄 매수를 지원하지 않는 경우 이 플래그를 설정하면 [인쇄] 대화 상자에 있는 [인쇄 매수] 스피너 컨트롤이 비활성화됩니다. 드라이버가 여러 장의 인쇄 매수를 지원할 때 이 플래그를 설정하면 대화 상자가 필요한 매수를 Copies 속성에 저장하게 됩니다. |
실행 모드에서 [인쇄] 대화 상자의 항목을 선택하면 아래 속성에 사용자의 선택 항목에 관한 정보를 간직하게 됩니다.
속성 | 결정 |
Copies | 인쇄 매수 |
FromPage | 인쇄 시작 페이지 |
ToPage | 인쇄 멈춤 페이지 |
Hdc | 선택한 프린터에 대한 장치 컨텍스트 |
예제사용 - 책에 나온 예제를 사용했습니다.(영진 출판사~) 비베공부하려면 최소한 2권정도의 책은 있어야겠죠.(흐흐 딱 두권입슴다.^^;)
개인적인 생각에 영진 출판사 책이 좋더군요. 하지만 아무리 좋은 책이라도 그 한권으로 모든걸 해결 할 수는 없겠죠.
'******************************** ' 열기대화상자 '******************************** Private Sub 열기_Click() ' 다이얼로그 타이틀 지정 dlg공용.DialogTitle = "파일 열기" ' 파일 이름 필터 지정 dlg공용.Filter = "모든 파일(*.*)|*.*|텍스트 파일(*.txt)|*.txt" ' 다이얼로그 플랙 지정 dlg공용.Flags = 0 dlg공용.ShowOpen ' 파일 선택 ' 선택 결과 표시 If dlg공용.FileName <> "" Then MsgBox dlg공용.FileName Else MsgBox "선택을 취소하였습니다." End If End Sub '메시지박스에 파일이름이 어떻게 나오는지 확인해 보세요. |
'******************************** ' 저장대화상자 '******************************** Private Sub 저장_Click() ' 다이얼로그 타이틀 지정 dlg공용.DialogTitle = "새 이름으로 저장" ' 파일 이름 필터 지정 dlg공용.Filter = "모든 파일(*.*)|*.*|텍스트 파일(*.txt)|*.txt" ' 다이얼로그 플랙 지정 dlg공용.Flags = cdlOFNOverwritePrompt dlg공용.ShowSave ' 파일 저장 ' 선택 결과 표시 If dlg공용.FileName <> "" Then MsgBox dlg공용.FileName Else MsgBox "선택을 취소하였습니다." End If End Sub |
'********************************** ' 색선택대화상자 '********************************** Private Sub cmd색선택_Click() ' 다이얼로그 타이틀 지정 dlg공용.DialogTitle = "색상 선택" ' 색상 초기값 dlg공용.Color = 0 ' 다이얼로그 플랙 지정 dlg공용.Flags = 0 dlg공용.ShowColor ' 색상 선택 ' 선택 결과 표시 If dlg공용.Color <> 0 Then MsgBox "배경색을 선택한 색으로 바꿉니다." Me.BackColor = dlg공용.Color Else MsgBox "색상이 선택되지 않았습니다." End If End Sub '이예제를 해보면 검은색은 사용할 수가 없다. If dlg공용.Color <> 0 Then 이부분에서 0이아니면 ~ 이기때문인거 같은데 여기다 1값을 주던지 다른 값을 주시믄 되겠죠. | '******************************** ' 폰트대화상자 '******************************** Private Sub cmd폰트_Click() ' 다이얼로그 타이틀 지정 dlg공용.DialogTitle = "글꼴 선택" ' 폰트 초기값 결정 dlg공용.FontName = "" ' 다이얼로그 플랙 지정 dlg공용.Flags = cdlCFBoth dlg공용.ShowFont ' 글꼴 선택 ' 선택 결과 표시 If dlg공용.FontName <> "" Then MsgBox "버튼의 폰트를 선택한 글꼴로 바꿉니다." ' 커맨드 버튼의 폰트를 선택된 폰트로 바꾼다. With cmd폰트 .FontName = dlg공용.FontName .FontSize = dlg공용.FontSize .FontBold = dlg공용.FontBold .FontItalic = dlg공용.FontItalic .FontStrikethru = dlg공용.FontStrikethru .FontUnderline = dlg공용.FontUnderline End With Else MsgBox "폰트가 선택되지 않았습니다." End If End Sub |
'********************************** '프린트대화상자 '********************************** Private Sub 프린트_Click() ' 다이얼로그 타이틀 지정 dlg공용.DialogTitle = "인쇄 선택" ' 인쇄 가능한 페이지의 범위를 지정 dlg공용.Min = 1 dlg공용.Max = 100 ' 초기 인쇄 범위 지정 dlg공용.FromPage = 1 dlg공용.ToPage = 1 ' 다이얼로그 플랙 지정 dlg공용.Flags = cdlPDPageNums dlg공용.ShowPrinter ' 인쇄 선택 ' 선택 결과 표시 MsgBox Str(dlg공용.FromPage) + "페이지부터 " + _ Str(dlg공용.ToPage) + "페이지까지 인쇄합니다." End Sub |
'********************************** ' 도움말대화상자 '********************************** Private Sub 도움말_Click() ' 도움말 파일 지정 dlg공용.HelpFile = App.Path & "\testhlp.hlp" ' 도움말 호출 커맨드 지정 dlg공용.HelpCommand = cdlHelpContents dlg공용.ShowHelp ' 도움말 표시 End Sub '******************************** ' cmd종료의 클릭 이벤트 핸들러. '******************************** Private Sub cmd종료_Click() Dim result As Integer ' 종료 확인 후 종료 이 부분도 기억하면 좋아요~ result = MsgBox("정말 종료하시겠습니까?", vbYesNo + vbQuestion, "종료확인") If result = vbYes Then End End Sub |
☞ CancelError 속성(true/false) : True 로 설정되면 [취소] 단추를 선택시 오류를 발생시킵니다. (대화상자 모두 공통) |
'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글
[스크랩][ASP .NET] 문자열 다루기 (67) | 2012.09.03 |
---|---|
[VB/.NET] KEY_DOWN과 KEY_PRESS의 정확한 의미 (0) | 2012.08.31 |
[HTML] META Tag의 종류와 사용방법 (0) | 2012.04.10 |
[MFC] SendMessage (0) | 2011.12.24 |
[MSDN] Virtual-Key Codes (가상키코드) (0) | 2011.12.24 |