VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2003/04/04(Fri) 05:29
投稿者peta
Eメール
URL
タイトルRe^3: コモンダイアログの表示

花ちゃん さん から紹介があった Visual Basic Station 
http://www1.harenet.ne.jp/~unaap/
[ライブラリ]-[サンプル] の 47, 49: コモンダイアログの拡張
が大変参考になりますので、解析してみて下さい。

お望みの機能を実現するにはフックプロシージャ(OFNHookProc)に少し手を
入れる必要がありますので、説明します。

1.「ファイル名の表示幅を広く」
(1)ダイアログ幅の変更
  ファイル名の表示幅(ListViewの幅)を変更する前に、先ずダイアログの幅を
  変更します。WM_NOTIFY 通知メッセージの通知コード CDN_INITDONE で変更
  処理します。例えば、こんな感じ。
    hDlg = GetParent(hwnd)
    Call GetWindowRect(hDlg, rcDlg)
    Call SetWindowPos(hDlg, 0, 0, 0, lngDlgWidth, _
                      rcDlg.Bottom - rcDlg.Top, SWP_NOMOVE)
(2)ListView幅の変更
  CDN_INITDONE ではListViewのウィンドウハンドルが得られない様なので、
  CDN_FOLDERCHANGE で取得します。ListViewは、"SHELLDLL_DefView"クラス
  の子ウィンドウの様なので、こんな感じ。
    hWndDef = FindWindowEx(hDlg, 0, "SHELLDLL_DefView", vbNullString)
    hwndLV = FindWindowEx(hWndDef, 0, "SysListView32", vbNullString)
  ウィンドウハンドルを得たら、上記(1)と同様の方法で幅を変更します。
  変更は、hWndDef と hwndLV の両方を同じ幅にして下さい。
2.「詳細表示」
  ListViewのビュースタイルを LVS_REPORT に変更する方法もありですが
  ここは、CDN_FOLDERCHANGE で、ListView幅の変更後、詳細ボタンに
  WM_COMMAND メッセージを送るのが簡単でしょう。こんな感じ。
    hWndTB = FindWindowEx(hDlg, 0, "ToolBarWindow32", vbNullString)
    Call SendMessage(hDlg, WM_COMMAND, &HA004, ByVal hWndTB)
    この処理は、初期表示に1回だけ実行する様にして下さい。
3.「日付降順」
  ヘッダーのマウスクリックをシミュレートする方法が簡単ですが、確実に
  やるなら、リストビューの LVM_SORTITEMS メッセージを使用して日付型
  ソートを行います。この処理は、CDN_FOLDERCHANGEにて、初期表示の
  「詳細表示」の後、1回だけ実行すればいいと思います。
  ソートの内容は、以下のサンプルを参考にして下さい。
  http://www.mvps.org/vbnet/code/callback/lvsortcallback.htm

  フックプロシージャの作成は危険を伴いますので、必ずエラーを潰して
  から実行する様にして下さい。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -