实现渲染的多态且逻辑控制可以分散布署的技巧

/********************************************************************
 file name :  g:/工具源码/WinCE/OvlManager/OvlManager/Listen.h
 author  : Clark
 created  : 27:1:2011   16:09
 purpose  : 
*********************************************************************/

 

接口
typedef void  RENDER_FUN(void* pThis, HDC hdc);
class CListen
{
public:
 CListen(HWND hWnd, RECT rtWindows, HINSTANCEUserEx* hResource);
 ~CListen(void);


 void    Hit(POINT* ptMouse);
 void Render(HDC hdc)
 {
  if( WAIT_OBJECT_0 == WaitForSingleObject(m_hMutex,INFINITE))
  {
   m_pRenderFun(this, hdc);
   ReleaseMutex(m_hMutex);
  }
 }

 void SetRenderFun( RENDER_FUN* pRender )
 {
  if( WAIT_OBJECT_0 == WaitForSingleObject(m_hMutex,INFINITE))
  {
   m_pRenderFun = pRender;
   ReleaseMutex(m_hMutex);
  }
 }

private:
 static void RenderUSBCONNECT( LPVOID pThis, HDC hdc);
 static void RenderLOWPOWER( LPVOID pThis, HDC hdc);
 static void RenderDESK( LPVOID pThis, HDC hdc);
 static void RenderDefault( LPVOID pThis, HDC hdc);
 friend static DWORD WINAPI ListenThread(LPVOID i_lparam);
 RENDER_FUN*    m_pRenderFun;
 HANDLE     m_hMutex;
};
使用
g_pListen->Render((HDC) wParam);
g_pListen->Hit(&ptMouse);

 

 

//////////////////////////

扩展的时侯可以让渲染函数以代理模式实现

总结: 用函数指针的好处是, 底层端实现了新的渲染功能后,不用对新渲染功能赋加额外的控制逻辑,从而导致控

制中心不用做出修改。

你可能感兴趣的:(实现渲染的多态且逻辑控制可以分散布署的技巧)