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

    技术2025-12-28  6

    /******************************************************************** 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);

     

     

    //

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

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

    制中心不用做出修改。

    最新回复(0)