vc++期末复习.docx
- 文档编号:5467291
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:15
- 大小:38.07KB
vc++期末复习.docx
《vc++期末复习.docx》由会员分享,可在线阅读,更多相关《vc++期末复习.docx(15页珍藏版)》请在冰豆网上搜索。
vc++期末复习
1MFC程序的基本操作流程
1利用ClassWizard为控件添加成员变量时,请写出所有的代码变化。
(必考)
将控件定义为CMy0901Dlg类的成员:
CStringm_yyy;
在CMy0901Dlg:
:
DoDataExchange()中,自动维护DDX_Control()
DDX_Text(pDX,IDC_EDIT1,m_yyy);
在CMy0904Dlg:
:
CMy0904Dlg()中初始化
m_yyy=_T("");
2利用ClassWizard为控件添加映射函数时,请写出所有的代码变化。
(必考)
在CMy0901Dlg类定义中,说明了以上函数:
afx_msgvoidOnButton1();
在CMy0901Dlg类实现中,创建控件CLICKED消息对应的函数:
voidCMy0901Dlg:
:
OnButton1(){……}
在CMy0901Dlg类实现中,在BEGIN_MESSAGE_MAP宏中,关联事件和函数:
ON_BN_CLICKED(IDC_BUTTON1,OnButton1)
3常用事件的含义(抽五个)
视图事件:
WM_SIZE:
改变窗口大小WM_DESTROY:
销毁窗口
WM_TIMER:
WM_CREATE:
创建窗口
对话框WM_INITDIALOG对话框上所有的子控件创建完成之后选择发送的消息WM_PAINT:
绘制窗口WM_CLOSE:
按钮BN_CLICKED单击了窗口
菜单
列表框:
LBN_SELCHANGE列表框某项的选择被取消
LBN_DBLCLK双击了列表框的某一项
编辑框EN_CHANGE编辑框中的文本被更新
4常用的虚函数的作用(都考)
文档类:
OnOpenDocument
OnSaveDocument
Serialize
视图类:
OnUpdate
OnDraw
应用程序类InitInstance
框架类PreCreateWindow
OnCreateClient
5框架类的理解
利用MFC的APPWizard创建一个应用工程。
简述MFC自动生成了哪些类及其功能
2窗口程序中基本元素的操作技术(读程序、补充程序)
快捷菜单、动态菜单
动态菜单(两个函数流程意思)
//!
!
!
!
!
//获得程序菜单指针
CMenu*pMenu=GetMenu();
//获得第二个子菜单的指针
CMenu*pMenu1=pMenu->GetSubMenu
(1);
//添加一个分隔线
pMenu1->AppendMenu(MF_SEPARATOR);
//在子菜单中增加一菜单项
pMenu1->AppendMenu(MF_STRING,ID_NEW_MENUITEM+0,"新项1");
//?
?
AppendMenu?
?
ID_NEW_MENUITEM+0,"新项1"?
?
//避免系统将“无代码的菜单项”自动置虚
m_bAutoMenuEnable=FALSE;//自动更新菜单状态开关
//修改菜单后,应重画菜单
DrawMenuBar();
return0;
}
//!
!
!
BOOLCMainFrame:
:
OnCommand(WPARAMwParam,LPARAMlParam)
{
WORDnID=LOWORD(wParam);//?
?
WORDnCode=HIWORD(wParam);//?
?
if(nID==ID_NEW_MENUITEM+0)
MessageBox("你选中了新的菜单项1");
returnCFrameWnd:
:
OnCommand(wParam,lParam);
}
BOOLCMainFrame:
:
PreCreateWindow(CREATESTRUCT&cs)
{
if(!
CFrameWnd:
:
PreCreateWindow(cs))
returnFALSE;
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnTRUE;
}
快捷菜单(讲清所标程序流程)
//!
!
!
!
!
voidCMainFrame:
:
OnContextMenu(CWnd*pWnd,CPointpoint)
{
CMenu*pMenu=newCMenu;//?
?
?
pMenu->LoadMenu(IDR_MENU1);//?
?
?
CMenu*pMenu1;
pMenu1=pMenu->GetSubMenu(0);//?
?
?
pMenu1->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,
point.x,point.y,this);///?
?
?
}
voidCMainFrame:
:
OnMenu3()
{
AfxMessageBox("OnMenu3()");
}
状态栏(cmainframeoncreatectestviewonmousemove)与视图(?
)
cmainframeoncreate:
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
if(CFrameWnd:
:
OnCreate(lpCreateStruct)==-1)
return-1;
if(!
m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP
|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||
!
m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failedtocreatetoolbar\n");
return-1;//failtocreate
}
if(!
m_wndStatusBar.Create(this)||
!
m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failedtocreatestatusbar\n");
return-1;//failtocreate
}
//TODO:
Deletethesethreelinesifyoudon'twantthetoolbarto
//bedockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return0;
}
CTestviewOnMouseMove:
voidCTestView:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
CStrings;
s.Format("X=%d,Y=%d",point.x,point.y);
//获得窗口框架的指针
CMainFrame*pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
pFrame->m_wndStatusBar.SetPaneText(1,s);
CView:
:
OnMouseMove(nFlags,point);
}
时钟与作图(读程序或补程序)图形加刷子(?
)
voidCTestView:
:
OnSize(UINTnType,intcx,intcy)
{
CView:
:
OnSize(nType,cx,cy);
//TODO:
Addyourmessagehandlercodehere
}
voidCTestView:
:
OnGameStart()
{
SetTimer(1,100,NULL);
}
voidCTestView:
:
OnTimer(UINTnIDEvent)
{
m_Box.left+=dx;
m_Box.right+=dx;
m_Box.top+=dy;
m_Box.bottom+=dy;
Invalidate();
CView:
:
OnTimer(nIDEvent);
}
voidCTestView:
:
OnDraw(CDC*pDC)
{
CTestDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
pDC->Rectangle(&m_Box);//?
?
?
?
}
voidCTestView:
:
OnGameStop()
{
KillTimer
(1);
}
private:
RECTm_Box;
intdx,dy;
④位图(MyBitmaps某个成员变量(dcimage)的信息)数据库(连接字符串。
关闭链接显示数据库)
位图:
myBitmaps:
:
myBitmaps(charfname[],CDC*pDC)
{
this->pDC=pDC;
HBITMAPhBitmap=(HBITMAP)LoadImage(NULL,fname,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
CBitmapobjBitmap;//操作位图的类
objBitmap.Attach(hBitmap);
objBitmap.GetBitmap(&bm);//读取位图结构(长宽字节)
//建立图像设备上下文
dcImage.CreateCompatibleDC(pDC);
dcImage.SelectObject(&objBitmap);
}
myBitmaps:
:
~myBitmaps()
{
DeleteDC(dcImage);
}
voidmyBitmaps:
:
Draw(CDC*pDC)
{
pDC->BitBlt(100,100,bm.bmWidth,bm.bmHeight,
&dcImage,0,0,SRCCOPY);
}
classmyBitmaps
{
CDCdcImage;
BITMAPbm;
CDC*pDC;
public:
voidDraw(CDC*pDC);
myBitmaps(charfname[],CDC*pDC);
virtual~myBitmaps();
};
数据库:
voidCTestView:
:
OnDbconnect()
{
//!
!
!
:
:
CoInitialize(NULL);//初始化COM环境
m_Cn.CreateInstance("ADODB.Connection");
m_Cn->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=canyin.mdb",
"","",adModeUnknown);
}
voidCTestView:
:
OnDbdisconnct()
{
//!
!
!
m_Cn->Close();
}
voidCTestView:
:
OnDbdisplay()
{
//!
!
!
_RecordsetPtrm_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
//m_pRecordset->Open("cai",m_Cn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdTable);
CStringscmd="Select*fromcaiwherePrice>20";
m_pRecordset->Open((_variant_t)scmd,m_Cn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
while(!
m_pRecordset->adoEOF)//?
?
?
{
//查询当前记录的各种字段的值
//!
!
!
intID=(int)m_pRecordset->GetCollect("ID").lVal;//?
?
?
CStringName=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Name");//?
?
?
floatPrice=m_pRecordset->GetCollect("Price").fltVal;//?
?
?
m_ID=ID;m_Name=Name;//?
?
?
UpdateData();
//!
!
!
m_pRecordset->MoveNext();//当前记录后移//?
?
?
}
}
voidCTestView:
:
OnDbchange()
{
CStringSql;
//Sql="UpdatecaisetPrice=Price+1whereID=2";
//Sql="DeletefromcaiwhereID=2";
Sql="Insertintocai(ID,Name,Price)Values(11,'ccc',90)";
//!
!
!
m_Cn->Execute((_bstr_t)Sql,NULL,adCmdText);
}
⑤一档多视(A1,A2)(CFormViewCListView)
voidCA2View:
:
OnUpdate(CView*pSender,LPARAMlHint,CObject*pHint)
{
m_List1.ResetContent();
CA2Doc*pDoc=(CA2Doc*)GetDocument();
for(inti=0;i
{CPoint*p=pDoc->GetPoint(i);
!
!
CStrings;s.Format("%d,%d",p->x,p->y);
!
!
m_List1.AddString(s);
}
类的序列化串行化wqline//!
!
!
五个地方填空
//支持串行化,需要使用宏定义
classwqLine:
publicCObject//!
!
!
{
DECLARE_SERIAL(wqLine)//!
!
!
POINTsp,ep;
public:
wqLine();
wqLine(POINTsp,POINTep);
virtual~wqLine();
voidDraw(CDC*pDC);
virtualvoidSerialize(CArchive&ar);//!
!
!
};
CTestDocserialization
voidCTestDoc:
:
Serialize(CArchive&ar)
{
if(ar.IsStoring())
{
if(pLine!
=NULL)
pLine->Serialize(ar);
}
else
{
pLine=newwqLine();
pLine->Serialize(ar);
}
}
public:
wqLine*pLine;
virtual~CTestDoc();
控件:
CListCtrlCTreeView(树形控件……给层次结构写代码)
voidCTestDlg:
:
OnButton1()
{
HTREEITEMroot=m_Tree.InsertItem("Parent",TVI_ROOT,TVI_LAST);
m_Tree.InsertItem("son1",root,TVI_LAST);
HTREEITEMson2=m_Tree.InsertItem("son2",root,TVI_LAST);
m_Tree.InsertItem("son3",root,TVI_LAST);
m_Tree.InsertItem("sonson1",son2,TVI_LAST);
m_Tree.InsertItem("sonson2",son2,TVI_LAST);
m_Tree.InsertItem("sonson3",son2,TVI_LAST);
m_Tree.Expand(root,TVE_EXPAND);
m_Tree.Expand(son2,TVE_EXPAND);
}
voidCTestDlg:
:
OnSelchangedTree1(NMHDR*pNMHDR,LRESULT*pResult)
{
NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;
HTREEITEMp=m_Tree.GetSelectedItem();
HTREEITEMparent=m_Tree.GetParentItem(p);
CStringptext=m_Tree.GetItemText(p);
CStringparenttext=m_Tree.GetItemText(parent);
AfxMessageBox(ptext+"\n"+parenttext);
*pResult=0;
}
3基本编程能力
显示对话框(考)
列表框、组合框的操作(2选1)
列表框:
voidCTestDlg:
:
OnButtonappend()
{
staticintn=0;
n++;
CStrings;
s.Format("aaaaa%d",n);
m_lstName.AddString(s);
}
voidCTestDlg:
:
OnSelchangeListname()
{
intindex=m_lstName.GetCurSel();
CStrings;
s.Format("index=%d",index);
CStringname;
m_lstName.GetText(index,name);
m_Name=s+":
"+name;
UpdateData(FALSE);
}
组合框(droplist):
voidCTestDialog:
:
OnButtonFill()
{CStringss[7]={"星期一","星期二","星期三",
"星期四","星期五","星期六","星期日"};
m_Combo1.ResetContent();
for(inti=0;i<7;i++)
m_Combo1.AddString(ss[i]);
m_Combo1.SetCurSel(0);//必要
for(i=0;i<7;i++)
m_Combo3.AddString(ss[i]);
}
voidCTestDialog:
:
OnButtonClear()
{intn=m_Combo1.GetCount();
for(inti=n-1;i>=0;i--)
m_Combo1.DeleteString(i);
m_Combo1.SetCurSel(-1);
}
voidCTestDialog:
:
OnSelchangeCombo1()
{intindex=m_Combo1.GetCurSel();
CStrings;
m_Combo1.GetLBText(index,s);
AfxMessageBox(s);
}
voidCTestDialog:
:
OnEditchangeCombo3()
{
CStrings;
m_Combo3.GetWindowText(s);
m_Combo3.AddString(s);
}
voidCTestDialog:
:
OnButtonFill()
{CStringss[7]={"星期一","星期二","星期三","星期四",
"星期五","星期六","星期日"};
for(inti=0;i<7;i++)
m_Combo1.AddString(ss[i]);
m_Combo1.SetCurSel(0);
}
voidCTestDialog:
:
OnButtonAppend()
{CStrings;
m_Combo1.GetWindowText(s);
if(m_Combo1.FindString(0,s)==CB_ERR)
m_Combo1.AddString(s);
}
绘图程序(考)
4基本实践能力(试图条理清晰)
本学期你一定编写了一些窗口程序,或者经历了一些窗口程序的开发过程。
请写出其中你认为最精彩的程序的设计方案。
设计方案应包括:
程序的流程,类的组成,类中的核心数据成员,核心函数。
贪吃蛇游戏
程序流程:
在菜单栏点击按钮“游戏”,选择“开始”,出现游戏页面(矩形的游戏边界、方块体圆头的贪吃蛇和方形食物),点击方向按钮启动游戏——蛇开始运动,四个方向键控制蛇的方向。
当蛇头接触食物时食物消失,弹出“胜利”对话框,游戏结束;当蛇头接触边框,弹出“失败”对话框,游戏结束。
也可以在菜单栏选择“游戏”、“结束”结束游戏。
类的组成与核心数据成员:
lyqGame类
数据成员lyqStage*pStage;lyqFood*pFood;
lyqSnake*pSnake;
核心函数voidSetSnakeDirection(enumDirectiond);
boolisGameOver();
voidSnakeMove();
voidStart();
voidDraw(CDC*pDC);
lyqGame(RECTr,intw);
virtual~lyqGame();
lyqSnake类
数据成员lyqStage*pStage;vector
enumDirectiondirect;
核心函数voidMove();
voidDraw(CDC*pDC);
voidSetDirection(enumDirectiond);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vc 期末 复习