Home > Net >  Win32 Handle WM_NOTIFY message from Rich Edit Control
Win32 Handle WM_NOTIFY message from Rich Edit Control

Time:07-10

How can I retrieve information about what change is being made in a rich edit control when handling WM_NOTIFY? More specifically, I am confused because in the documentation for WM_NOTIFY it says that lParam points to an NMHDR structure but in the page for EN_CHANGE they say that lParam points to a CHANGENOTIFY structure. What does lParam point to exactly?

CodePudding user response:

If you read the EN_CHANGE documentation you linked to more carefully, you will notice this caveat:

https://docs.microsoft.com/en-us/windows/win32/controls/en-change--rich-edit-control-

Notifies a windowless rich edit control's host window that a change has occurred. A rich edit control sends this notification code in the form of a WM_NOTIFY message.

See Windowless Rich Edit Controls for more details. And, as you noted, this message's CHANGENOTIFY struct does not conform to the standard use of WM_NOTIFY. The message carries only the RichEdit's control ID in the wParam, there is no NMHDR* in the lParam.

If you are using a windowed Rich Edit control instead (which I assume you are), then it uses the same EN_CHANGE message that standard Edit controls use:

https://docs.microsoft.com/en-us/windows/win32/controls/en-change

Sent when the user has taken an action that may have altered text in an edit control. Unlike the EN_UPDATE notification code, this notification code is sent after the system updates the screen. The parent window of the edit control receives this notification code through a WM_COMMAND message.

...

Rich Edit: Supported in Microsoft Rich Edit 1.0 and later. To receive EN_CHANGE notification codes, specify ENM_CHANGE in the mask sent with the EM_SETEVENTMASK message. For information about the compatibility of rich edit versions with the various system versions, see About Rich Edit Controls.

  • Related