CPropertySheetのタブオーダーの変更
MFCを使ったダイアログアプリでCPropertySheet, CPropertyPageを
使用してタブで切り替えの出きるUIを作成しようとしています。
(WindowsXP Pro sp2, .NET2003)
以下のようにCPropertySheet, CPropertyPageの派生クラスを作成し,
CPropertySheetの派生クラスのコンストラクタでCPropertyPageの
派生クラスをAddPageしています.
class CPage : public CPropertyPage
{
DECLARE_DYNAMIC(CPage)
public:
CPage();
virtual ~CPage();
enum { IDD = IDD_PAGE };
protected:
DECLARE_MESSAGE_MAP()
}
class CSheet : public CPropertySheet
{
DECLARE_DYNAMIC(CSheet)
private:
CPage m_page;
public:
CSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
virtual ~CSheet();
protected:
DECLARE_MESSAGE_MAP()
};
CSheet::CSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
AddPage( &m_page );
}
上記のCSheetをメインダイアログのOnInitDialogでCreateして,
メインダイアログ内に貼り付けて使用しています.
m_sheet = new CSheet( "", this );
m_sheet->Create( this, WS_CHILD|WS_VISIBLE, WS_EX_CONTROLPARENT );
これで,タブオーダーが(メインダイアログ内のコントロール)→(CPage内のコントロール)→(タブ)という順番になってしまっています.
これを(メインダイアログ内のコントロール)→(タブ)→(CPage内のコントロール)に変更することは可能でしょうか?
PretransMessageでTABキー押下イベントを横取りし,無理やり
フォーカスの移動順を変更した場合には,うまくできましたが,
もう少しスマートな方法はないかと思い投稿させていただきました.
宜しくお願い致します.
お礼
EnumChildWindows なんてあるのですね。 独自のメッセージでないと、 結局自分が受け取ってしまうわけですか。 ありがとうございました。大変参考になりました。