怎么在diaog上画一个象棋的棋盘 急啊~ 谢谢~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我需要棋盘占一个diaog的一般左右在vc里 画不了这么大的用画图板画又老是运行时候内存出错疯了~ void CChessDlg::MakeBoard(int nCurTime)//画棋盘{ //填充 MakeWood(XBW+123,YBW,RGB(180,220,160),-nCurTime%XBW,nCurTime%YBW,nCurTime%1000+500,FLOAT(nCurTime%20/1000.1+0.01),20);// CBrush br(GetSysColor(COLOR_3DFACE));//得到系统颜色// CRect rect(0,0,XBW,YBW);// m_pdcBoard->FillRect(rect,&br); //画棋盘 CPen pen[2]; pen[0].CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHILIGHT)); pen[1].CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW)); for(int i=0;i<=1;i++) { m_pdcBoard->SelectObject(pen[i]); //画边框(双线) m_pdcBoard->MoveTo(XC[i]-3,YC[i]-3); m_pdcBoard->LineTo(XC[i]-3,YC[i]+3+BWA*9); m_pdcBoard->LineTo(XC[i]+3+BWA*8,YC[i]+3+BWA*9); m_pdcBoard->LineTo(XC[i]+3+BWA*8,YC[i]-3); m_pdcBoard->LineTo(XC[i]-3,YC[i]-3); m_pdcBoard->MoveTo(XC[i],YC[i]); m_pdcBoard->LineTo(XC[i],YC[i]+BWA*9); m_pdcBoard->LineTo(XC[i]+BWA*8,YC[i]+BWA*9); m_pdcBoard->LineTo(XC[i]+BWA*8,YC[i]); m_pdcBoard->LineTo(XC[i],YC[i]); //画竖线 int n; for( n=1;n<=8;n++) { m_pdcBoard->MoveTo(XC[i],YC[i]+BWA*n); m_pdcBoard->LineTo(XC[i]+BWA*8,YC[i]+BWA*n); } for( n=1;n<=7;n++) { m_pdcBoard->MoveTo(XC[i]+BWA*n,YC[i]); m_pdcBoard->LineTo(XC[i]+BWA*n,YC[i]+BWA*4); m_pdcBoard->MoveTo(XC[i]+BWA*n,YC[i]+BWA*5); m_pdcBoard->LineTo(XC[i]+BWA*n,YC[i]+BWA*9); } //画宫 m_pdcBoard->MoveTo(XC[i]+BWA*3,YC[i]+BWA*0); m_pdcBoard->LineTo(XC[i]+BWA*5,YC[i]+BWA*2); //上捺 m_pdcBoard->MoveTo(XC[i]+BWA*5,YC[i]+BWA*0); m_pdcBoard->LineTo(XC[i]+BWA*3,YC[i]+BWA*2); //上撇 m_pdcBoard->MoveTo(XC[i]+BWA*3,YC[i]+BWA*7); m_pdcBoard->LineTo(XC[i]+BWA*5,YC[i]+BWA*9); //下捺 m_pdcBoard->MoveTo(XC[i]+BWA*5,YC[i]+BWA*7); m_pdcBoard->LineTo(XC[i]+BWA*3,YC[i]+BWA*9); //下撇 //画星 MB_DrawStar(7,2,i); MB_DrawStar(1,2,i); MB_DrawStar(0,3,i); MB_DrawStar(2,3,i); MB_DrawStar(4,3,i); MB_DrawStar(6,3,i); MB_DrawStar(8,3,i); MB_DrawStar(7,7,i); MB_DrawStar(1,7,i); MB_DrawStar(0,6,i); MB_DrawStar(2,6,i); MB_DrawStar(4,6,i); MB_DrawStar(6,6,i); MB_DrawStar(8,6,i); } m_pdcBoard->SetBkMode(TRANSPARENT); //不要文字背景 m_pdcBoard->SetTextColor(RGB(255,0,0)); //设置文本颜色:红色 m_pdcBoard->TextOut(50,175," 楚 河 "); m_pdcBoard->TextOut(200,175,"汉 界 ");}void CChessDlg::MB_DrawStar(int x,int y,int i)//画星{ if(x!=0) { m_pdcBoard->MoveTo(XC[i]+BWA*x-3,YC[i]+BWA*y-3); m_pdcBoard->LineTo(XC[i]+BWA*x-6,YC[i]+BWA*y-3); m_pdcBoard->MoveTo(XC[i]+BWA*x-3,YC[i]+BWA*y-3); m_pdcBoard->LineTo(XC[i]+BWA*x-3,YC[i]+BWA*y-6); m_pdcBoard->MoveTo(XC[i]+BWA*x-3,YC[i]+BWA*y+3); m_pdcBoard->LineTo(XC[i]+BWA*x-6,YC[i]+BWA*y+3); m_pdcBoard->MoveTo(XC[i]+BWA*x-3,YC[i]+BWA*y+3); m_pdcBoard->LineTo(XC[i]+BWA*x-3,YC[i]+BWA*y+6); } if(x!=8) { m_pdcBoard->MoveTo(XC[i]+BWA*x+3,YC[i]+BWA*y-3); m_pdcBoard->LineTo(XC[i]+BWA*x+6,YC[i]+BWA*y-3); m_pdcBoard->MoveTo(XC[i]+BWA*x+3,YC[i]+BWA*y-3); m_pdcBoard->LineTo(XC[i]+BWA*x+3,YC[i]+BWA*y-6); m_pdcBoard->MoveTo(XC[i]+BWA*x+3,YC[i]+BWA*y+3); m_pdcBoard->LineTo(XC[i]+BWA*x+6,YC[i]+BWA*y+3); m_pdcBoard->MoveTo(XC[i]+BWA*x+3,YC[i]+BWA*y+3); m_pdcBoard->LineTo(XC[i]+BWA*x+3,YC[i]+BWA*y+6); }} 变量定义: CDC* m_pdcBoard; //储存棋盘图案的 DC CDC* m_pdcBack; //缓冲 DC下面这个函数是美化,可注释掉//////////////////////////////MakeWood(XBW+123,YBW,RGB(180,220,160),-nCurTime%XBW,nCurTime%YBW,nCurTime%1000+500,FLOAT(nCurTime%20/1000.1+0.01),20); 在BOOL CChessDlg::OnInitDialog()里添加 CClientDC dc(this); //Create Bitmap for DC m_pdcBack->CreateCompatibleDC(&dc); m_pdcBoard->CreateCompatibleDC(&dc); m_pdcBoard->SelectObject(&m_Bitmap1); m_pdcBack->SelectObject(&m_Bitmap2); MakeBoard((int)::GetTickCount()); //画棋盘(3D) 楼上 你写的这个源代码 我已经试过了还要用到 bwa 等等函数这样就需要再用其程序中的的部分代码和头文件 肯定不止是画棋盘吧,还要放棋子。参考这个例子程序(两者都有):http://www.vccode.com/showthread.php?s=&threadid=4828 VC++ 如何将JPEG格式图片在图片控件里显示? 屏蔽webbrowser右键菜单呢,帮我改下代码谢谢阿 客户端数据库连接问题 ADO数据库连接问题!!有经验的请进!! 播放的声音的问题 文件导出导入的问题 求图形图象格式转换的dll或者ocx,如果能解决多少分您说话!急急急!!! 关于ActiveX控件图标的制作 为什么ADO关闭连结的时候老是报错 win32 console application 怎样写消息映射呀? 想要把.bmp文件在PICTURE中以透明背景显示,怎么实现? 谁能详细告诉我MDI程序运行的过程
在vc里 画不了这么大的
用画图板画又老是运行时候内存出错疯了~
{
//填充
MakeWood(XBW+123,YBW,RGB(180,220,160),-nCurTime%XBW,nCurTime%YBW,nCurTime%1000+500,FLOAT(nCurTime%20/1000.1+0.01),20);// CBrush br(GetSysColor(COLOR_3DFACE));//得到系统颜色
// CRect rect(0,0,XBW,YBW);
// m_pdcBoard->FillRect(rect,&br);
//画棋盘
CPen pen[2];
pen[0].CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHILIGHT));
pen[1].CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW));
for(int i=0;i<=1;i++)
{
m_pdcBoard->SelectObject(pen[i]);
//画边框(双线)
m_pdcBoard->MoveTo(XC[i]-3,YC[i]-3);
m_pdcBoard->LineTo(XC[i]-3,YC[i]+3+BWA*9);
m_pdcBoard->LineTo(XC[i]+3+BWA*8,YC[i]+3+BWA*9);
m_pdcBoard->LineTo(XC[i]+3+BWA*8,YC[i]-3);
m_pdcBoard->LineTo(XC[i]-3,YC[i]-3); m_pdcBoard->MoveTo(XC[i],YC[i]);
m_pdcBoard->LineTo(XC[i],YC[i]+BWA*9);
m_pdcBoard->LineTo(XC[i]+BWA*8,YC[i]+BWA*9);
m_pdcBoard->LineTo(XC[i]+BWA*8,YC[i]);
m_pdcBoard->LineTo(XC[i],YC[i]);
//画竖线
int n;
for( n=1;n<=8;n++)
{
m_pdcBoard->MoveTo(XC[i],YC[i]+BWA*n);
m_pdcBoard->LineTo(XC[i]+BWA*8,YC[i]+BWA*n);
}
for( n=1;n<=7;n++)
{
m_pdcBoard->MoveTo(XC[i]+BWA*n,YC[i]);
m_pdcBoard->LineTo(XC[i]+BWA*n,YC[i]+BWA*4);
m_pdcBoard->MoveTo(XC[i]+BWA*n,YC[i]+BWA*5);
m_pdcBoard->LineTo(XC[i]+BWA*n,YC[i]+BWA*9);
}
//画宫
m_pdcBoard->MoveTo(XC[i]+BWA*3,YC[i]+BWA*0);
m_pdcBoard->LineTo(XC[i]+BWA*5,YC[i]+BWA*2); //上捺
m_pdcBoard->MoveTo(XC[i]+BWA*5,YC[i]+BWA*0);
m_pdcBoard->LineTo(XC[i]+BWA*3,YC[i]+BWA*2); //上撇
m_pdcBoard->MoveTo(XC[i]+BWA*3,YC[i]+BWA*7);
m_pdcBoard->LineTo(XC[i]+BWA*5,YC[i]+BWA*9); //下捺
m_pdcBoard->MoveTo(XC[i]+BWA*5,YC[i]+BWA*7);
m_pdcBoard->LineTo(XC[i]+BWA*3,YC[i]+BWA*9); //下撇
//画星
MB_DrawStar(7,2,i);
MB_DrawStar(1,2,i);
MB_DrawStar(0,3,i);
MB_DrawStar(2,3,i);
MB_DrawStar(4,3,i);
MB_DrawStar(6,3,i);
MB_DrawStar(8,3,i); MB_DrawStar(7,7,i);
MB_DrawStar(1,7,i);
MB_DrawStar(0,6,i);
MB_DrawStar(2,6,i);
MB_DrawStar(4,6,i);
MB_DrawStar(6,6,i);
MB_DrawStar(8,6,i);
}
m_pdcBoard->SetBkMode(TRANSPARENT); //不要文字背景
m_pdcBoard->SetTextColor(RGB(255,0,0)); //设置文本颜色:红色
m_pdcBoard->TextOut(50,175," 楚 河 ");
m_pdcBoard->TextOut(200,175,"汉 界 ");
}void CChessDlg::MB_DrawStar(int x,int y,int i)//画星
{
if(x!=0)
{
m_pdcBoard->MoveTo(XC[i]+BWA*x-3,YC[i]+BWA*y-3);
m_pdcBoard->LineTo(XC[i]+BWA*x-6,YC[i]+BWA*y-3); m_pdcBoard->MoveTo(XC[i]+BWA*x-3,YC[i]+BWA*y-3);
m_pdcBoard->LineTo(XC[i]+BWA*x-3,YC[i]+BWA*y-6); m_pdcBoard->MoveTo(XC[i]+BWA*x-3,YC[i]+BWA*y+3);
m_pdcBoard->LineTo(XC[i]+BWA*x-6,YC[i]+BWA*y+3); m_pdcBoard->MoveTo(XC[i]+BWA*x-3,YC[i]+BWA*y+3);
m_pdcBoard->LineTo(XC[i]+BWA*x-3,YC[i]+BWA*y+6);
}
if(x!=8)
{
m_pdcBoard->MoveTo(XC[i]+BWA*x+3,YC[i]+BWA*y-3);
m_pdcBoard->LineTo(XC[i]+BWA*x+6,YC[i]+BWA*y-3); m_pdcBoard->MoveTo(XC[i]+BWA*x+3,YC[i]+BWA*y-3);
m_pdcBoard->LineTo(XC[i]+BWA*x+3,YC[i]+BWA*y-6); m_pdcBoard->MoveTo(XC[i]+BWA*x+3,YC[i]+BWA*y+3);
m_pdcBoard->LineTo(XC[i]+BWA*x+6,YC[i]+BWA*y+3); m_pdcBoard->MoveTo(XC[i]+BWA*x+3,YC[i]+BWA*y+3);
m_pdcBoard->LineTo(XC[i]+BWA*x+3,YC[i]+BWA*y+6);
}}
CDC* m_pdcBack; //缓冲 DC下面这个函数是美化,可注释掉//////////////////////////////
MakeWood(XBW+123,YBW,RGB(180,220,160),-nCurTime%XBW,nCurTime%YBW,nCurTime%1000+500,FLOAT(nCurTime%20/1000.1+0.01),20);
m_pdcBack->CreateCompatibleDC(&dc);
m_pdcBoard->CreateCompatibleDC(&dc);
m_pdcBoard->SelectObject(&m_Bitmap1);
m_pdcBack->SelectObject(&m_Bitmap2);
MakeBoard((int)::GetTickCount()); //画棋盘(3D)
还要用到 bwa 等等函数这样就需要再用其程序中的的部分代码和头文件
参考这个例子程序(两者都有):
http://www.vccode.com/showthread.php?s=&threadid=4828