2008-01-19 [長年日記]

入れ子のダイアログ

ダイアログの中にWS_CHILDを指定したダイアログを配置した場合には、ダイアログマネージャがキーボードアクセラレータの処理などを行ってくれないために自前で処理する必要があると思っていました。が、子ダイアログのスタイルにDS_CONTROLを指定すると、ダイアログマネージャがちゃんと子ダイアログの中のコントロールまで面倒を見てくれることがわかりました。

プロパティシートでは子ダイアログの処理もしてくれるので何かあるはずとは思っていましたが、こんなスタイルだったとは…ちなみに、このスタイルはダイアログが作成されるときに、WS_EX_CONTROLPARENT拡張スタイルに変換されます。

ひとつ注意すべき点は、デフォルトボタンが子ダイアログの中のコントロールにある場合、Enterを押すと親ダイアログにWM_COMMAND(BN_CLICKED)が送られることです。子ダイアログ側でこれを処理したい場合には(普通にボタンをクリックすると子ダイアログ側にWM_COMMANDが送られるので普通はそうしたくなると思います)、親ダイアログから子ダイアログにディスパッチしてやる必要があります。

[]