Last Updated 2002/09/30
Programming Tips Visual C++ API  索 引 
SHBrowseForFolder(フォルダ選択ダイアログ)にボタン追加
2002/09/30

BFFM_INITIALIZED にて自前のボタン作成後,フォルダ選択ダイアログをサブクラス化する.
このプロシジャにて,作成したボタンの WM_COMMAND に応答して後は元のプロシジャに流す.

コールバックの BFFM_INITIALIZED 時,プロシージャを変更する(サブクラス化)
    OldProc = ( WNDPROC )SetWindowLong( hWnd, GWL_WNDPROC, ( LONG )NewSubProc );
( hWnd は「フォルダ選択のダイアログ」(SHBrowseForFolderのコールバックにわたってくるハンドル)のウィンドウハンドル)

上で指定した NewSubProc にて
    if( ( uMsg == WM_COMMAND ) && ( LOWORD( wParam ) == 自分で作ったボタンのID ) ) {
        // ボタンの処理
    }
    return( CallWindowProc( ( FARPROC )OldProc, hWnd, uMsg, wParam, lParam ) );



[OK]ボタンと[キャンセル]ボタンの間にボタンを追加した場合など,TAB オーダーがおかしい場合は,[キャンセル]ボタンを ::DestroyWindow() で一旦削除して,再び作成する(ID は IDCANCEL)を作成するとタブオーダーは正常となる.


参照
SHBrowseForFolder(フォルダ選択ダイアログ)
クラス内コールバック関数
フォルダ選択ダイアログにてフォルダの作成
前後のTips
SHBrowseForFolder(フォルダ選択ダイアログ)にボタン追加

DSS ProgrammingTipsCGI Ver2.01