Add generic notification support for the common controls.

This commit is contained in:
Dimitrie O. Paun 2002-09-06 18:33:18 +00:00 committed by Alexandre Julliard
parent d969605b87
commit 1c628e06b9
1 changed files with 131 additions and 0 deletions

View File

@ -4,6 +4,7 @@
*
* Copyright 1999 Thuy Nguyen
* Copyright 1999 Eric Kohl
* Copyright 2002 Dimitrie O. Paun
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -23,6 +24,8 @@
#ifndef __WINE_COMCTL32_H
#define __WINE_COMCTL32_H
#include "commctrl.h"
extern HMODULE COMCTL32_hModule;
extern HBRUSH COMCTL32_hPattern55AABrush;
@ -125,4 +128,132 @@ BOOL Str_SetPtrAtoW (LPWSTR *lppDest, LPCSTR lpSrc);
#define WINE_FILEVERSION 5, COMCTL32_VERSION_MINOR, 0, 0
#define WINE_FILEVERSIONSTR "5.00"
/* Notification support */
inline static LRESULT send_notify(HWND hwnd, UINT code, NMHDR *hdr)
{
hdr->hwndFrom = hwnd;
hdr->idFrom = GetWindowLongW (hwnd, GWL_ID);
hdr->code = code;
return SendMessageW (GetParent(hwnd), WM_NOTIFY, hdr->idFrom, (LPARAM)hdr);
}
inline static LRESULT hwnd_notify(HWND hwnd, UINT code)
{
NMHDR hdr;
return send_notify(hwnd, code, &hdr);
}
inline static BOOL hwnd_notify_char(HWND hwnd, UINT ch, DWORD prev, DWORD next)
{
NMCHAR nmch;
nmch.ch = ch;
nmch.dwItemPrev = prev;
nmch.dwItemNext = next;
return (BOOL)send_notify(hwnd, NM_CHAR, &nmch.hdr);
}
inline static BOOL hwnd_notify_keydown(HWND hwnd, UINT nVKey, UINT uFlags)
{
NMKEY nmk;
nmk.nVKey = nVKey;
nmk.uFlags = uFlags;
return (BOOL)send_notify(hwnd, NM_KEYDOWN, &nmk.hdr);
}
inline static DWORD hwnd_notify_mouse(HWND hwnd, UINT code, DWORD spec, DWORD data, POINT *pt, LPARAM dwHitInfo)
{
NMMOUSE nmm;
nmm.dwItemSpec = spec;
nmm.dwItemData = data;
nmm.pt.x = pt->x;
nmm.pt.y = pt->y;
nmm.dwHitInfo = dwHitInfo;
return send_notify(hwnd, code, &nmm.hdr);
}
#define DEFINE_CHAR_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static BOOL notify_char(CTRLINFO *infoPtr, UINT ch, DWORD prev, DWORD next) \
{ return hwnd_notify_char(infoPtr->hwndSelf, ch, prev, next); }
#define DEFINE_CLICK_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static void notify_click(CTRLINFO *infoPtr) \
{ hwnd_notify(infoPtr->hwndSelf, NM_CLICK); }
#define DEFINE_DBLCLK_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static void notify_dblclk(CTRLINFO *infoPtr) \
{ hwnd_notify(infoPtr->hwndSelf, NM_DBLCLK); }
#define DEFINE_HOVER_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static BOOL notify_hover(CTRLINFO *infoPtr) \
{ return hwnd_notify(infoPtr->hwndSelf, NM_HOVER); }
#define DEFINE_KEYDOWN_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static BOOL notify_keydown(CTRLINFO *infoPtr, UINT nVKey, UINT uFlags) \
{ return hwnd_notify_keydown(infoPtr->hwndSelf, nVKey, uFlags); }
#define DEFINE_KILLFOCUS_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static void notify_killfocus(CTRLINFO *infoPtr) \
{ hwnd_notify(infoPtr->hwndSelf, NM_KILLFOCUS); }
#define DEFINE_NCHITTEST_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static DWORD notify_nchittest(CTRLINFO *infoPtr, DWORD spec, DWORD data, POINT *pt, LPARAM dwHitInfo) \
{ return hwnd_notify_mouse(infoPtr->hwndSelf, NM_NCHITTEST, spec, data, pt, dwHitInfo); }
#define DEFINE_OUTOFMEMORY_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static void notify_outofmemory(CTRLINFO *infoPtr) \
{ hwnd_notify(infoPtr->hwndSelf, NM_OUTOFMEMORY); }
#define DEFINE_RCLICK_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static BOOL notify_rclick(CTRLINFO *infoPtr) \
{ return hwnd_notify(infoPtr->hwndSelf, NM_RCLICK); }
#define DEFINE_RDBLCLK_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static void notify_rdblclk(CTRLINFO *infoPtr) \
{ hwnd_notify(infoPtr->hwndSelf, NM_RDBLCLK); }
#define DEFINE_RELEASEDCAPTURE_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static void notify_releasedcapture(CTRLINFO *infoPtr) \
{ hwnd_notify(infoPtr->hwndSelf, NM_RELEASEDCAPTURE); }
#define DEFINE_RETURN_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static void notify_return(CTRLINFO *infoPtr) \
{ hwnd_notify(infoPtr->hwndSelf, NM_RETURN); }
#define DEFINE_SETCURSOR_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static BOOL notify_setcursor(CTRLINFO *infoPtr, DWORD spec, DWORD data, POINT *pt, LPARAM dwHitInfo) \
{ return hwnd_notify_mouse(infoPtr->hwndSelf, NM_SETCURSOR, spec, data, pt, dwHitInfo); }
#define DEFINE_SETFOCUS_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static void notify_setfocus(CTRLINFO *infoPtr) \
{ hwnd_notify(infoPtr->hwndSelf, NM_SETFOCUS); }
#define DEFINE_TOOLTIPSCREATED_NOTIFICATION(CTRLINFO, hwndSelf) \
inline static void notify_tooltipscreated(CTRLINFO *infoPtr) \
{ hwnd_notify(infoPtr->hwndSelf, NM_TOOLTIPSCREATED); }
#define DEFINE_COMMON_NOTIFICATIONS(CTRLINFO, hwndSelf) \
DEFINE_CHAR_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_CLICK_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_DBLCLK_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_HOVER_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_KEYDOWN_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_KILLFOCUS_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_NCHITTEST_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_OUTOFMEMORY_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_RCLICK_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_RDBLCLK_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_RELEASEDCAPTURE_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_RETURN_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_SETCURSOR_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_SETFOCUS_NOTIFICATION(CTRLINFO, hwndSelf) \
DEFINE_TOOLTIPSCREATED_NOTIFICATION(CTRLINFO, hwndSelf) \
struct __forward_dummy_struc_dec_to_catch_missing_semicolon
#endif /* __WINE_COMCTL32_H */