当前位置:首页 > MFC中国象棋程序
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); m_pMainWnd->UpdateWindow(); return TRUE; }
BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd) ON_WM_PAINT()
END_MESSAGE_MAP()
CMainWindow::CMainWindow() {
Create(NULL,_T(\象棋棋盘\ }
//CMainWindow mesage map and member functions void CMainWindow::OnPaint() {
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
//画背景
CBrush bkBrush(RGB(192,192,192)); dc.FillRect(rect,&bkBrush);
//确定画象棋棋盘的范围 rect.DeflateRect(200,30); rect.OffsetRect(0,15);
//画下象棋棋盘的背景
CBrush brush(RGB(128,128,128)); dc.FillRect(rect,&brush);
//无聊,给点立体感 rect.InflateRect(2,2);
dc.Draw3dRect(rect,RGB(255,255,255),RGB(255,255,255)); rect.DeflateRect(2,2);
//开始画纵横线
CPen pen(PS_SOLID,2,RGB(0,0,0)); CPen *pOldPen = dc.SelectObject(&pen);
int nGridWidth = rect.Width()/8; //横向宽度,共格 int nGridHeight = rect.Height()/9; //纵向宽度,共格
for(int i = 0; i < 10; ++i) //画横线,10笔 {
int y = (nGridHeight * i) + rect.top; dc.MoveTo(rect.left,y); dc.LineTo(rect.right,y); }
for(int i = 0; i < 8; ++i) //画竖线,画笔,空下最右的竖线 {
int x = (nGridWidth * i) + rect.left;
//中间为界限,无竖线 dc.MoveTo(x,rect.top);
dc.LineTo(x,rect.top + nGridHeight * 4); dc.MoveTo(x,rect.top + nGridHeight * 5); dc.LineTo(x,rect.bottom); }
//补上左界限的竖笔及最右的竖线,此以rect.right画最右竖线,最重合 dc.MoveTo(rect.left,rect.top + nGridHeight * 4); dc.LineTo(rect.left,rect.top + nGridHeight * 5); dc.MoveTo(rect.right,rect.top); dc.LineTo(rect.right,rect.bottom);
//输出文字“楚河汉界” dc.SelectObject(pOldPen);
CRect textRect(rect.left,rect.top + nGridHeight * 4, rect.right,rect.top + nGridHeight * 5); CFont font;
font.CreatePointFont(520,_T(\宋体\
CFont *pOldFont = dc.SelectObject(&font);
dc.SetBkMode(TRANSPARENT);
dc.DrawText(_T(\楚河 汉界\
DT_SINGLELINE | DT_CENTER | DT_VCENTER); dc.SelectObject(pOldFont); //
楚河汉界:
UINT uSize = 35; CFont fnt; LOGFONT lf;
TCHAR text[] = _T(\楚 河 汉 界\memset(&lf, 0, sizeof(LOGFONT)); lstrcpy(lf.lfFaceName, _T(\
int cyPixels = pDC->GetDeviceCaps(LOGPIXELSY); lf.lfHeight = -MulDiv(uSize, cyPixels, 72); fnt.CreateFontIndirect(&lf); pDC->SelectObject(&fnt);
pDC->TextOut(120, 317, text, wcslen(text));
网文字结合棋盘: void CchessView::Drawline(CDC* pDC) {
for (i = 0; i < 10; i++) { }
for (i = 0; i < 9; i++) { }
dc.MoveTo(50, 250); dc.LineTo(50, 300); dc.MoveTo(450, 250);
dc.MoveTo(50 + 50 * i, 50); dc.LineTo(50 + 50 * i, 250); dc.MoveTo(50 + 50 * i, 300);
dc.LineTo(50 + 50 * i, 500);//画竖线 dc.MoveTo(50,50+50*i);
dc.LineTo(450, 50 + 50 * i);//画横线 CClientDC dc(this); CRect rect;
GetClientRect(&rect); int i,j;
CPen pen(PS_SOLID, 2, RGB(0, 0, 0)); CPen *pOldPen = dc.SelectObject(&pen);
int nGridWidth = rect.Width() / 8; //横向宽度,共格 int nGridHeight = rect.Height() / 9;
dc.LineTo(450, 300);//连接界限四点 dc.MoveTo(200,400); dc.LineTo(300,500); dc.MoveTo(200,500); dc.LineTo(300,400); dc.MoveTo(200,50); dc.LineTo(300,150); dc.MoveTo(200,150); dc.LineTo(300,50);//画斜线 for (j = 0; j < 2;j++) for (i = 0; i < 4; i++) {
dc.MoveTo(65+100*i,195+150*j); dc.LineTo(55+100*i,195+150*j); dc.LineTo(55+100*i,185+150*j);
dc.MoveTo(65 + 100 * i, 205 + 150 * j); dc.LineTo(55 + 100 * i, 205 + 150 * j); dc.LineTo(55 + 100 * i, 215 + 150 * j); dc.MoveTo(145 + 100 * i, 185 + 150 * j); dc.LineTo(145 + 100 * i, 195 + 150 * j); dc.LineTo(135 + 100 * i, 195 + 150 * j); dc.MoveTo(135 + 100 * i, 205 + 150 * j); dc.LineTo(145 + 100 * i, 205 + 150 * j); dc.LineTo(145 + 100 * i, 215 + 150 * j);
}//兵
for (j = 0; j < 2;j++) for (i = 0; i < 2; i++) {
dc.MoveTo(95+i*300,135+j*250); dc.LineTo(95+i*300,145+j*250); dc.LineTo(85+i*300,145+j*250);
dc.MoveTo(105 + i * 300, 135 + j * 250); dc.LineTo(105 + i * 300, 145 + j * 250); dc.LineTo(115 + i * 300, 145 + j * 250); dc.MoveTo(115 + i * 300, 155 + j * 250); dc.LineTo(105 + i * 300, 155 + j * 250);
共分享92篇相关文档