Could you please tell me what those window ids are used for that are passed to CGXEditControl::CreateControl and the other CreateControl methods for the other cell types? Is there a problem if I use the same id for a cell types?

In 99% this makes no difference because the grid is not using these window control id's at all. But, I found that the control id can be essential when you have owner-drawn comboboxes or listboxes because MFC  will use the control id to determine the combobox or listbox object for calling OnDrawItem, OnMeasureItem etc. (CGXTabbedComboBox and CGXTabbedComboBoxWnd are owner-drawn comboboxes and listboxes for example).

Objective Grid itself does ignore the control id. When CGXGridCore::DoCtlColor is called only one cell (the current cell) can be active and fire notifications to the parent window. Therefore Objective Grid has no problems to determine which window has sent that notification.

So, what I recommend  is:

Instead of using a random number you can use directly the control id that is also used in CGXStyle::SetControl.

Example:

   // default edit box
  pControl = new CGXEditControl(pGrid, GX_IDS_CTRL_EDIT);
  break;
   // combobox allows user to input any text
  pControl = new CGXComboBox(pGrid, GX_IDS_CTRL_COMBOBOX, GX_IDS_CTRL_COMBOBOX, GXCOMBO_NOTEXTFIT);
  break;
   // combobox uses an integer as cell value
  pControl = new CGXComboBox(pGrid, GX_IDS_CTRL_ONEBASED, GX_IDS_CTRL_ONEBASED, GXCOMBO_ONEBASED);
...

With CGXComboBox don't worry about using the same id twice in the call to the constructor.