江城学院VC++课程设计Word下载.docx
《江城学院VC++课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《江城学院VC++课程设计Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
3设计步骤
1)至3)学生成绩操作
1.启动VisualC++6.0
2.创建一个工程名为Login的基于对话框应用程序
3.按照设计要求在登陆对话框上添加控件并设置好各自的属性
4.为IDD_LOGIN_DIALOG创建对话框类CLoginDlg
5.为CLoginDlg类中的IDC_EDIT1和IDC_EDIT2添加成员变量m_name和m_number
6.为CLoginDlg类中的IDOK和IDCANCEL添加BN_CLICKED的消息映射,并添加下列代码:
voidCLoginDlg:
:
OnOK()
{
UpdateData(TRUE);
if(m_name=="
LiMing"
&
m_password=="
886688"
)
CScoreDlgdlg;
dlg.DoModal();
}
elseMessageBox("
没有此用户名或密码错误!
"
"
提示"
);
CDialog:
OnOK();
voidCLoginDlg:
OnCancel()
m_name="
;
m_password="
UpdateData(FALSE);
7.添加一学生成绩输入的对话框,按照设计要求添加控件并设置好各自的属性
8.为IDD_DIALOG1创建对话框类CInputDlg
9.为CInputDlg类中的IDC_EDIT1、IDC_EDIT2、IDC_EDIT3、IDC_EDIT4、IDC_EDIT5、IDC_SPIN1、IDC_SPIN2、IDC_SPIN3依次添加成员变量m_name、m_number、m_score1、m_score2、m_score3、m_spin1、m_spin2、m_spin3
10.为CInputDlg添加WM_INITDIALOG的消息映射,并添加下列代码:
BOOLCInputDlg:
OnInitDialog()
OnInitDialog();
m_spin1.SetRange(0,100);
m_spin2.SetRange(0,100);
m_spin3.SetRange(0,100);
returnTRUE;
11.为CInputDlg添加IDC_SPIN1控件的UDN_DELTAPOS的消息映射,并添加下列代码:
voidCInputDlg:
OnDeltaposSpin1(NMHDR*pNMHDR,LRESULT*pResult)
NM_UPDOWN*pNMUpDown=(NM_UPDOWN*)pNMHDR;
m_score1+=(float)pNMUpDown->
iDelta*0.5f;
if(m_score1<
0.0)m_score1=0.0f;
if(m_score1>
100.0)m_score1=100.0f;
*pResult=0;
12.修改CInputDlg类中IDOK的BN_CLICKED消息映射的代码:
OnOK()
m_name.TrimLeft();
m_number.TrimLeft();
if(m_name.IsEmpty())
MessageBox("
学生姓名不能为空!
else
if(m_number.IsEmpty())
学生学号不能为空!
elseCDialog:
13.添加一学生成绩输入的对话框,按照设计要求添加控件并设置好各自的属性
14.为IDD_DIALOG2创建对话框类CScoreDlg
15.为CScoreDlg类中的IDC_LIST1和IDC_COMBO1添加控件变量m_list和m_combo
16.为CScoreDlg类中的IDC_BUTTON1添加BN_CLICKED的消息映射,并添加下列代码:
voidCScoreDlg:
OnButton1()
CInputDlgdlg;
if(IDOK==dlg.DoModal())
if(m_combo.FindString(-1,dlg.m_number)<
0)
intnIndex=m_combo.AddString(dlg.m_number);
STUDATAdata;
data.name=dlg.m_name;
data.number=dlg.m_number;
data.score1=dlg.m_score1;
data.score2=dlg.m_score2;
data.score3=dlg.m_score3;
m_combo.SetItemDataPtr(nIndex,newSTUDATA(data));
}
m_combo.SetCurSel(0);
OnChangeCombo();
17.CScoreDlg类中的IDC_COMBO1添加CBN_SELCHANGE的消息映射,将其映射函数改为OnChangeCombo,并添加下列代码:
OnChangeCombo()
intnIndex=m_combo.GetCurSel();
if(nIndex!
=CB_ERR)
m_list.ResetContent();
STUDATA*data;
data=(STUDATA*)m_combo.GetItemDataPtr(nIndex);
CStringstr;
str="
姓名:
+data->
name;
m_list.AddString(str);
学号:
number;
str.Format("
成绩1:
%4.1f,成绩2:
%4.1f,成绩3:
%4.1f"
data->
score1,data->
score2,data->
score3);
18.编译并运行整个工程
4)个人通讯簿
2.创建一个工程名为Ex_Address的基于对话框应用程序
3.添加并构造基本情况对话框,创建对话框类CBaseInfoDlg,添加成员变量m_strName、m_strNick、m_timeBirth、m_chSex,添加成员函数变量UpdateSexField
4.添加并构造私人资料对话框,创建对话框类CPrivateDlg,添加成员变量m_strHOME、m_strTEL、m_GSM、m_Email
5.添加并构造单位信息对话框,创建对话框类CWorkDlg,添加成员变量m_strWorkName、m_strADD、m_strTEL、m_strFAX
6.设计主对话框,创建对话框类CEx_AddressDlg,添加成员变量m_List、m_Tab,添加成员函数SetDlgState和DoTab,并添加下列代码:
voidCEx_AddressDlg:
SetDlgState(CWnd*pWnd,BOOLbShow)
pWnd->
EnableWindow(bShow);
if(bShow)
ShowWindow(SW_SHOW);
pWnd->
CenterWindow();
elsepWnd->
ShowWindow(SW_HIDE);
voidCEx_AddressDlg:
DoTab(intnSel)
if(nSel>
2)nSel=2;
if(nSel<
0)nSel=0;
BOOLbTab[3];
bTab[0]=bTab[1]=bTab[2]=FALSE;
bTab[nSel]=TRUE;
SetDlgState(m_pBaseInfoDlg,bTab[0]);
SetDlgState(m_pPrivateDlg,bTab[1]);
SetDlgState(m_pWorkDlg,bTab[2]);
7.为CEx_AddressDlg类中的IDC_TAB1添加TCN_SELCHANGE的消息映射,并添加下列代码:
OnSelchangeTab1
(NMHDR*pNMHDR,LRESULT*pResult)
intnSelect=m_Tab.GetCurSel();
if(nSelect>
=0)DoTab(nSelect);
8.在CEx_AddressDlg:
OnInitDialog中添加下列代码:
m_Tab.SetImageList(&
m_ImageList);
m_Tab.InsertItem(0,"
基本情况"
0);
m_Tab.InsertItem(1,"
私人资料"
1);
m_Tab.InsertItem(2,"
单位信息"
2);
m_Tab.SetCurSel(0);
m_pBaseInfoDlg=newCBaseInfoDlg;
m_pBaseInfoDlg->
Create
(IDD_DIALOG_BASEINFO,GetDlgItem(IDC_STATIC_DLG));
m_pPrivateDlg=newCPrivateDlg;
m_pPrivateDlg->
(IDD_DIALOG_PRIVATE,GetDlgItem(IDC_STATIC_DLG));
m_pWorkDlg=newCWorkDlg;
m_pWorkDlg->
Create(IDD_DIALOG_WORK,GetDlgItem(IDC_STATIC_DLG));
DoTab(0);
ADDRESSdata,data1,data2;
data.strName="
data.strNick="
Peter"
data.chSex='
G'
data.tBirth=CTime(1984,5,6,0,0,0);
data.strHomeAdd="
江苏南京"
data.strWorkName="
南京师范大学"
data1=data;
data1.strName="
WangFang"
data1.strNick="
Mary"
data1.chSex='
M'
data1.tBirth=CTime(1984,12,5,0,0,0);
intnIndex=m_List.AddString(data.strName);
m_List.SetItemDataPtr(nIndex,newADDRESS(data));
nIndex=m_List.AddString(data1.strName);
m_List.SetItemDataPtr(nIndex,newADDRESS(data1));
9.为CEx_AddressDlg类中的IDC_LIST1添加LBN_SELCHANGE的消息映射,并添加下列代码:
OnSelchangeList1()
intnIndex=m_List.GetCurSel();
if(nIndex!
=LB_ERR)
ADDRESS*data=(ADDRESS*)m_List.GetItemDataPtr(nIndex);
m_strName=data->
strName;
m_strNick=data->
strNick;
m_chSex=data->
chSex;
m_timeBirth=data->
tBirth;
m_strHOME=data->
strHomeAdd;
m_strTEL=data->
strHomeTel;
m_strGSM=data->
strGSM;
m_strEmail=data->
strEmail;
m_strWorkName=data->
strWorkName;
m_strADD=data->
strWorkAdd;
strWorkTel;
m_strFAX=data->
strWorkFax;
UpdateData(FALSE);
UpdateSexField();
}
10.为CEx_AddressDlg添加成员变量m_nRedValue和m_Brush
11.在CEx_AddressDlg:
m_scrollRed.SetScrollRange(0,255);
m_sliderBlue.SetRange(0,255);
m_sliderGreen.SetRange(0,255);
m_nBlue=m_nGreen=m_nRedValue=192;
m_scrollRed.SetScrollPos(m_nRedValue);
12.为CEx_AddressDlg添加WM_VSCROLL的消息映射,并添加下列代码:
OnVScroll
(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)
intnID=pScrollBar->
GetDlgCtrlID();
if(nID==IDC_SCROLLBAR_RED)
switch(nSBCode)
caseSB_LINEUP:
m_nRedValue--;
break;
caseSB_LINEDOWN:
m_nRedValue++;
caseSB_PAGEUP:
m_nRedValue-=10;
caseSB_PAGEDOWN:
m_nRedValue+=10;
caseSB_THUMBTRACK:
m_nRedValue=nPos;
if(m_nRedValue<
0)m_nRedValue=0;
if(m_nRedValue>
255)m_nRedValue=255;
Invalidate();
OnVScroll(nSBCode,nPos,pScrollBar);
13.为CEx_AddressDlg添加WM_CTLCOLOR的消息映射,并添加下列代码:
HBRUSHCEx_AddressDlg:
OnCtlColor
(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
COLORREFcolor=RGB(m_nRedValue,m_nGreen,m_nBlue);
m_Brush.Detach();
m_Brush.CreateSolidBrush(color);
pDC->
SetBkColor(color);
return(HBRUSH)m_Brush;
14.编译并运行整个工程
4运行结果
设计二框架窗口界面设计
1)创建一个单文档应用程序Ex_SDI,开始运行时主窗口框架的大小为屏幕的1/4大小,并移动到屏幕的右上角。
当单击工具栏上的圆圈按钮时,该按钮呈按下状态,此时在窗口的客户区的光标为圆圈。
当双击鼠标时,则状态栏上显示“你在(x,y)处双击鼠标”((x,y)为鼠标在客户区的位置)。
若再单击工具栏上的圆圈按钮,则该按钮呈正常状态,光标变成原来的箭形,双击鼠标,状态栏上不再显示任何文本。
2)在上述程序的基础上,改变窗口菜单为一个单一弹出式菜单“测试”,其下包含一菜单项“改变光标”(和工具按钮ID_TEST联动),且该菜单项拥有键盘快捷键“Ctrl+G”,要求右击鼠标时弹出“测试”菜单的子菜单。
3)在上述程序的基础上,为Ex_SDI添加并设计具有动画效果的应用程序图标。
1.学习完框架窗口界面之后开始实验。
2.创建一个工程名为Ex_SDI的单文档应用程序
3.在CEx_SDIApp:
InitInstance函数的最后添加下列代码:
CRectrcDesktop;
:
GetWindowRect(GetDesktopWindow(),rcDesktop);
m_pMainWnd->
MoveWindow
(rcDesktop.Width()/2,0,rcDesktop.Width()/2,rcDesktop.Height()/2);
4.为CMainFrame类添加一个成员变量m_hCursor,添加WM_SETCURSOR的消息映射,并添加下列代码:
BOOLCMainFrame:
OnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage)
BOOLbRes=CFrameWnd:
OnSetCursor(pWnd,nHitTest,message);
if((nHitTest==HTCLIENT)&
(m_bIsTest))
m_hCursor=AfxGetApp()->
LoadCursor(IDC_CURSOR1);
SetCursor(m_hCursor);
bRes=TRUE;
returnbRes;
5.在CEx_SDIView类中添加WM_LBUTTONDBLCLK的消息映射,并添加下列代码:
voidCEx_SDIView:
OnLButtonDblClk(UINTnFlags,CPointpoint)
CMainFrame*pFrame=(CMainFrame*)AfxGetApp()->
m_pMainWnd;
CStatusBar*pStatus=&
pFrame->
m_wndStatusBar;
if(pFrame->
m_bIsTest)
你在(%d,%d)处双击鼠标"
point.x,point.y);
str.Empty();
if(pStatus)
pStatus->
SetPaneText(1,str);
CView:
OnLButtonDblClk(nFlags,point);
6.删去菜单栏所有的菜单项,添加一个“测试”菜单,在Accelerator的IDR_MAINFRAME创建该菜单项的快捷键
7.为CMainFrame添加WM_CONTEXTMENU的消息映射,并添加下列代码:
voidCMainFrame:
OnContextMenu(CWnd*pWnd,CPointpoint)
CMenu*pSysMenu=GetMenu();
pSysMenu->
GetSubMenu(0)->
TrackPopupMenu
(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
8.添加四个图标资源,并绘制图标
9.为CMainFrame添加一个成员函数ChangeIcon,并添加下列代码:
voidCMainFrame:
ChangeIcon(UINTnIconID)
HICONhIconNew=AfxGetApp()->
LoadIcon(nIconID);
HICONhIconOld=(HICON)GetClassLong(m_hWnd,GCL_HICON);
if(hIconNew!
=hIconOld)
DestroyIcon(hIconOld);
SetClassLong(m_hWnd,GCL_HICON,(long)hIconNew);
RedrawWindow();
10.在CMainFrame:
OnCreate函数的最后添加代码:
SetTimer(1,500,NULL)
11.为CMainFrame添加WM_TIMER的消息映射,并添加下列代码:
OnTimer(UINTnIDEvent)
staticinticons[]={IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4};
staticintindex=0;
ChangeI