WM_COMMAND user message macro
Here is a nice macro that works very nice if you are working on an MFC project involving user messages. I always got irritated every time I had to add user messages, and sometimes forgot what parameters should be used. This macro pops up a nice dialog box where you just enter your user message (e.g. WM_MYMESSAGE) and it inserts the message body + the line in the AFX_MSG_MAP as well as the line in the header file under AFX_MSG.
It creates the name based on the message, so if it finds "WM_" in the beginning, this is stripped away and replaced with the word "On" just like all the other MFC messages are defined.
It uses another macro you have on your web page called ToggleHandCPP. It should probably be refined better so that it doesn't spew garbage when it is unable to find the header file.
BTW, you have to be in the CPP file to run the macro, if not a message box will pop up. (The macro can be extended to do this switch automatically of course.)
I've been using this for a while and it seems to work just fine. Please report any bugs if you find them.
Sub AddMessage()
'DESCRIPTION: Adds user messages to MFC project (WM_COMMAND)
ext = ActiveDocument.Name
pos = Instr(ext, ".")
if pos > 0 then
Do While pos <> 1
ext = Mid(ext, pos, Len(ext) - pos + 1)
pos = Instr(ext, ".")
Loop
ext = LCase(ext)
end if
If ext = ".cpp" Then
msg = InputBox ("Write the message ID:")
If msg <> "" Then
'func = LCase(msg)
If Left(msg, 3) = "WM_" Then
func = "On" + Mid(msg,4,1) + Mid(LCase(msg),5)
End If
ActiveDocument.Selection.EndOfDocument
ActiveDocument.Selection.FindText "AFX_MSG_MAP", dsMatchBackward
ActiveDocument.Selection.FindText "AFX_MSG_MAP", dsMatchBackward
ActiveDocument.Selection.CharRight dsMove, 2
ActiveDocument.Selection.WordRight dsExtend
ActiveDocument.Selection.Copy
ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "ON_MESSAGE("+msg+", "+func+")"
ActiveDocument.Selection.EndOfDocument
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "LONG "
ActiveDocument.Selection.Paste
ActiveDocument.Selection = "::"+func+"( UINT uParam, LONG lParam )"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "{"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "return 0;"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.CharLeft
ActiveDocument.Selection = "}"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.LineUp
ActiveDocument.Selection.LineUp
ActiveDocument.Selection.LineUp
ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection.NewLine
ToggleHandCPP
ActiveDocument.Selection.EndOfDocument
ActiveDocument.Selection.FindText "AFX_MSG", dsMatchBackward
ActiveDocument.Selection.LineUp
ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "afx_msg LONG "+func+"( UINT uParam, LONG lParam );"
ToggleHandCPP
End If
Else
MsgBox "File is not a .cpp file"
End If
End Sub