File & Folder Dialog 개량하기

 

 

Maxscript에서는 getOpenFileName,getSavePath.. 의 함수를 이용해 Dialog을 생성합니다.

그런데 이런 Dialog는 XP에서 사용하던 예전 모습으로 보여지는데요.

Win7 이상을 사용하는 이때에 말이죠.

(사용성도 조금 아쉽고.. 무엇보다 간지력이 떨어진다는거죠.)

 

 

File Select

 

이를 DotNet를 사용해 Dialog를 개량 할 수 있는데요.

OpenFileDialog를 가지고 한번 해보겠습니다.

 

<Maxscript함수로 구현>

getOpenFileName caption:"Open File" types:"All Files (*.*)|*.*|"

 

<DotNet으로 구현>

dno_OpenFileDialog = dotNetObject  "System.Windows.Forms.OpenFileDialog"

dno_OpenFileDialog.Filter = "All Files (*.*)|*.*"

dno_OpenFileDialog.showDialog()

dno_OpenFileDialog.FileName

사용하기가 훨씬 더 좋죠.

DotNet으로 하면 MultiSelect도 지원되니 사용해볼만 하겠죠.

 

 

Folder Select

 

Folder 선택 기능인 getSavePath 함수를 대신 할 DotNet 기능은 FolderBrowserDialog입니다.

그런데 FolderBrowserDialog는 Maxscript 함수인 getSavePath기능과 Dialog가 같습니다.

다른 창들은 다 개량 되었으나 FolderBrowserDialog는 예전 XP에서 사용하던 그대론데요.

 

Vista에서는 개량 된 FolderBrowserDialog를 사용 할 수 있었으나, Win7으로 오면서 다시 XP에서 사용하던 Dialog로 돌아 갔더군요.

대신 Vista에 처럼 볼 수 있는 API를 따로 제공했는데요.

Windows API Code Pack

그런데 MSDN에 CodePack의 주소를 찾을 수 없습니다.

(이유는 잘 모르겠지만...)

그래서 아래 Dll을 첨부 합니다.

microsoft.windowsapicodepack.dll

microsoft.windowsapicodepack.shell.dll

32bit : C:\Windows\System32\

64bit : C:\Windows\SysWOW64\

 

또한 이를 해결한 블로그가 있어 추가로 소개 합니다.

아래 경로로 가시면 Ookii.Dialogs를 받을 수 있습니다.

http://www.ookii.org/Software/Dialogs/

가서 받기 귀찮으면 아래 링크

Ookii.Dialogs.dll

Ookii.Dialogs.chm

여기에 Vista용 FolderBrowserDialog를 사용 할 수 있는 API가 들어 있습니다.

(Ookii.Dialogs.chm을 참고하세요.)

 

<Maxscript함수로 구현>

getSavePath()

 

<DotNet으로 구현>

-- windowsapicodepack --

dotNet.loadAssembly (microsoft.windowsapicodepack.shell.dll 의 경로) -- Dll Load가 안되어 있다면

dotNet.loadAssembly (microsoft.windowsapicodepack.dll 의 경로)

dno_CommonOpenFileDialog = dotNetObject "Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog"

dno_CommonOpenFileDialog.IsFolderPicker = true

dno_CommonOpenFileDialog.showDialog()

dno_CommonOpenFileDialog.FileName

 

-- Ookii.Dialogs --

dllPath = Ookii.Dialogs.dll의 경로 주소

dotNet.loadAssembly dllPath

dno_VistaFolderBrowserDialog = dotNetObject "Ookii.Dialogs.VistaFolderBrowserDialog"
dno_VistaFolderBrowserDialog.showDialog()
dno_VistaFolderBrowserDialog.SelectedPath

두 방법다 결과는 같습니다.

 

Posted by Hwanggoon
,