Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

114 lines
2.3 KiB

#include "precomp.h"
#include "ThreadEvent.h"
const int WM_TEP_MESSAGE = WM_USER+101;
// static members
BOOL ThreadEventProxy::s_bWndClassRegistered = FALSE;
const LPTSTR ThreadEventProxy::s_szWndClassName = "NAC_TEP_HIDDENWINDOW";
ThreadEventProxy::ThreadEventProxy(IStreamEventNotify *pNotify, HINSTANCE hInst)
{
WNDCLASSEX wndClass;
if (s_bWndClassRegistered == FALSE)
{
ZeroMemory(&wndClass, sizeof(wndClass));
wndClass.cbSize = sizeof(wndClass);
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = WndProc;
wndClass.hInstance = hInst;
wndClass.lpszClassName = s_szWndClassName;
RegisterClassEx(&wndClass);
s_bWndClassRegistered = TRUE;
}
m_hwnd = CreateWindow(s_szWndClassName, "Hidden Window",
WS_OVERLAPPEDWINDOW, 0, 0, 0, 0,
NULL,
NULL,
hInst,
NULL);
if (m_hwnd)
SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LPARAM)this);
m_pNotify = pNotify;
return;
}
ThreadEventProxy::~ThreadEventProxy()
{
MSG msg;
// just in case there is an outstanding message posted in the
// queue for this window, clear the
if (m_hwnd)
{
SetWindowLongPtr(m_hwnd, GWLP_USERDATA, 0);
}
while (PeekMessage(&msg, m_hwnd, 0, 0, PM_REMOVE))
{
;
}
DestroyWindow(m_hwnd);
m_hwnd = NULL;
}
// static
LPARAM ThreadEventProxy::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
ThreadEventProxy *pTEP;
pTEP = (ThreadEventProxy*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (pTEP != NULL)
{
switch (uMsg)
{
case WM_TEP_MESSAGE:
{
// the message codes for the stream notifcation are
// contained
if (pTEP->m_pNotify)
pTEP->m_pNotify->EventNotification(HIWORD(wParam), LOWORD(wParam), HIWORD(lParam), LOWORD(lParam));
return 0;
}
}
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
BOOL ThreadEventProxy::ThreadEvent(UINT uDirection, UINT uMediaType,
UINT uEventCode, UINT uSubCode)
{
WPARAM wParam;
LPARAM lParam;
wParam = MAKELONG(uMediaType, uDirection);
lParam = MAKELONG(uSubCode, uEventCode);
if (m_hwnd)
{
PostMessage(m_hwnd, WM_TEP_MESSAGE, wParam, lParam);
return TRUE;
}
return FALSE;
}