windows-nt/Source/XPSP1/NT/enduser/netmeeting/ui/conf/vidview.h
2020-09-26 16:20:57 +08:00

172 lines
4.5 KiB
C++

/****************************************************************************
*
* FILE: VidView.h
*
* CREATED: Chris Pirich (ChrisPi) 12-16-96
*
****************************************************************************/
#ifndef _VIDVIEW_H_
#define _VIDVIEW_H_
#include <ih323cc.h>
#include "GenWindow.h"
#include "SDKInternal.h"
typedef HANDLE HDRAWDIB; /* hdd */
class CVideoWindow;
interface IVideoChange : public IUnknown
{
virtual void StateChange(CVideoWindow *pVideo, NM_VIDEO_STATE uState) = 0;
} ;
class CVideoWindow : public CGenWindow, public INmChannelVideoNotify
{
public:
static VOID SetMirror(BOOL bMirror);
static BOOL GetMirror() {return g_fMirror != FALSE;}
enum VideoType
{
REMOTE,
LOCAL
} ;
CVideoWindow(VideoType eType, BOOL bEmbedded);
~CVideoWindow();
BOOL Create(HWND hwndOwner, HPALETTE hPal, IVideoChange *pNotify=NULL);
BOOL IsXferAllowed();
BOOL IsAutoXferEnabled();
BOOL IsXferEnabled();
BOOL IsPaused();
BOOL IsConnected();
HRESULT GetVideoState(NM_VIDEO_STATE* puState);
BOOL CanCopy();
BOOL HasDialog(DWORD dwDialog);
DWORD GetFrameSize() { return(m_dwFrameSize); }
DWORD GetFrameSizes();
DWORD GetImageQuality() { return(m_dwImageQuality); }
DWORD GetNumCapDev();
DWORD GetMaxCapDevNameLen();
DWORD GetCurrCapDevID();
VOID SetCurrCapDevID(DWORD dwID);
HRESULT SetImageQuality(DWORD dwQuality);
HRESULT SetCameraDialog(ULONG ul);
HRESULT GetCameraDialog(ULONG* pul);
VOID SetFrameSize(DWORD dwSize);
VOID SetZoom(UINT nZoom);
VOID EnableAutoXfer(BOOL fEnable);
VOID ShowDialog(DWORD dwDialog);
VOID SaveSettings();
VOID Pause(BOOL fPause);
VOID RefreshWindow() { OnFrameAvailable(); }
VOID ResizeWindowsToFrameSize();
VOID EnumCapDev(DWORD *pdwCapDevIDs, LPTSTR pszCapDevNames, DWORD dwNumCapDev);
VOID OnPaletteChanged(void);
VOID OnMinimize(BOOL fMinimize) { /* Should this pause the video? */ }
HRESULT OnChannelChanged(NM_CHANNEL_NOTIFY uNotify, INmChannel *pChannel);
VOID ForwardSysChangeMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
void UpdateVideoMenu(HMENU hMenu);
void OnCommand(int idCmd);
void SetZoomable(BOOL bZoomable) { m_fZoomable = (bZoomable!=FALSE); }
BOOL IsZoomable() { return(m_fZoomable != FALSE); }
// IUnknown
STDMETHODIMP_(ULONG) AddRef(void) { return(CGenWindow::AddRef()); }
STDMETHODIMP_(ULONG) Release(void) { return(CGenWindow::Release()); }
STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppvObj);
// INmChannelVideoNotify
STDMETHODIMP NmUI(CONFN uNotify);
STDMETHODIMP MemberChanged(NM_MEMBER_NOTIFY uNotify, INmMember *pMember);
STDMETHODIMP StateChanged(NM_VIDEO_STATE uState);
STDMETHODIMP PropertyChanged(DWORD dwReserved);
// IGenWindow
virtual VOID GetDesiredSize(SIZE *ppt);
static BOOL FDidNotDisplayIntelLogo();
static VOID DisplayIntelLogo( BOOL bDisplay );
protected:
virtual LRESULT ProcessMessage(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
private:
// Array keeping track of all video windows, so they can be invalidated
// when the state changes (like mirroring)
static CSimpleArray<CVideoWindow *> *g_pVideos;
// Specifies whether we are mirroring the local video.
static BOOL g_fMirror;
// Specifies whether we have done one-time local video init stuff
static BOOL g_bLocalOneTimeInited;
static VOID InvalidateAll();
INmChannelVideo* m_pActiveChannel;
DWORD m_dwCookie;
DWORD m_dwImageQuality;
UINT m_nXferOnConnect;
DWORD m_dwFrameSize;
SIZE m_sizeVideo;
HDRAWDIB m_hdd;
HPALETTE m_hPal;
UINT m_zoom;
IVideoChange *m_pNotify;
BOOL m_fLocal : 1;
// CMainUI uses this to disallow zoom on the PiP window
BOOL m_fZoomable : 1;
// Use this to make sure the embedded window does not display CIF
BOOL m_bEmbedded : 1;
VOID SetVideoSize(LPSIZE lpsize);
UINT GetZoom() { return(m_zoom); }
BOOL ShouldMirror() { return(IsLocal() && GetMirror()); }
VOID OnFrameAvailable(void);
VOID PaintDib(HDC hdc, FRAMECONTEXT *pFrame);
VOID PaintLogo(HDC hdc, UINT idbLargeLogo, UINT idbSmallLogo);
VOID OnPaint();
VOID OnNCDestroy();
void OnContextMenu(HWND hwnd, HWND hwndContext, UINT xPos, UINT yPos);
BOOL CopyToClipboard();
HRESULT GetFrame(FRAMECONTEXT *pFrameContext);
HRESULT ReleaseFrame(FRAMECONTEXT *pFrameContext);
BOOL InitMirroring(RECT &rcVideo);
VOID UnInitMirroring();
HBITMAP m_hBitmapMirror;
SIZE m_sizeBitmapMirror;
HDC m_hDCMirror;
HGDIOBJ m_hGDIObj;
BOOL IsLocal() { return m_fLocal; }
};
#endif // _VIDVIEW_H_