渲染模板

    技术2026-09-28  5

    #pragma oncetypedef void  RENDER_FUN(void* pThis, HDC hdc);

     

    class Server{public: Server(RECT& rtDlg); virtual ~Server(void); void    SetRenderFun(RENDER_FUN* pRender); void    Render(HDC hdc); void    Hit(POINT* ptMouse); //实现应用层逻辑控制, 应用层逻辑控制应该和win32层(或者不规范的说:系统层)逻辑控制分开实现。

    private: static void   RenderDefault( LPVOID pThis, HDC hdc); RENDER_FUN*   g_pRenderFun; RECT    m_rtDlg; HANDLE    m_hMutex;};

    /

     

    #include "StdAfx.h"#include "Server.h"#include "../../CE600/HDCBuf.h"

    Server::Server(RECT& rtDlg){ CopyRect(&m_rtDlg,&rtDlg); TCHAR szID[MAX_PATH]; _stprintf(szID,_T("MUTEX_FOR_COM_CDC_%d"),__LINE__); m_hMutex = CreateMutex(NULL,FALSE,szID); SetRenderFun(RenderDefault);}

    Server::~Server(void){ if( WAIT_OBJECT_0 == WaitForSingleObject(m_hMutex,5000)) {  ReleaseMutex(m_hMutex); } CloseHandle(m_hMutex);}

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

    void Server::Render( HDC hdc ){ if( WAIT_OBJECT_0 == WaitForSingleObject(m_hMutex,INFINITE)) {  g_pRenderFun(this, hdc);  ReleaseMutex(m_hMutex); }}

    void Server::Hit( POINT* ptMouse ){ if( RenderDefault == g_pRenderFun) { }}

    void Server::RenderDefault( LPVOID pThis, HDC hdc ){ Server* pServer = (Server*)pThis; HDCBuf hdcBuf(&hdc,&(pServer->m_rtDlg)); hdcBuf.fillRect(RGB(255,0,0));}

    最新回复(0)