Holy cow, I wrote a book!
We saw last time that you can specify a separator in a menu item template by specifying zero for everything, even though technically you're supposed to pass MFT_SEPARATOR for the flags. What's the deal with that alternate form for menu item template separators?
MFT_SEPARATOR
This goes back to the early days of the InsertMenu function (and its friends like AppendMenu and ModifyMenu). In the Before Time, the way you specified a separator was to add a null pointer. Not a null string (a string with no characters, consisting only of the null terminator), but an actual null pointer.
InsertMenu
AppendMenu
ModifyMenu
AppendMenu(hmenu, MF_STRING, 0, NULL);
The recommended way of adding a separator is, of course, to use MF_SEPARATOR, but this old-fashioned method is still supported for backward compatibility. The alternate form of the menu item template for separators is just a throwback to the days when this "old style" of adding a separator was in fact the only style.
MF_SEPARATOR