// FrameworkNotifySink.h: interface for the CFrameworkNotifySink class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FRAMEWORKNOTIFYSINK_H__E5927148_521E_11D1_9B97_00C04FA3B60C__INCLUDED_)
#define AFX_FRAMEWORKNOTIFYSINK_H__E5927148_521E_11D1_9B97_00C04FA3B60C__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "mmfw.h"
#include "..\cdopt\cdopt.h"

#define WM_DISCCHANGED WM_USER + 1500

typedef struct CompNode
{
    IMMComponent*       pComp;
    HWND                hwndComp;
    HMENU               hmenuComp;
    IMMFWNotifySink*    pSink;
    struct CompNode*    pNext;
    TCHAR                szTitle[MAX_PATH*2];
} COMPNODE, *PCOMPNODE;

LPCDOPT GetCDOpt();
LPCDDATA GetCDData();

class CFrameworkNotifySink : public IMMFWNotifySink  
{
public:
	CFrameworkNotifySink(PCOMPNODE pNode);
	virtual ~CFrameworkNotifySink();

    STDMETHOD (QueryInterface)(REFIID riid, LPVOID *ppvObj);
    STDMETHOD_(ULONG,AddRef)();
    STDMETHOD_(ULONG,Release)();

	STDMETHOD (OnEvent)(MMEVENTS mmEventID, LPVOID pEvent);
    STDMETHOD_(void*,GetCustomMenu)();
    STDMETHOD_(HPALETTE,GetPalette)();
    STDMETHOD_(void*,GetOptions)();
    STDMETHOD_(void*,GetData)();

public:
    static HWND m_hwndTitle;

private:
	DWORD m_dwRef;
    PCOMPNODE m_pNode;
    TCHAR m_szAppName[MAX_PATH/2];
};

#endif // !defined(AFX_FRAMEWORKNOTIFYSINK_H__E5927148_521E_11D1_9B97_00C04FA3B60C__INCLUDED_)