アクティブなコントロールのオブジェクトID を取得するには?

解決


KID  2007-09-07 18:47:53  No: 66249  IP: 192.*.*.*

環境
  XP SP2
  Visual C++ 6.0
  MFC
  [Enter]キーにてフォーカス移動を行う際、ボタンコントロール上かの判定を
  オブジェクトID (IDOK、IDCANCELなど) で行いたいのですが、取得方法が分か
  りません。
  アクティブなコントロールのオブジェクトID を取得する方法を教えて下さい。
  オブジェクトIDが取得できるとフォーカス移動以外にも使えるので(^^;

BOOL CxxxxDlg::PreTranslateMessage(MSG* pMsg) 
{
    // アクティブなコントロールのスタイルを取得
    CWnd* pCWnd = GetFocus();
    UINT uStyle = ((CButton*)pCWnd)->GetButtonStyle();

    if(pMsg->message==WM_KEYDOWN){
        switch (pMsg->wParam){
            case VK_RETURN:
                //  現在とりあえず、
                //  アクティブコントロールのスタイルにて判定
                if(  uStyle != BS_DEFPUSHBUTTON ){ // ボタンでなかったら
                    NextDlgCtrl();    // 次へフォーカス移動
                    return FALSE;
                }
                break;
            case VK_DOWN:
                NextDlgCtrl();      // 次へフォーカス移動
                return FALSE;
            case VK_UP:
                PrevDlgCtrl();        // 前へフォーカス移動
                return FALSE;
        }
    }
    return CDialog::PreTranslateMessage(pMsg);
}

編集 削除
KID  2007-09-07 19:51:39  No: 66250  IP: 192.*.*.*

自己解決

if((GetFocus()->GetDlgCtrlID() != IDOK) &&
         (GetFocus()->GetDlgCtrlID() !=IDCANCEL)){
    NextDlgCtrl(); // 次のタブへフォーカス移動
    return FALSE;
}

でできました。

編集 削除