2011-07-03 4 views
2

することで、現代のメニューが私はMFCまたはWindowsフォーム(MenuStrips)を使用して作られたもののようなメニューを意味します。私はそれが可能であることを知っているので、私はWindows APIで開発されたそれを使用するいくつかのアプリを見てきました。また、Win32 ++ライブラリで実行されています.MFCとWinFormsはWin APIラッパーにすぎません。最新のメニューが含まれている場合、Win APIにも含まれている必要があります。しかし、私の質問は... Windows Apiで直接menustripを作成するにはどうしたらいいですか?CommonControlsには含まれていますか?それとも自分で実装する必要がありますか?もしそうなら、どのように?コード例が必要ですが、必要ではありません。Win Apiでモダンなメニューを作成するには?

メニュー多少この

enter image description here

+0

Windows APIは、CまたはC++固有ではありません。 – Puppy

+0

@DeadMG私は知っています。私はタグbecを使いました。私は、C/C++の人々が他の高級言語を使用する人よりもWInAPiについてもっと知っていると思っていました。 – ApprenticeHacker

+0

あなたはあなたが望むタイプのメニューを作り出すアプリを見つけましたか? Dependency WalkerをEXEで使用して、どのDLLを使用しているか、DLLが依存している機能を確認してください。それはあなたにメニューがどのように作成されるかについての大きな手がかりを与えるはずです。 http://www.dependencywalker.com/ –

答えて

1
MFCとのWinFormsはただ勝つAPIのラッパーは、彼らが現代のメニューが含まれている場合ので、勝つAPIはそれらも含まれている必要がありますされている

これは当てはまりません。基本的なメニュー処理コードは、Win32コードライブラリ(基本的にはuser32.dll)に存在します。これにより、メッセージを作成、描画、処理してメニューを機能させることができますが、それらは非常に基本的なメニュー(プレーンテキストのみ)です。 MFCはWin32関数を呼び出し、他のユーザーと同じようにメッセージを処理することで動作しますが、カスタム描画ルーチンを使用して見栄えを向上させます。そしてこれはまさに他のすべての図書館がそれを行う方法です。それを行う他の唯一の方法は、メニュー全体を自分で描画することです(別のウィンドウです)、アイコンを描画したり、マウスが上に移動するとハイライトを処理したり、ボタンのクリックなどを処理したりすることは時間の無駄ですWin32にそれをさせることができれば。

このようにメニューを表示したい場合は、自分でコーディングするか、他の人がコーディングしたライブラリを使用する必要があります。それはそれと同じくらい簡単です。

+1

ブロッククォートを作成するには、 '>'(電子メールの引用が一般的にうまくいくように)と並んでいます。デモのためにあなたの答えを編集しました。 –

+0

WindowsメニューAPIは、アイコンの描画をサポートしています。 –

+0

@David、チュートリアル/リファレンス/ドキュメント/ anything-elseを含むリンクを投稿してください。私はそれをする方法を知らない。 – ApprenticeHacker

2

MFCとWinformsは、これらのカスタムメニューを実装する非常に似た方法を使用します。 ToolBar/ToolStripクラスのジェネリックサポートから始まり、メニューバー/アイテムクラス用に特化しています。

vc/atlmfc/src/mfcにMFC実装があります。 afxtoolbarxxx.cppソースコードファイルは約24,000行のC++コードです。メニュークラスの特殊化はafxmenuxxx.cppにあります。もう1つは数千のソースコード行です。

Winformクラスのソースコードは、参照元から入手できます。 ToolStripxxx.csのソースコードファイルは、約40,000行のC#コードです。メニュークラスの特殊化は、もう1つの数千ものソースコード行であるMenuxxx.csにあります。

両方とも、それぞれのフレームワークで提供されるサポートクラス、ウィンドウラッパーやイメージ/テキストレンダリングのサポートなどの基本的なものを使用します。

このような数字は、大部分のプログラマが自分自身を書き換えることが可能であると考えている以上の大きさです。MFCとWinformsの両方の実装には、多くの鐘や笛があります。より多くのWinforms、それははるかに多くのソースコードを持っている基本的な理由。しかし、この種の機能サポートは、置き換えようとする代わりに使用するクラスライブラリを提供するという明確な意図で追加されました。推奨します。

0

CodeJock's Extreme Toolkitなどのサードパーティライブラリが必要です。

予算に余裕がない場合は、無料のソースコードをCode Projectと掘り下げてください。

関連する問題