0

CFrameWndを作成するためにMFCを使用しています(はい、MFCである必要があり、.Netと相互運用できません)。

私の目標は、次のようなダイアログ テンプレートに基づく CFormView を含む CFrameWnd を作成することです。

ここに画像の説明を入力

表示するフレームとビューがあり、そこに編集コントロールがあります。今私が欲しいのは、CToolbar を Edit Text コントロールの上部に配置することですが、上部のフレームにはドッキングしないようにすることです。

理想的には、ステートメント グループの代わりに動的に追加できる子フレーム/ビューが必要です。そうすれば、通常どおりツールバーをドッキングできます。

私が奇妙だと思うのは、CreateView 関数を使用してスプリッターがあれば、これを簡単に実現できることです。私は本当にスプリッターを持ちたくないし、別の方法があるべきだと感じています。

要約すると、これらは私が助けを必要としている質問です:

  • Q1 - CView 内に CFrameWnd を配置するにはどうすればよいですか (CSplitter::CreateView のように)。
  • Q2 - 別のフレーム内にドッキングまたはフローティングせずに CView 内にツールバーを配置するにはどうすればよいですか (方法を知っていれば、サイズを変更したり、手動で配置したりします)。

今では、.Net がいかに簡単であるかを本当に感謝しています。

4

1 に答える 1

3

CView 内に CFrameWnd を貼り付けることはお勧めしません。メッセージルーティングなどの内部機能はフレームがビューに存在しないことを前提としているため、基本的にASSERTの世界に住んでいます。

代わりに、CFrameWnd の代わりに CWnd を使用し、'Create' メソッドで手動でツールバーを作成し、ctrl を編集してサイズを調整し、それらを自分で配置します (CMFCToolbar::CalcFixedLayout を使用して他のコンポーネントの位置を調整する AdjustLayout メソッドを作成します)。 .

この好例は、Visual Studio サンプル アプリの PropertiesViewBar.cpp にあります。

http://msdn.microsoft.com/en-us/library/bb983983(v=vs.90).aspx

注: OnCmdMsg をオーバーライドして、メッセージ ルーティングを内部コントロールに拡張する必要がある場合があります。

于 2011-04-18T15:48:43.613 に答える