画硬币
- 建立菜单栏:增加硬币和减少硬币
(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)、按下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);
}
·
·
·
·
}