Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MFC resource.h command/message IDs

I'm working on an MFC application, that got pretty messy over years and over different teams of developers. The resource.h file, which contains all command/message mappings grew pretty big over time, and has lots of problems (like duplicate IDs). I am not proficient with MFC, so the question might sound pretty stupid...

MSDN docs mention that Command IDs and Message IDs should not be less than WM_USER and WM_APP correspondingly. I saw that most of the command IDs in resource.h generated by Visual Studio begin around 100. Shouldn't this cause some interfering with MFC/Windows commands and messages, that overlap with the application defined IDs? For example, I have a command ID :

#define ID_MY_ID 101

and there is a windows command that has the same ID. When MC send this command to the APP, it's handled like an application defined ID_MY_ID, and the app is taking unnecessary actions. Is it a possible scenario?

Also, is there some third party tool that helps to profile the project resources?

Update 1:

New question showed up: What is the preferred way of adding new custom commands to the application classes? As I understood, before they were added in the following way: add a command ID to the resouce.h, and then add a message map handler to the handling class.

like image 725
ak. Avatar asked Apr 03 '10 19:04

ak.


2 Answers

You are mixing two things:

  1. Message IDs. These must be larger than WM_USER. Message IDs are not defined in resource.h. It seems from your description that you are not using application private messages.
  2. Command IDs. Your application itself must not have duplicate command IDs. The command ID values should also not interfere with the standard MFC IDs defined in afxres.h. Theses command IDs start at 0xE100, so it is unlikely that the values in resource.h. The resource compiler will generate an error for duplicate IDs in you rc file

There is probably no need for you to edit resource.h manually.

I would recommend to use the "Resource symbols" tool (right click on the resources in resource view and choose from the popup menu, I assume you are using VC++), to remove all the unused IDs from resource.h.

like image 151
Dani van der Meer Avatar answered Sep 23 '22 23:09

Dani van der Meer


command messages are sent in WM_COMMAND with command id in parameter so it won't conflict other messages.

like image 27
Sheng Jiang 蒋晟 Avatar answered Sep 23 '22 23:09

Sheng Jiang 蒋晟