VC++:编写画硬币程序

画硬币

  1. 建立菜单栏:增加硬币和减少硬币

(1)、创建DrawCoin应用程序

(2)、ResourceView->Menu->IDR_MAINFRAME(双击)->菜单栏右边虚线框(双击)->Caption框输入:画硬币(&C),其他默认;

(3)、重复步骤二,在主菜单:画硬币,下方虚线框(双击)->输入ID:ID_COIN_ADD, Caption:增加硬币(&A)\tCtrl+A,Prompt:在客户区多画一个硬币,其他默认;(减少硬币也如此)

2、添加菜单命令处理函数

(1)、ClassView->CDrawCoinDoc(单击右键)->Add member Variable(单击)->添加int型,public,变量名m_nCoins;

(2)、按下Ctrl+W->Class Name: CDrawCoinDoc,Object IDs: CDrawCoinDoc,Messages:DeleteContents->Add Function(单击)->点击ok-> Edit Code(单击)

(3)、输入红色代码:

void CDrawCoinDoc::DeleteContents()

{

       // TODO: Add your specialized code here and/or call the base class

       m_nCoins=1;

       CDocument::DeleteContents();

}

(3)、按下Ctrl+W->Class Name: CDrawCoinDoc,Object IDs:ID_COIN_ADD, Messages:COMMAND-> Add Function(单击)-> 点击ok-> Edit Code(单击);ID_COIN_SUB同样

(4)、分别输入红色代码:

void CDrawCoinDoc::OnCoinAdd()

{

       // TODO: Add your command handler code here

       m_nCoins++;

       UpdateAllViews(NULL);

}

 

void CDrawCoinDoc::OnCoinSub()

{

       // TODO: Add your command handler code here

       if(m_nCoins>0) m_nCoins--;

       UpdateAllViews(NULL);

}

(5)、ClassView-> CDrawCoinView->OnDraw()(双击)->在该函数输入代码:

       for(int i=0;i<pDoc->m_nCoins;i++)

       {

              int y=200-10*i;

              pDC->Ellipse(200,y,300,y-30);

              pDC->Ellipse(200,y-10,300,y-35);

       }

  1. 灰显的函数添加

(1)、按下Ctrl+W->Class Name: CDrawCoinDoc,Object IDs:ID_COIN_SUB, Messages:UPDATE_COMMAND_UI-> Edit Code(单击)

(2)、输入红色代码:

void CDrawCoinDoc::OnUpdateCoinSub(CCmdUI* pCmdUI)

{

       // TODO: Add your command update UI handler code here

       if(m_nCoins<1)

              pCmdUI->Enable(FALSE);

       else pCmdUI->Enable(TRUE);

}

(3)、ADD同理

4、快捷键功能的添加

(1)、ResourceView->Accelerator->IDR_MAINFRAME(双击)

(2)、ID:ID_COIN_ADD,Key:A,其他默认

(3). ID_COIN_SUB同理

5、添加弹出式菜单

(1). 按下Ctrl+W->Class Name: CDrawCoinView, Messages:WM_CONTEXTMENU-> Add Function(单击)-> 点击ok -> Edit Code(单击)

(2). 输入红色代码:

void CDrawCoinView::OnContextMenu(CWnd* pWnd, CPoint point)

{

       // TODO: Add your message handler code here

       CMenu menuPopup;

       if(menuPopup.CreatePopupMenu())

       {

              menuPopup.AppendMenu(MF_STRING,ID_COIN_ADD,"增加硬币\tCtrl+A");

              menuPopup.AppendMenu(MF_STRING,ID_COIN_SUB,"减少硬币\tCtrl+B");

              menuPopup.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);

       }

}

6、标题栏的修改

ClassView-> CDrawCoinApp->InitInstance()(双击)->在该函数输入代码:

m_pMainWnd->SetWindowText("画硬币-DrawCoin");

7、添加工具栏按钮

(1). ResourceView->Tooibar->IDR_MAINFRAME(双击)

(2).单击工具栏末尾两个空白按钮->用画笔分别绘制成“+”和“-”

(3).分别双击工具栏末尾两个空白按钮:

双击“+”->输入ID:ID_COIN_ADD, Prompt:在客户区多画一个硬币\n增加硬币;减少硬币也同理。

8、在状态栏显示硬币的数量

(1).ResourceView->String Table(双击)->双击列表最下方的空白行->输入ID:ID_INDICATOR_COIN,Caption:硬币数量

(2). ClassView-> CMainFrame-> CMainFrame(双击)

(3). 输入红色代码:

static UINT indicators[] =

{

       ID_SEPARATOR,           // status line indicator

       ID_INDICATOR_COIN,

       ID_INDICATOR_CAPS,

       ID_INDICATOR_NUM,

       ID_INDICATOR_SCRL,

};

(3).在OnDraw()函数中添加如下红色代码:

void CDrawCoinView::OnDraw(CDC* pDC)

{

       CDrawCoinDoc* pDoc = GetDocument();

       ASSERT_VALID(pDoc);

       // TODO: add draw code for native data here

       CPen *pPenOld,PenNew;

       CPen *pPenNew=new CPen(PS_SOLID,1,RGB(255,40,100));

       pPenOld=pDC->SelectObject(pPenNew);

       for(int i=0;i<pDoc->m_nCoins;i++)

       {

              int y=200-10*i;

              pDC->Ellipse(200,y,300,y-30);

              pDC->Ellipse(200,y-10,300,y-35);

       }

       CString strCoins;

       CStatusBar* pStatus=(CStatusBar*)AfxGetApp()->m_pMainWnd->GetDescendantWindow(ID_VIEW_STATUS_BAR);

       if(pStatus)

       {

              strCoins.Format("硬币:%d",pDoc->m_nCoins);

              pStatus->SetPaneText(1,strCoins);

       }

       pDoc->SetModifiedFlag();

}

9、序列化

(1). ClassView-> CDrawCoinDoc -> Serialize()(双击)

(2). .在该函数中添加如下红色代码:

void CDrawCoinDoc::Serialize(CArchive& ar)

{

       if (ar.IsStoring())

       {

              // TODO: add storing code here

              ar<<m_nCoins;

       }

       else

       {

              // TODO: add loading code here

              ar>>m_nCoins;

       }

}

(3).在OnDraw()函数末尾添加如下代码:

pDoc->SetModifiedFlag();

10、颜色设置

在OnDraw()函数中添加如下红色代码:

void CDrawCoinView::OnDraw(CDC* pDC)

{

       CDrawCoinDoc* pDoc = GetDocument();

       ASSERT_VALID(pDoc);

       // TODO: add draw code for native data here

       CPen *pPenOld,PenNew;

       CPen *pPenNew=new CPen(PS_SOLID,1,RGB(255,40,100));

       pPenOld=pDC->SelectObject(pPenNew);

       for(int i=0;i<pDoc->m_nCoins;i++)

       {

              int y=200-10*i;

              pDC->Ellipse(200,y,300,y-30);

              pDC->Ellipse(200,y-10,300,y-35);

       }

·

·

·

·

}

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值