读书人

一个初始化实例的有关问题

发布时间: 2012-03-27 13:44:24 作者: rapoo

一个初始化实例的问题 - C++ Builder / Windows SDK/API

C/C++ code
void CALLBACK PlayDrawFun(long nPort,HDC hDc,LONG nUser) {    CPlayer264demoDlg* pDlg = (CPlayer264demoDlg*)nUser;    pDlg->m_VideoWndDC = hDc;        if (!pDlg->m_bLButtonDown) return ;        if ((pDlg->m_StartPoint.x == pDlg->m_EndPoint.x)         && (pDlg->m_StartPoint.y == pDlg->m_EndPoint.y))        return ;        SelectObject(hDc, CreatePen(PS_SOLID, 2, RGB(255,0,0)));        MoveToEx(pDlg->m_VideoWndDC, pDlg->m_StartPoint.x, pDlg->m_StartPoint.y, 0);     LineTo(pDlg->m_VideoWndDC, pDlg->m_EndPoint.x, pDlg->m_StartPoint.y);     LineTo(pDlg->m_VideoWndDC, pDlg->m_EndPoint.x, pDlg->m_EndPoint.y);        MoveToEx(pDlg->m_VideoWndDC, pDlg->m_StartPoint.x, pDlg->m_StartPoint.y, 0);     LineTo(pDlg->m_VideoWndDC, pDlg->m_StartPoint.x, pDlg->m_EndPoint.y);     LineTo(pDlg->m_VideoWndDC, pDlg->m_EndPoint.x, pDlg->m_EndPoint.y);            DeleteObject(SelectObject(hDc, GetStockObject(BLACK_PEN)));    DeleteObject(SelectObject(hDc, GetStockObject(WHITE_BRUSH)));}



这里面的
C/C++ code
CPlayer264demoDlg* pDlg = (CPlayer264demoDlg*)nUser;

为何意呢。
CPlayer264demoDlg为我自己的一个类

[解决办法]
PlayDrawFun是回调函数,一般通过参数将要操作的对象的地址传进来,nUser是你对象的地址。CPlayer264demoDlg* pDlg = (CPlayer264demoDlg*)nUser;的意思是将你回调函数传入的对象赋值给本地局部变量,通过操作本地局部变量就可以完成对你传入对象的操作。



[解决办法]
nUser强制转换CPlayer264demoDlg *类型

读书人网 >C++ Builder

热点推荐