文書番号: 161286 - 最終更新日: 2006年8月14日 - リビジョン: 2.1

Win32 API でコモン ダイアログの [ファイルを開く] ダイアログ ボックスを使用する方法

目次

すべて展開する | すべて折りたたむ

概要

この資料では、Comdlg32.dll の [ファイルを開く] ダイアログ ボックスを使用する方法について説明します。また、サンプル コードを掲載しています。Windows では依存ファイルである Comdlg32.dll が常に読み込まれているため、Comdlg32.OCX を利用するのは、Windows 環境でリソースを再利用する良い方法です。Comdlg32.OCX は使用しやすいインターフェイスである反面、パフォーマンスに影響を与える可能性があります。OCX コントロールを使用する場合、モジュールをメモリに読み込む必要があり、また、ソフトウェアのユーザーに 90K の OCX コントロールを配布する必要があります。パフォーマンスを向上させるには、アプリケーションでのコントロールの使用を最小限にとどめる必要があります。そのような場合には、コントロールを使用する代わりに、Win32 API 呼び出しを直接使用することを推奨します。

この API 呼び出しを使用すると、ヘルプ ボタンなど、Comdlg32.OCX で提供されている機能の一部が失われる場合があります。ヘルプ ボタンが必要な場合は、Comdlg32.OCX コントロールを使用する必要があります。

詳細

手順例

  1. Visual Basic 5.0 を起動して、標準 EXE プロジェクトを新規作成します。既に Visual Basic 5.0 を起動している場合は、[ファイル] メニューの [新しいプロジェクト] をクリックし、[標準 EXE] のアイコンをダブルクリックします。デフォルトでは Form1 が作成されます。
  2. Form1 に CommandButton コントロールを配置します。
  3. Form1 のコード ウィンドウに以下のコードを追加します。
          Option Explicit
    
           Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
             "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
    
           Private Type OPENFILENAME
             lStructSize As Long
             hwndOwner As Long
             hInstance As Long
             lpstrFilter As String
             lpstrCustomFilter As String
             nMaxCustFilter As Long
             nFilterIndex As Long
             lpstrFile As String
             nMaxFile As Long
             lpstrFileTitle As String
             nMaxFileTitle As Long
             lpstrInitialDir As String
             lpstrTitle As String
             flags As Long
             nFileOffset As Integer
             nFileExtension As Integer
             lpstrDefExt As String
             lCustData As Long
             lpfnHook As Long
             lpTemplateName As String
           End Type
    
           Private Sub Command1_Click()
             Dim OpenFile As OPENFILENAME
             Dim lReturn As Long
             Dim sFilter As String
             OpenFile.lStructSize = Len(OpenFile)
             OpenFile.hwndOwner = Form1.hWnd
             OpenFile.hInstance = App.hInstance
             sFilter = "Batch Files (*.bat)" & Chr(0) & "*.BAT" & Chr(0)
             OpenFile.lpstrFilter = sFilter
             OpenFile.nFilterIndex = 1
             OpenFile.lpstrFile = String(257, 0)
             OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
             OpenFile.lpstrFileTitle = OpenFile.lpstrFile
             OpenFile.nMaxFileTitle = OpenFile.nMaxFile
             OpenFile.lpstrInitialDir = "C:\"
             OpenFile.lpstrTitle = "Use the Comdlg API not the OCX"
             OpenFile.flags = 0
             lReturn = GetOpenFileName(OpenFile)
             If lReturn = 0 Then
                MsgBox "The User pressed the Cancel Button"
             Else
                MsgBox "The user Chose " & Trim(OpenFile.lpstrFile)
             End If
           End Sub
    
    						
  4. F5 キーを押してプロジェクトを実行し、[Command1] をクリックします。ファイルを開くためのオプション設定を備えた [Use the Comdlg API not the OCX] ダイアログ ボックスが表示されます。

関連情報

Win32 SDK には、ChooseColor、ChooseFont、GetSaveFileName などの Comdlg32.dll に対するその他の呼び出しに関する記載があります。

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
106682? (http://support.microsoft.com/kb/106682/ ) VB のコモン ダイアログでデフォルトの拡張子によりファイルの種類が無視される

137194? (http://support.microsoft.com/kb/137194/ ) GetOpenFileName nMaxFile が正しく解釈されない

この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
キーワード:?
kbhowto KB161286
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"
 

サポート技術情報の翻訳