16,471
社区成员
发帖
与我相关
我的任务
分享
CDC *pDC=GetDC();
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
[code=c] //画背景
CBrush brush1;
brush1.CreateSolidBrush(RGB(192,192,192));
CClientDC dc(this);
dc.SelectObject(&brush1);
dc.Rectangle(0,0,450,500);
//画棋盘框线
CPen pen;
CPen *oldpen;
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
oldpen=dc.SelectObject(&pen);
int i=0;
for(i;i<19;i++)
{
dc.MoveTo(40+i*20,40);
dc.LineTo(40+i*20,400);
}
for(i=0;i<19;i++)
{
dc.MoveTo(40,40+i*20);
dc.LineTo(400,40+i*20);
}
//重画时显示存在的棋子
{
int m,n;m=n=0;
for(n;n<19;n++)
{
for(m;m<19;m++)
{
if(wzq[n][m]==1)
{
//显示白棋
dc.SelectObject(m_bmwhite);
pDC->BitBlt(n*20+32,m*20+32,160,160,&dc,0,0,SRCCOPY);
}
if(wzq[n][m]==-1)
{
//显示黑棋
dc.SelectObject(m_bmblack);
pDC->BitBlt(n*20+32,m*20+32,160,160,&dc,0,0,SRCCOPY);
}
}
}
}
1、这是画棋盘(19行19列)和棋盘框线以及重画(不懂。。什么时候重画?)时显示棋子的代码 。
①您说的画布和内存画布是什么意思?有什么区别呢?
②BitBlt(n*20+32,m*20+32,160,160,&dc,0,0,SRCCOPY);前两个是画布坐标 不是棋子坐标吗?两者有何区别?
③后面两个宽度160是画布尺寸不太理解。
④您说再后面两个0,0您说是内存画布左顶点坐标 是整个单文档视图的左上方顶点坐标呢还是指视图内所画棋盘左上方顶点
⑤除了pDC->BitBlt(n*20+32,m*20+32,160,160,&dc,0,0,SRCCOPY);这种指针写法外 有用dc类的写法吗?
⑥我们上课讲的是用CClientDC dc(this)来绘图, CClientDC 和DC 一样吗?能一直用CClinetDC来写吗?比如
CDC *pDC=GetDC();
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
这段代码是什么意思?
拜托大神了~[/code]
//画背景
CBrush brush1;
brush1.CreateSolidBrush(RGB(192,192,192));
CClientDC dc(this);
dc.SelectObject(&brush1);
dc.Rectangle(0,0,450,500);
//画棋盘框线
CPen pen;
CPen *oldpen;
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
oldpen=dc.SelectObject(&pen);
int i=0;
for(i;i<19;i++)
{
dc.MoveTo(40+i*20,40);
dc.LineTo(40+i*20,400);
}
for(i=0;i<19;i++)
{
dc.MoveTo(40,40+i*20);
dc.LineTo(400,40+i*20);
}
//重画时显示存在的棋子
{
int m,n;m=n=0;
for(n;n<19;n++)
{
for(m;m<19;m++)
{
if(wzq[n][m]==1)
{
//显示白棋
dc.SelectObject(m_bmwhite);
pDC->BitBlt(n*20+32,m*20+32,160,160,&dc,0,0,SRCCOPY);
}
if(wzq[n][m]==-1)
{
//显示黑棋
dc.SelectObject(m_bmblack);
pDC->BitBlt(n*20+32,m*20+32,160,160,&dc,0,0,SRCCOPY);
}
}
}
}
1、这是画棋盘(19行19列)和棋盘框线以及重画(不懂。。什么时候重画?)时显示棋子的代码 。①BitBlt(n*20+32,m*20+32,160,160,&dc,0,0,SRCCOPY);这个代码前两个参数为什么是那样呢 已知棋盘尺寸为18x18
②后面两个宽度160是棋子宽度?宽度不是尺寸的18?
③再后面两个0,0您说是画布左顶点坐标 是整个单文档视图的左上方顶点呢还是指棋盘左上方顶点
④除了pDC->BitBlt(n*20+32,m*20+32,160,160,&dc,0,0,SRCCOPY);这种指针写法外 有用dc类的写法吗?
⑤我们上课讲的是用CClientDC dc(this)来绘图, CClientDC 和DC 一样吗?能一直用CClinetDC来写吗?比如
CDC *pDC=GetDC();
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
这段代码是什么意思?
拜托大神了~