none
TreeViewダブルクリック処理 RRS feed

  • 質問

  • 何度も同じような質問をして気が引けるのですが、宜しく御願いします。

    MFCダイアログプログラムでTreeVIewダブルクリック処理の最後で、フォーカス移動とダイアログ最小化をしたいのですが、どちらも出来ません。どのようにすればよいでしょうか?

    (1)フォーカス移動。

     下記両方やってみましたが、動作しませんでした。

     (1.1)

      m_ok.SetFocus(); 

     (1.2)
      CStatic *pstt;
      pstt=(CStatic*)GetDlgItem(IDC_STATIC2);
      GotoDlgCtrl(pstt);  
    (2)最小化

     下記でも駄目でした。

     HWND hMainWindow;
     CString cfc_str;
     cfc_str=FORM_CAPTION;
        hMainWindow=( HWND )FindWindow( NULL, cfc_str );
     :Tongue TiedhowWindow(hMainWindow,SW_MINIMIZE);;

    2007年9月13日 6:44

回答

  • こんにちは、りょーいちです。

     

    回答の前に。。。

     

    色々試している雰囲気はありますが、その前にデバッグちゃんとできてますか?

    自分でやってみたコードが思ったとおりに動かないときは自分なりに原因を検証してみましょう。

     

    その問題の箇所のコードはちゃんと通過しているか、使っている変数は有効な値が入っているか、など。

     関数には、戻り値などに成功/失敗が返ってくるものも多くあるので、それらをちゃんとチェックして、呼び出した関数が成功しているか確認する、など。

     

    if 文なりで戻り値やポインタなどの正当性をチェックするようなコードをきちんと書いておきましょう。

    これらはデバッグ時に限らず、予想外の挙動を防ぐためにつねに必要なことです。

     

     

    あと、一応聞いておきますが、ブレークポイントとかステップ実行とか知ってますよね?

    それ以外 Visual Studio のデバッガの使い方についてはMSDN ライブラリに載っています。

    http://msdn2.microsoft.com/ja-jp/library/sc65sadd(VS.80).aspx

    なぜ思ったとおりに動かないか、を解明するにはデバッガをうまく使いこなしてください。

     

     

    本題です。

    書かれているコードは一応意図しているとおりに動く気がしますが。。。

     

    > フォーカス移動

    SetFocus でも、GotoDlgCtrl でも出来るはずです。

    なぜ出来ないのか、呼んでる場所、使ってる変数などを見直してみてください。

     

    > 最小化

    これも同じく、なぜ出来ないか検討してみてください。

    ちなみに、MFC なら Win32API の ShowWindow でなく、 CWnd クラスメンバの ShowWindow を使ったほうが良いと思います。

    また、同じく MFC なら、 FindWindow を使わないでも、AfxGetMainWnd で CWnd が取得できます。

     

     

    頑張ってください。
    2007年9月13日 12:09

すべての返信

  • こんにちは、りょーいちです。

     

    回答の前に。。。

     

    色々試している雰囲気はありますが、その前にデバッグちゃんとできてますか?

    自分でやってみたコードが思ったとおりに動かないときは自分なりに原因を検証してみましょう。

     

    その問題の箇所のコードはちゃんと通過しているか、使っている変数は有効な値が入っているか、など。

     関数には、戻り値などに成功/失敗が返ってくるものも多くあるので、それらをちゃんとチェックして、呼び出した関数が成功しているか確認する、など。

     

    if 文なりで戻り値やポインタなどの正当性をチェックするようなコードをきちんと書いておきましょう。

    これらはデバッグ時に限らず、予想外の挙動を防ぐためにつねに必要なことです。

     

     

    あと、一応聞いておきますが、ブレークポイントとかステップ実行とか知ってますよね?

    それ以外 Visual Studio のデバッガの使い方についてはMSDN ライブラリに載っています。

    http://msdn2.microsoft.com/ja-jp/library/sc65sadd(VS.80).aspx

    なぜ思ったとおりに動かないか、を解明するにはデバッガをうまく使いこなしてください。

     

     

    本題です。

    書かれているコードは一応意図しているとおりに動く気がしますが。。。

     

    > フォーカス移動

    SetFocus でも、GotoDlgCtrl でも出来るはずです。

    なぜ出来ないのか、呼んでる場所、使ってる変数などを見直してみてください。

     

    > 最小化

    これも同じく、なぜ出来ないか検討してみてください。

    ちなみに、MFC なら Win32API の ShowWindow でなく、 CWnd クラスメンバの ShowWindow を使ったほうが良いと思います。

    また、同じく MFC なら、 FindWindow を使わないでも、AfxGetMainWnd で CWnd が取得できます。

     

     

    頑張ってください。
    2007年9月13日 12:09
  • りょういちさん 重ね重ねありがとうございます。

    デバック、ステップ実行等作業しているのですが良く判らないのです。もう少しがんばってみます。

    2007年9月13日 23:19
  • りょういちさん ようやく出来ました。どうやったかというと。TreeVIewのダブルクリックで動作しなかったので、タイマイベントを起動してそこでSetFocus処理をしました。

    イベント関数で処理できたり、出来なかったりするのですね・・・・・勉強になりました。タイマーイベント関数は利便性高いので多用しそうですね。
    2007年9月13日 23:57