トップ回答者
CMFCPropertyGridPropertyにキー"c"入力できない(C#との連携)

質問
-
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"キー入力は何にも発生しませんでした。
どなたが解決策をご存じの方がいらっしゃいましたらご教授ください。
回答
-
レス付きませんね。
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を
使っている証拠が見当たらない。
などの懸念もありますので、注意が必要です。
すべての返信
-
レス付きませんね。
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を
使っている証拠が見当たらない。
などの懸念もありますので、注意が必要です。