5

私はMFCアプリケーションに取り組んでいますが、これは何年にもわたって、さまざまな開発者チームでかなり厄介になりました。すべてのコマンド/メッセージマッピングを含むresource.hファイルは、時間の経過とともにかなり大きくなり、多くの問題(IDの重複など)があります。私はMFCに精通していないので、質問はかなりばかげているように聞こえるかもしれません...

MSDNのドキュメントには、コマンドIDとメッセージIDは、それぞれWM_USERとWM_APPより小さくてはならないことが記載されています。Visual Studioによって生成されたresource.hのコマンドIDのほとんどが100前後で始まることを確認しました。これにより、アプリケーションで定義されたIDと重複するMFC / Windowsコマンドおよびメッセージに干渉することはありませんか?たとえば、私はコマンドIDを持っています:

#define ID_MY_ID 101

同じIDを持つWindowsコマンドがあります。MCがこのコマンドをAPPに送信すると、アプリケーションで定義されたID_MY_IDのように処理され、アプリは不要なアクションを実行します。それは可能なシナリオですか?

また、プロジェクトリソースのプロファイルを作成するのに役立つサードパーティツールはありますか?

アップデート1:

新しい質問が表示されました:アプリケーションクラスに新しいカスタムコマンドを追加するための好ましい方法は何ですか?私が理解したように、次の方法で追加される前に、コマンドIDをresouce.hに追加してから、メッセージマップハンドラーを処理クラスに追加します。

4

3 に答える 3

7

あなたは2つのものを混ぜています:

  1. メッセージ ID。これらは WM_USER より大きくなければなりません。メッセージ ID は resource.h で定義されていません。あなたの説明から、アプリケーションのプライベート メッセージを使用していないようです。
  2. コマンド ID。アプリケーション自体に重複するコマンド ID があってはなりません。また、コマンド ID の値は、afxres.h で定義されている標準の MFC ID に干渉しないようにする必要があります。これらのコマンド ID は 0xE100 から始まるため、resource.h. リソース コンパイラは、rc ファイル内の重複する ID に対してエラーを生成します。

resource.h を手動で編集する必要はおそらくありません。

「リソース シンボル」ツール (リソース ビューでリソースを右クリックし、ポップアップ メニューから選択します。VC++ を使用していると仮定します) を使用して、resource.h から未使用の ID をすべて削除することをお勧めします。

于 2010-04-04T07:57:56.810 に答える
1

通常、リソース内の識別子を手動で挿入または編集する必要はありません (VS によって自動的に正しい方法で割り当てられた識別子)。識別子に手動で干渉する必要がある場合もありますが、リソースを使用した以前の開発者チームの作業が正しかったという仮定から始めることができます。したがって、リソースが原因で問題が発生しなかった場合は、そのままにしておきます(私見)。

「MSDN のドキュメントでは、コマンド ID とメッセージ ID は、対応する WM_USER と WM_APP 未満であってはならないことが記載されています。」- 何かごちゃごちゃしているようですね。

于 2010-04-03T22:59:34.720 に答える
1

コマンド メッセージは、パラメーターにコマンド ID を指定して WM_COMMAND で送信されるため、他のメッセージと競合しません。

于 2010-04-03T20:40:47.827 に答える