Plug-in code should not assume when receiving a WM_NOTIFY
message that lParam
is always a pointer to a structure of type OFNOTIFY
. The lParam
parameter should always be interpreted as a pointer to an object of type struct NMHDR
. If NMHDR::code
is between \[CDN_LAST
, CDN_FIRST and is equal to CDN_INITDONE
, lParam
could then be interpreted as a pointer to a OFNOTIFY
struct.
Here's a code snipped that correctly interprets the lParam
parameter received with a WM_NOTIFY
message sent to a file I/O hook procedure:
static INT_PTR CALLBACK HookProc(
HWNDhWnd, UINTmsg, WPARAMwParam, LPARAMlParam)
{
switch (msg) {
case WM_NOTIFY: {
LPNMHDRpNMHDR = (LPNMHDR)lParam;
if (CDN_INITDONE == pNMHDR->code){
OFNOTIFY* pOfnotify = (OFNOTIFY*)lParam;
// Do something with pOfnotify
}
break;
}
// react to more messages
}
return FALSE;
}