|
|
在学VC、编游戏第二章“我来了”之中发现一个问题,百思不得其解。
以下是书中的一部分代码,我把它拷贝下来了。
============================================================================================
- void CMyDlg::OnOK() //确定键,[类向导中定义生成]
- { GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);//隐藏文本框
- CClientDC dc(this); //
- //A、显示文字----------------------------------------------
- SetTextColor(MemDC,RGB(255,255,255)); //设置地图设备场景字色
- SetBkMode(MemDC,TRANSPARENT); //字为透明方式
- cc="哈哈,我来了!!!"; //设文字内容
- TextOut(MemDC,150,100,cc,lstrlen(cc)); //在MemDC显示文字
- BitBlt(dc.m_hDC,0,0,400,300,MemDC,0,0,SRCCOPY);//将MemDC的图形在当前屏幕上显出
- //B、显示角色------------------------------------------------------
- cc.Format("%s人/c%05d.bmp",dir,p); //设人物图片名
- if(loadbmp(cc)==FALSE) //调BMP图片
- {AfxMessageBox(cc+"没找到!");return;}
- SelectObject(MemDC,bit); //设备相关位图关联到暂存设备场景
- BitBlt(dc.m_hDC,200,160,w,h,MemDC,0,0,SRCCOPY);//将MemDC的图形在当前屏幕上显出
-
- // CDialog::OnOK();
- }
复制代码
==================================================================================
程序运行时第一次按[确定]键是正常的。
但是我第二次按[确定]键时,人物图片出现在了地图场景的0,0处。
按程序运行来讲,是不会出现在0,0处的。
因为BitBlt(dc.m_hDC,200,160,w,h,MemDC,0,0,SRCCOPY);这一句已经指定了位置(200,160)。
查看bitblt函数,也没发现问题。
第一次显示正确,而第二次不正确,和显示人物图片相关的语句也就是几条。
怀疑是SelectObject(MemDC,bit);的问题,但是到底有什么问题还不清楚。
后来在BitBlt(dc.m_hDC,200,160,w,h,MemDC,0,0,SRCCOPY);这句后又加了一句:
DeleteDC(MemDC);
再试,问题消失。百思不得其解。 |
|