渲染模板

#pragma once
typedef 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));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值