请问我这个画图的代码,怎么在2000和XP下运行是正常的,98下就不行呢??急啊!!谢谢
请问我这个画图的代码,怎么在2000和XP下运行是正常的,98下就不行呢??急啊!!谢谢
在98下,不能实现黑白交替的正方形格子的翻转。这是什么原因呢????
代码的功能:画黑白正方形交替的图形并定时翻转(比如第一次画出的左上角的格子是黑色的,翻转一次后画出的左上角的格子是白色,依次这样轮流,视觉上感觉向黑白交替的格子在翻转),到一定时刻结束。
思路:定时器1用来触发翻转时刻比如1秒翻转一次,定时器2用来结束翻转。
主要代码:
void CDrawPad::DrawElement(CDC *pDC, const CRect DrawRect, BOOL BlackFirst)//画黑白棋盘格图
{
if (!pDC)
return;
//获得该控件的矩形区域;
CBrush *pOldBrush = (CBrush*)pDC->SelectStockObject(WHITE_BRUSH);
CPen *pOldPen = (CPen*)pDC->SelectStockObject(NULL_PEN);
pDC->Rectangle(DrawRect);
pDC->SelectStockObject(BLACK_BRUSH);
CRect rcBlack(DrawRect.left, DrawRect.top, DrawRect.left + m_size0, DrawRect.top + m_size0);
if (!BlackFirst)
{
rcBlack.OffsetRect(m_size0, 0);
}
while (rcBlack.top < DrawRect.bottom)
{
while (rcBlack.left < DrawRect.right)
{
pDC->Rectangle(rcBlack);
rcBlack.OffsetRect(m_size0 + m_size0, 0);
}
rcBlack.left = DrawRect.left;
rcBlack.top += m_size0;
rcBlack.right = rcBlack.left + m_size0;
rcBlack.bottom = rcBlack.top + m_size0;
if (BlackFirst)
{
rcBlack.OffsetRect(m_size0, 0);
}
BlackFirst = !BlackFirst;
}
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
//在屏幕中央画小红点部分
//画红点部分开始
pDC->FillSolidRect(DrawRect.right/2-5, DrawRect.bottom/2-5, 10, 10, RGB(255,0,0) );
ReleaseDC(pDC);
}
void CDrawPad::OnPaint() //画黑白棋盘格图
{
CPaintDC dc(this); // device context for painting
CDC *memDC = new CDC;
memDC->CreateCompatibleDC(NULL);
CBitmap *memBmp = new CBitmap;
CRect ClientRect;
GetClientRect(ClientRect);
memBmp->CreateCompatibleBitmap(&dc, ClientRect.Width(), ClientRect.Height());
CBitmap *pOldBmp = memDC->SelectObject(memBmp);
if((k%2)==0)
DrawElement(&dc, ClientRect);
else
DrawElement(&dc, ClientRect, FALSE);
dc.BitBlt(ClientRect.left, ClientRect.top, ClientRect.Width(), ClientRect.Height(),
memDC, 0, 0, SRCCOPY);
memDC->SelectObject(pOldBmp);
memDC->DeleteDC();
delete memDC;
memBmp->DeleteObject();
delete memBmp;
k++;
}
void CDrawPad::OnShowWindow(BOOL bShow, UINT nStatus)
{
// 添加定时器
if(bShow)
{
int sj00=1000/m_turn;
int cj00=m_over*1000;
m_timerID1 = this->SetTimer(24,sj00,NULL);
m_timerID2 = this->SetTimer(25,cj00,NULL);
}
CDialog::OnShowWindow(bShow, nStatus);
}
void CDrawPad::OnTimer(UINT nIDEvent) //定时进行黑白棋盘格翻转
{
// TODO: Add your message handler code here and/or call default
switch (nIDEvent)
{
case 24:
InvalidateRect(FALSE);
break;
case 25:
KillTimer(m_timerID1);
KillTimer(m_timerID2);
gm_bWatch = FALSE;
ShowWindow(FALSE);
break;
}
CDialog::OnTimer(nIDEvent);
}
谢谢大家,给点建议把,急啊
问题点数:20、回复次数:5Top
1 楼freeheart1977(逍遥的心)回复于 2004-12-03 14:43:47 得分 5
看看CreateCompatibleDCTop
2 楼ChaseTheSun787(the sun)回复于 2004-12-03 17:09:54 得分 3
不要Release CPaintDC。其实所有的CDC都不用Release,除非你要重新创建一个DC。Top
3 楼koko1998(高价购买火车票)回复于 2004-12-03 19:51:57 得分 6
是不是你写的工程是unicode 形势阿,是的话,在98下不能运行是正常的。98对大部分unicode函数都不支持的Top
4 楼koko1998(高价购买火车票)回复于 2004-12-07 21:15:50 得分 6
vc.net:工程右键的配置属性中有个General下的Character Set中选择Use Unicode Character Set就是unicode工程,选择Use Muti-Byte Character Set就是Ansi工程
vc的嘛,好像是在工程的设置里吧!Top
5 楼koko1998(高价购买火车票)回复于 2004-12-08 09:20:02 得分 0
我看你还是在msn上查查可能出现问题的函数吧。
主要是看看这些:
Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Wingdi.h; include Windows.h.
Library: Use Gdi32.lib.
我知道的98下支持的有:
SetMapMode,SelectObject,Moveto ,Lineto,SetBkMode,SetBkColor,SetTextColor,SetStretchBltMode...
my email:tiger_mhu@hotmail.comTop




