none
CMFCPropertyGridPropertyにキー"c"入力できない(C#との連携) RRS feed

  • 質問

  • C#で作成したメインフレーム(EXE)と、C++で作成したDLLが連携して動作しています。

    メインフレームのタブページに、C++のプロパティウィンドウを子ウィンドウとして作成し、表示しています。アイテム値を変更するとき、キー"c"と"C"のみ入力できません。(コピーはできます)

    また、C++のダイアログにプロパティウィンドウを貼り付けた場合、キー"c"と"C"は正常に入力できます。

    具体的には、

    propertyWnd = new CPropertyWnd();                 //CWndクラス。 CMFCPropertyGridCtrl, CMFCPropertyGridPropertyを生成する

    propertyWnd->Create(NULL, _T("MyPrpWnd"), WS_CHILD | WS_VISIBLE, rcParent, pwndParent, ID_MyPrpWnd);

     rcParent: メインフレームのタブページのサイズ(rect)

    pwndParent: メインフレームのタブページのウィンドウハンドラから、FromHandle()より得られたCWnd*ポインタ

    Spy++を使って、プロパティウィンドウのメッセージをモニタしました。キー"c"と"C"以外のキー入力は、WM_COMMAND(EN_CHANGE, EN_UPDATE)メッセージが発生しましたが、キー"c"と"C"キー入力は何にも発生しませんでした。

    どなたが解決策をご存じの方がいらっしゃいましたらご教授ください。
    2013年1月23日 2:04

回答

  • レス付きませんね。

     1.当該のプロパティグリッドの入力欄に'c'、'C'が入力できない(無視される)。
     2.SetValue()で初期文字列は設定できる。
     3.CTRL+Cで、コピーはできる。
     4.当該のプロパティグリッドの親をSPY++したら、'Cを入力しても
      EN_CHANGEが発生しなかった。

    という症状でよろしいでしょうか。
    この場合想像できる原因としては

     A.アクセラレータ(ショートカットキー)に'C'が登録されている。
     B.当該のCMFCPropertyGridPropertyの派生クラスで、何らかの誤りにより、
      'C''c'を無視している。

    が、考えられます。
    A.はメインであるC#側、B.は当該DLLのC++コード側ですね。

    さて、提示されたコードについてですが、これだけでは、

     5.CMFCPropertyGridPropertyないし、その派生クラスを使っている
      証拠が見当たらない。
     6.加えて、上記プロパティグリッドの親となるCMFCPropertyGridCtrlを
      使っている証拠が見当たらない。

    などの懸念もありますので、注意が必要です。

    2013年1月25日 2:04
  • 仲澤さん

    ご教授、ありがとうございました。 'A.アクセラレータ(ショートカットキー)に"C"が登録されている'が一発的中です。

    メインフレームに、開発途中の評価用ボタンがタブページに後ろに隠れていて、そのボタンのアクセラレータ(ショートカットキー)が"C"になっています。ボタンを削除すると、問題は解決しました。GUIのベース部分をよくチェックしなかったことは、本当に恥ずかしいです。>_<

    • 回答としてマーク F5_Run 2013年1月28日 6:29
    2013年1月28日 6:29

すべての返信

  • レス付きませんね。

     1.当該のプロパティグリッドの入力欄に'c'、'C'が入力できない(無視される)。
     2.SetValue()で初期文字列は設定できる。
     3.CTRL+Cで、コピーはできる。
     4.当該のプロパティグリッドの親をSPY++したら、'Cを入力しても
      EN_CHANGEが発生しなかった。

    という症状でよろしいでしょうか。
    この場合想像できる原因としては

     A.アクセラレータ(ショートカットキー)に'C'が登録されている。
     B.当該のCMFCPropertyGridPropertyの派生クラスで、何らかの誤りにより、
      'C''c'を無視している。

    が、考えられます。
    A.はメインであるC#側、B.は当該DLLのC++コード側ですね。

    さて、提示されたコードについてですが、これだけでは、

     5.CMFCPropertyGridPropertyないし、その派生クラスを使っている
      証拠が見当たらない。
     6.加えて、上記プロパティグリッドの親となるCMFCPropertyGridCtrlを
      使っている証拠が見当たらない。

    などの懸念もありますので、注意が必要です。

    2013年1月25日 2:04
  • 仲澤さん

    ご教授、ありがとうございました。 'A.アクセラレータ(ショートカットキー)に"C"が登録されている'が一発的中です。

    メインフレームに、開発途中の評価用ボタンがタブページに後ろに隠れていて、そのボタンのアクセラレータ(ショートカットキー)が"C"になっています。ボタンを削除すると、問題は解決しました。GUIのベース部分をよくチェックしなかったことは、本当に恥ずかしいです。>_<

    • 回答としてマーク F5_Run 2013年1月28日 6:29
    2013年1月28日 6:29