前不着村,后不着店,只能根据经验猜,请采纳:
首先,m_pMe应该是一个封装了窗口视区 *** 作的对象指针,m_MemDC是一个封装了临时位图数据的设备句柄,是一个CDC对象,它是在内存中"作画",而没有直接输出到屏幕。代码注解如下:
// 如果m_pMe对象指针不为NULL(即关联视区的对象存在)if(m_pMe!=NULL)
{
// 没有函数代码,不知道Draw功脊升羡能。
m_pMe->Draw(m_pMemDC,FALSE)
// 设置pMemDC的背景模式,即在输出文字时不擦除已存在的背景。
pMemDC->SetBkMode(TRANSPARENT)
// 把"生命值:"输出到指定坐标(0, 20)位置的内存位图中,4是字符串长度。
pMemDC->TextOutW(0, 20, L"生命值:", 4)
// 设置输出文字的颜色为红色。
pMemDC->SetTextColor(RGB(255, 0, 0))
CString c
// 把Plane_Life数值转换成指定格式的字符串,并保存在CString对象中。
c.Format(_T("%d"), Plane_Life)
// 把Plane_Life结果输出到指定坐标(50, 20)位置的内存位图中。
pMemDC->TextOutW(50, 20, c)
// 把"得分:"输出到指定坐标(0, 40)位置的内存位图中。
pMemDC->TextOutW(0, 40, L"得分:", 3)
// 参照上面
CString ss
ss.Format(_T("%d"), score)
pMemDC->TextOutW(50, 40, ss)
pMemDC->TextOutW(0, 0, L"关卡:",3)
// 参照上面
CString cs
cs.Format(_T("%d"樱拍), guan)
笑差pMemDC->TextOutW(50, 0, cs)
}
这里涉及一个函数GetKeyState。一般逻辑上是这样判断的:在PreTranslateMessage中,如果pMsg->wParam==SHOOTKEY设置一个标记位(并发射一颗),如果标记已经为真芹稿空,那么敬州SetTimer触发定时器,定时器中GetKeyState判断按键状态,如果为真,完成连续发射,为假,KillTimer。
同样在PretranslateMessage中,在WM_KEYUP消嫌瞎息中,KillTimer结束定时器。
如果希望做的更好,用线程取代定时器。
循环m_service和m_queue的时候,循环超界了。镇肆int server::FindNextOne(int type)
{
int ret
int length=m_service.GetCount()
int comtype
POSITION pos = m_service.GetHeadPosition()
POSITION tpos = m_queue.GetHeadPosition()
while(pos!=NULL &&tpos!=NULL) //同步循团旅灶环m_service和m_queue
{
comtype =m_service.GetAt(pos)
if (comtype==type) {//如果m_service当前值与type相同
ret = m_queue.GetAt(tpos)//返回m_queue同一位置的值
m_service.RemoveAt(pos) //删塌扮除当前位置并返回
m_queue.RemoveAt(tpos)
return ret
}
m_service.GetNext(pos) //同时向后移动一个位置
m_queue.GetNext(tpos)
}
return -1//返回错误
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)