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

解決


KID  2007-09-08 03:47:53  No: 66249

環境
  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-08 04:51:39  No: 66250

自己解決

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

でできました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加