一个初始化实例的问题 - 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 *类型