为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

可视化编程课件_05

2012-01-03 50页 ppt 2MB 21阅读

用户头像

is_510653

暂无简介

举报
可视化编程课件_05null第5章 对话框与控件第5章 对话框与控件对话框的基本概念 通用对话框类 各种控件的基本用法 图像列表的例子 树控件的例子对话框的概念(1)对话框的概念(1)对话框(Dialog)是收集信息或提供反馈的窗口,它通过控件与用户交互 控件(Controls)是执行用户动作的窗口,通常为其父窗口(对话框、边框窗口、视图或控件栏)所有对话框的概念(2)对话框的概念(2)消息对话框用于显示提示信息 AfxMessageBox("Overwrite existing file?",MB_YESNOCANCEL|MB_ICONQUES...
可视化编程课件_05
null第5章 对话框与控件第5章 对话框与控件对话框的基本概念 通用对话框类 各种控件的基本用法 图像列的例子 树控件的例子对话框的概念(1)对话框的概念(1)对话框(Dialog)是收集信息或提供反馈的窗口,它通过控件与用户交互 控件(Controls)是执行用户动作的窗口,通常为其父窗口(对话框、边框窗口、视图或控件栏)所有对话框的概念(2)对话框的概念(2)消息对话框用于显示提示信息 AfxMessageBox("Overwrite existing file?",MB_YESNOCANCEL|MB_ICONQUESTION) 返回值:IDYES、IDNO、IDOK、IDCANCEL、 IDABORT、IDIGNORE与IDRETRY对话框的概念(3)对话框的概念(3)模态对话框 最常见的对话框类型,不允许对话框打开时执行其它操作 用DoModal加载模板与显示对话框 非模态对话框 允许对话框打开时执行其它操作 自己编写构造函数,用Create加载模板,用ShowWindow显示对话框对话框的概念(4)对话框的概念(4)模态对话框 非模态对话框CMyDialog *Dlg; Dlg=new CMyDialog(this); Dlg->Create(IDD_MYDIALOG); Dlg->ShowWindow(SW_SHOW);CMyDialog Dlg; Dlg.DoModal();对话框的概念(5)对话框的概念(5)设置对话框背景颜色 SetDialogBkColor(RGB(200,200,200), RGB(0,0,0)) 处理对话框中的消息 OnInitDialog():初始化对话框 OnOk():确定按钮 OnCancel():取消按钮对话框的概念(6)对话框的概念(6)用对话框编辑器设计对话框 用ClassWizard创建对话框类 为对话框中的控件与对话框类中的消息处理函数建立映射 用ClassWizard添加与控件相关成员变量 创建对话框模板并显示对话框对话框的例子(1)对话框的例子(1)设计对话框控件对话框的例子(2)对话框的例子(2)为控件添加对应的成员变量对话框的例子(3)对话框的例子(3)在CTestDialog::OnInitDialog()中 在CTestDialog::OnTest()中CString str; str.Format("年龄:%d",m_Age); str="学号:"+m_ID+"\n姓名:"+m_Name+"\n"+str; MessageBox(str);m_ID="1001"; m_Name="Zhang"; m_Age=20; UpdateData(false);对话框的例子(4)对话框的例子(4)通用对话框类(1)通用对话框类(1)通用对话框是预定义对话框,执行各种标准操作(CCommonDialog)通用对话框类(2)通用对话框类(2)CFontDialog是字体对话框,m_cf用于初始化字体,其类型为CHOOSEFONT GetColor:获得字体颜色 GetFaceName:获得字体名字 GetCurrentFont:获得选择的字体 IsBold:字体是否为粗体 IsItalic:字体是否为斜体 IsUnderline:字体是否带下划线通用对话框类(3)通用对话框类(3)在CTestView类中添加数据成员 在CTestView构造函数中初始化LOGFONT m_Font; COLORREF m_Color;m_Font.lfHeight=30; m_Font.lfEscapement=0; m_Font.lfWeight=FW_NORMAL; m_Font.lfCharSet=GB2312_CHARSET; m_Color=RGB(255,0,0);通用对话框类(4)通用对话框类(4)在CTestView::OnDraw()中CFont NewFont; NewFont.CreateFontIndirect(&m_Font); pDC->SelectObject(&NewFont); pDC->SetTextColor(m_Color); pDC->TextOut(50,50,"显示字体属性");通用对话框类(5)通用对话框类(5)在CTestView::OnDialog()中CFontDialog Dlg; if(Dlg.DoModal()==IDOK) { Dlg.GetCurrentFont(&m_Font); m_Color=Dlg.GetColor(); Invalidate(true); }通用对话框类(6)通用对话框类(6)通用对话框类(7)通用对话框类(7)CColorDialog是颜色对话框,m_cc用于初始化颜色,其类型为CHOOSECOLOR GetColor:获得颜色RGB值 GetSavedCustomColors:获得自定义颜色 SetCurrentColor:设置所选颜色通用对话框类(8)通用对话框类(8)CFileDialog是文件对话框,m_ofn用于初始化文件,其类型为OPENFILENAME CFileDialog Dlg(true,NULL,NULL, OFN_READONLY,"C++ source|*.cpp") GetFileName:获得文件名 GetPathName:获得文件路径 GetFileExt:获得文件扩展名 GetStartPosition:获得文件列表起始位置通用对话框类(9)通用对话框类(9)CPrintDialog是打印对话框,m_pd用于初始化打印,其类型为PRINTDLG CPrintDialog Dlg(true) GetDefaults:获得默认打印机信息 GetCopies:获得打印份数 GetFromPage:获得打印起始页 GetToPage:获得打印终止页通用对话框类(10)通用对话框类(10)CFindReplaceDialog是查找对话框,m_fr用于初始化查找,类型为FINDREPLACE 非模态对话框:CFindReplaceDialog *pDlg=new FindReplaceDialog() FindNext:是否查找字符串下一次出现 GetFindString:获得查找字符串 GetReplaceString:获得替换字符串 MatchCase:是否精确匹配字符串控件类型(1)控件类型(1)控件类型(2)控件类型(2)控件类型(3)控件类型(3)静态控件(1)静态控件(1)静态控件(CStatic)用于显示文本、图标、位图等,通常不进行输入与输出 通过CStatic成员函数操作静态控件,例如将静态控件变为输入 IDC_STATIC到IDC_CTRLID、IDC_CTRLNAME、IDC_CTRLAGE静态控件(2)静态控件(2)为静态控件添加成员变量 在CTestDialog::OnTest()中m_CtrlID.SetWindowText("ID"); m_CtrlName.SetWindowText("NAME"); m_CtrlAge.SetWindowText("AGE");静态控件(3)静态控件(3)按钮控件(1)按钮控件(1)按钮控件(CButton)是一种子窗口,通过单击或双击执行某种操作,主要包括:复选框、单选钮和下压按钮 通过CButton成员函数操作按钮控件 GetIcon()、GetCursor()、GetBitmap()、 GetButtonStyle()、GetState()、GetCheck()与对应的Set函数按钮控件(2)按钮控件(2)修改按钮控件属性 选中IDC_TEST的Icon属性 为按钮控件添加成员变量 IDC_TEST对应于m_Test 在CTestDialog::OnInitDialog()中HICON hIcon; hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_Test.SetIcon(hIcon);按钮控件(3)按钮控件(3)按钮控件(4)按钮控件(4)增加一个复选框控件 IDC_MYCHECK属于按钮控件 在CTestDialog::OnMyCheck()中CButton *pCheck=(CButton*)GetDlgItem (IDC_MYCHECK); CString str; str.Format("复选框状态:%d",pCheck-> GetCheck()); MessageBox(str);组合框控件(1)组合框控件(1)列表框控件(CListBox) 用于显示列表项,查看和选择列表项 编辑框控件(CEdit) 用于输入文本信息 组合框控件(CComboBox) 由静态控件、列表框和编辑框控件组成组合框控件(2)组合框控件(2)CComboBox的成员函数 GetCurSel:获得列表框当前项位置 GetLBText:获得列表框指定项内容 SetCurSel:设置列表框指定项位置 AddString:列表框结尾添加字符串 InsertString:列表框插入字符串 DeleteString:列表框删除字符串 ResetContent:删除列表框中所有项组合框控件(3)组合框控件(3)设计对话框控件组合框控件(4)组合框控件(4)设置IDC_NUMBER的Data属性 添加数据First、Second与Third 设置IDC_NUMBER的Type属性 DropDown与DropList 为IDC_NUMBER添加成员变量组合框控件(5)组合框控件(5)在CTestDialog类定义中 在CTestDialog::OnInitDialog()中GetDlgItem(IDC_DISPLAY)->GetWindowRect (&m_Rect); ScreenToClient(&m_Rect); m_CtrlNumber.SetCurSel(0); m_CtrlNumber.GetLBText(m_CtrlNumber. GetCurSel(),m_Number);private: CRect m_Rect;组合框控件(6)组合框控件(6)在CTestDialog::OnPaint()的else中 在CTestDialog::OnSelchangeNumber()中m_CtrlNumber.GetLBText(m_CtrlNumber. GetCurSel(),m_Number); InvalidateRect(&m_Rect);CPaintDC dc(this); dc.SetTextColor(RGB(0,0,255)); dc.TextOut(m_Rect.left+20,m_Rect.top+20, m_Number);组合框控件(7)组合框控件(7)在CTestDialog::OnEditchangeNumber()中m_CtrlNumber.GetWindowText(m_Number); InvalidateRect(&m_Rect); 或者 CComboBox* pComb=(CComboBox *)GetDlgItem (IDC_NUMBER); pComb->GetWindowText(m_Number); InvalidateRect(&m_Rect);组合框控件(8)组合框控件(8)在CTestDialog::OnLine()中 在CTestDialog::OnEllipse()中CDC* pDC; pDC=GetDC(); pDC->MoveTo(m_Rect.left+20,m_Rect.top+20); pDC->LineTo(m_Rect.right-20,m_Rect.bottom-20); ReleaseDC(pDC);CDC* pDC; pDC=GetDC(); pDC->Ellipse(m_Rect.left+20,m_Rect.top+20, m_Rect.right-20,m_Rect.bottom-20); ReleaseDC(pDC);组合框控件(9)组合框控件(9)标准模板库标准模板库STL(Standard Template Library)是标准模板类库,它是基于模板的容器类库 STL包括数据结构,例如链表、队列和栈;也包括通用的算法,例如排序和查找列表框控件(1)列表框控件(1)定义类模板 CTypedPtrList m_pDataList列表框控件(2)列表框控件(2)m_pDataList的成员函数 GetHeadPosition()与GetTailPosition() GetAt()、GetPrev()与GetNext() AddTail()与RemoveHead() InsertAfter()与InsertBefore() RemoveAt()与RemoveAll() IsEmpty()列表框控件(3)列表框控件(3)设计对话框控件列表框控件(4)列表框控件(4)在StdAfx.h中 添加CStudent类,基类为CObject#include "stdafx.h" #include "Student.h" class CStudent : public CObject { public: CString m_sID; CString m_sName; CStudent(CString sID,CString sName); };#include 列表框控件(5)列表框控件(5)为控件添加成员变量 在CTestDialog类定义中private: POSITION m_CurPos; CTypedPtrList m_pDataList;列表框控件(6)列表框控件(6)在CTestDialog::OnAdd()中BOOL bSucc=UpdateData(true); if(!bSucc) return; if(m_ID.GetLength()==0) { MessageBox("ID cannot empty!"); (CEdit*)GetDlgItem(IDC_ID)->SetFocus(); return; } if(m_Name.GetLength()==0) { MessageBox("Name cannot empty!"); (CEdit*)GetDlgItem(IDC_NAME)->SetFocus(); return; } CStudent *pStudent; //向链表追加结点 pStudent=new CStudent(m_ID,m_Name); m_pDataList.AddTail(pStudent); m_CurPos=m_pDataList.GetTailPosition(); CString str; //向ListBox追加字符串 str=m_ID+" "+m_Name; m_CtrlList.AddString(str); m_CtrlList.SetCurSel(m_CtrlList.GetCount()-1);列表框控件(7)列表框控件(7)在CTestDialog::OnPrevious()中if(m_CurPos!=NULL) { //计算上一条记录在链表中位置 if(m_CurPos==m_pDataList.GetHeadPosition()) m_CurPos=m_pDataList.GetTailPosition(); else m_pDataList.GetPrev(m_CurPos); //从链表中取出上一条记录 CStudent *pStudent=m_pDataList.GetAt(m_CurPos); m_ID=pStudent->m_sID; m_Name=pStudent->m_sName; UpdateData(false); //计算上一条记录在ListBox中位置并选中 int nCur=m_CtrlList.GetCurSel(); if(nCur==0) nCur=m_CtrlList.GetCount()-1; else nCur--; m_CtrlList.SetCurSel(nCur); } else { MessageBox("No Item!"); }列表框控件(8)列表框控件(8)在CTestDialog::OnNext()中:if(m_CurPos!=NULL) { //计算下一条记录在链表中位置 if(m_CurPos==m_pDataList.GetTailPosition()) m_CurPos=m_pDataList.GetHeadPosition(); else m_pDataList.GetNext(m_CurPos); //从链表中取出下一条记录 CStudent *pStudent=m_pDataList.GetAt(m_CurPos); m_ID=pStudent->m_sID; m_Name=pStudent->m_sName; UpdateData(false); //计算下一条记录在ListBox中位置并选中 int nCur=m_CtrlList.GetCurSel(); if(nCur==m_CtrlList.GetCount()-1) nCur=0; else nCur++; m_CtrlList.SetCurSel(nCur); } else{ MessageBox("No Item!"); }列表框控件(9)列表框控件(9)在CTestDialog::OnClose()中 在CTestDialog::OnDestroy()中 在CTestDialog::OnInitDialog()中if(MessageBox("Close Dialog?","Close", MB_OKCANCEL|MB_ICONQUESTION)==IDOK) CDialog::OnCancel();if(!m_pDataList.IsEmpty()) delete m_pDataList.RemoveHead();m_CurPos=NULL;列表框控件(10)列表框控件(10)列表框控件(11)列表框控件(11)通过状态图来控制按钮状态enum STATE { STARTSTATE, //开始状态 BROWSESTATE, //浏览状态 ADDSTATE, //增加状态 MODIFYSTATE, //修改状态 FINALSTATE, //结束状态 };列表框控件(12)列表框控件(12)绘图程序的例子(1)绘图程序的例子(1)通过画笔在视图窗口画一个矩形 增加画笔对话框,改变画笔的风格与宽度 增加颜色对话框,改变画笔的颜色 增加菜单项与工具栏按钮,打开两种对话框绘图程序的例子(2)绘图程序的例子(2)设计对话框控件绘图程序的例子(3)绘图程序的例子(3)为控件添加成员变量 在CTestDialog类定义中protected: CRect m_Sample;绘图程序的例子(4)绘图程序的例子(4)在CTestDialog类定义前 在CTestDialog::OnInitDialog()中enum {PEN_STYLE_SOLID,PEN_STYLE_DASH, PEN_STYLE_DOT};GetDlgItem(IDC_SAMPLE)->GetWindowRect (&m_Sample); ScreenToClient(&m_Sample);绘图程序的例子(5)绘图程序的例子(5)在CTestDialog::OnSolid()中 在CTestDialog::OnDash()中 在CTestDialog::OnDot()中m_Style=PEN_STYLE_SOLID; InvalidateRect(&m_Sample);m_Style=PEN_STYLE_DASH; InvalidateRect(&m_Sample);m_Style=PEN_STYLE_DOT; InvalidateRect(&m_Sample);绘图程序的例子(6)绘图程序的例子(6)在CTestDialog::OnChangeWidth()中int tmp; tmp=GetDlgItemInt(IDC_WIDTH); if((tmp>0)&&(tmp<7)) { m_Width=tmp; InvalidateRect(&m_Sample); }绘图程序的例子(7)绘图程序的例子(7)在CTestDialog::OnPaint()中CPen NewPen; switch(m_Style) { case PEN_STYLE_SOLID: NewPen.CreatePen(PS_SOLID,m_Width,RGB(0,0,0)); break; case PEN_STYLE_DASH: NewPen.CreatePen(PS_DASH,m_Width,RGB(0,0,0)); break; case PEN_STYLE_DOT: NewPen.CreatePen(PS_DOT,m_Width,RGB(0,0,0)); break; default: NewPen.CreatePen(PS_SOLID,m_Width,RGB(0,0,0)); break; } dc.SelectObject(&NewPen); dc.MoveTo(m_Sample.left+20,m_Sample.top+50); dc.LineTo(m_Sample.right-20,m_Sample.top+50);绘图程序的例子(8)绘图程序的例子(8)在Resourse View中增加菜单项 ID_OPTION_PEN Pen(E) Ctrl+E ID_OPTION_COLOR Color(L) Ctrl+L 在Resourse View中增加快捷键 ID_OPTION_PEN Ctrl+E VIRTKEY ID_OPTION_COLOR Ctrl+L VIRTKEY 在Resourse View中增加工具栏按钮 ID_OPTION_PEN ID_OPTION_COLOR绘图程序的例子(9)绘图程序的例子(9)在CTestDoc类定义中 在CTestDoc构造函数中public: int m_Width; int m_Style; COLORREF m_Color;m_Width=1; m_Style=PEN_STYLE_SOLID; m_Color=RGB(0,0,0);绘图程序的例子(10)绘图程序的例子(10)在CTestDoc::OnOptionPen()中 在CTestDoc::OnOptionColor()中CPenDialog PenDlg; PenDlg.m_Width=m_Width; PenDlg.m_Style=m_Style; if(PenDlg.DoModal()==IDOK) { m_Width=PenDlg.m_Width; m_Style=PenDlg.m_Style; }CColorDialog ColorDlg; if (ColorDlg.DoModal()==IDOK) m_Color=ColorDlg.GetColor();绘图程序的例子(10)绘图程序的例子(10)在CTestDoc::OnOptionPen()中 在CTestDoc::OnOptionColor()中CPenDialog PenDlg; PenDlg.m_Width=m_Width; PenDlg.m_Style=m_Style; if(PenDlg.DoModal()==IDOK) { m_Width=PenDlg.m_Width; m_Style=PenDlg.m_Style; }CColorDialog ColorDlg; if (ColorDlg.DoModal()==IDOK) m_Color=ColorDlg.GetColor();绘图程序的例子(11)绘图程序的例子(11)绘图程序的例子(12)绘图程序的例子(12)在CTestView::OnLButtonDown()中CTestDoc *pDoc=GetDocument(); CPen NewPen; switch(pDoc->m_Style) { case PEN_STYLE_SOLID: NewPen.CreatePen(PS_SOLID,pDoc->m_Width,pDoc->m_Color); break; case PEN_STYLE_DASH: NewPen.CreatePen(PS_DASH,pDoc->m_Width,pDoc->m_Color); break; case PEN_STYLE_DOT: NewPen.CreatePen(PS_DOT,pDoc->m_Width,pDoc->m_Color); break; } CDC* pDc=GetDC(); pDc->SelectObject(&NewPen); pDc->Rectangle(20,20,200,200);绘图程序的例子(13)绘图程序的例子(13)旋转框控件(1)旋转框控件(1)旋转框控件(Spin)称为UP_DOWN控件,通常与编辑框控件一起使用 添加编辑框控件和Spin控件,使编辑控件的tab次序在Spin控件之前 Spin控件的Alignment值设为Right。 选中Auto Buddy和Set Buddy Integer复选框 不能为Spin控件设定Tab Stop属性旋转框控件(2)旋转框控件(2)CSpinButtonCtrl用于管理Spin控件 为控件添加成员变量m_Spin SetRange()用于改变取值范围 在CTestDialog::OnInitDialog()中m_Spin.SetRange(0,50); m_Spin.SetPos(25);滑动条控件滑动条控件滑动条控件(Slider)在两个点之间移动 选中Auto Ticks和Tick Marks复选框 CSpinButtonCtrl用于管理Slider控件 为控件添加成员变量m_Slider SetRange()用于改变取值范围 在CTestDialog::OnInitDialog()中m_Slider.SetRange(0,100); m_Slider.SetTicFreq(10);进展条控件(1)进展条控件(1)进展条控件(Progress)指示程序的进展 风格有Border、Vertical与Smooth CSpinButtonCtrl用于管理Progress控件 为控件添加成员变量m_Progress SetRange()用于改变取值范围进展条控件(2)进展条控件(2)按钮(IDC_TEST)用于控制Progress控件 在CTestDialog::OnTest()中m_Progress.SetRange(0,100); m_Progress.SetStep(5); for(int i=0;i<20;i++) { m_Progress.StepIt(); Sleep(100); }进展条控件(3)进展条控件(3)当滑动条控件移动时,发送WM_VSCROLL和WM_HSCROLL消息给父窗口 通过滑动条控件的滚动消息更新进展条控件 在CTestDialog::OnInitDialog()中 在CTestDialog::OnHScroll()中m_Progress.SetPos(m_Slider.GetPos());m_Slider.SetRange(0,100); m_Slider.SetTicFreq(10); m_Progress.SetRange(0,100);进展条控件(4)进展条控件(4)直接创建控件(1)直接创建控件(1)在CTestView类定义中 private: CSliderCtrl m_Slider; 在CTestView类定义前 #define IDC_SLIDER 101 在CTestView::OnCreate()中m_Slider.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TBS_AUTOTICKS|TBS_BOTH|TBS_HORZ,CRect(40,40,300,80),this,IDC_SLIDER);直接创建控件(2)直接创建控件(2)创建滑动条的范围与刻度间隔 在CTestView::OnHScroll()中m_Slider.SetRange(0,100); m_Slider.SetTicFreq(10);CSliderCtrl* Slider=(CSliderCtrl*)pScrollBar; CString m_Pos; m_Pos.Format("%d",Slider->GetPos()); CClientDC dc(this); dc.TextOut(40,20,m_Pos);直接创建控件(3)直接创建控件(3)在CTestView类定义中 private: CProgressCtrl m_Progress; 在CTestView类定义前 #define IDC_PROGRESS 102 在CTestView::OnCreate()中m_Progress.Create(WS_CHILD|WS_VISIBLE|WS_BORDER,CRect(400,40,700,80),this,IDC_PROGRESS);直接创建控件(4)直接创建控件(4)创建进展条的范围、步长和进度值 在CTestView::OnLButtonDown()中m_Progress.SetRange(0,100); m_Progress.SetStep(10); m_Progress.SetPos(50);for(int i=0;i<5;i++) { m_Progress.StepIt(); Sleep(100); }动画控件(1)动画控件(1)设计对话框控件动画控件(2)动画控件(2)在CTestDialog::OnBrowse()中CFileDialog dlg(true,NULL,NULL,OFN_READONLY,"Animation(*.avi)|*.avi|"); if(dlg.DoModal()==IDOK) { CString FileName=dlg.GetPathName(); m_CtrlAnimate.Stop(); m_CtrlAnimate.Close(); m_CtrlAnimate.Open(FileName); }动画控件(3)动画控件(3)在CTestDialog::OnPlay()中 m_CtrlAnimate.Play(0,0xFFFF,1); 在CTestDialog::OnStop()中 m_CtrlAnimate.Stop(); 在CTestDialog::OnDisp()中 m_CtrlAnimate.Seek(5);动画控件(4)动画控件(4)图像列表与位图(1)图像列表与位图(1)图像列表类似于位图数组,每个位图都有一个索引,用于查找特定图像 CImageList类用于创建、显示和管理图像列表图像列表与位图(2)图像列表与位图(2)在ResourceView中加载多个位图或ICON 定义一个图像列表 CImageList *m_pImageList; 创建图像列表 m_pImageList=new CImageList(); m_pImageList->Create(16,16,ILC_MASK,5,1); 将图像装载到m_pImageList m_pImageList->Add(&bmp,RGB(255,255,255));图像列表与位图(3)图像列表与位图(3)在Resource View中加载位图 IDB_CLASS、IDB_STUREC、IDB_COMPUTERDEPT、 IDB_SELECTEDCLASS、IDB_SELECTEDSTUREC与 在CTestDialog类定义中private: CImageList *m_pImageList; void AddBitmapToImageList(UINT nBitmap);图像列表与位图(4)图像列表与位图(4)在CTestDialog类构造函数中m_pImageList=new CImageList(); m_pImageList->Create(16,16,ILC_MASK,0,1); AddBitmapToImageList(IDB_COMPUTERDEPT); AddBitmapToImageList(IDB_CLASS); AddBitmapToImageList(IDB_SELECTEDCLASS); AddBitmapToImageList(IDB_STUREC); AddBitmapToImageList(IDB_SELECTEDSTUREC);图像列表与位图(5)图像列表与位图(5)在CTestDialog::AddBitmapToImageList()中 在CTestDialog::OnDestroy()中CBitmap bmp; bmp.LoadBitmap(nBitmap); m_pImageList->Add(&bmp,RGB(255,255,255)); bmp.DeleteObject();delete m_pImageList;图像列表与位图(6)图像列表与位图(6)在CTestDialog::OnPaint()的else中CPaintDC dc(this); CPoint pt1(10,10),pt2(10,60); int nCount=m_pImageList->GetImageCount(); for(int i=0;iDraw(&dc,i,pt1,ILD_NORMAL); m_pImageList->Draw(&dc,i,pt2,ILD_MASK); pt1.x+=50; pt2.x+=50; }树状控件(1)树状控件(1)树状控件(Tree)通过树或分层结构显示信息 树的顶部称为父条目,其下条目称为子条目 用户可以展开或折叠树条目,以控制需要显示的信息 当需要更多的水平或竖直控件时,树控件会自动显示滚动条树状控件(2)树状控件(2)树状控件的风格属性 TVS_HASLINES:在父/子结点间绘制连线 TVS_LINESATROOT:在根/子结点间绘制连线 TVS_HASBUTTONS:在结点前添加按钮,表示结点是否被展开 TVS_EDITLABELS:结点的显示字符可编辑 TVS_SHOWSELALWAYS:在失焦时显示当前结点 TVS_DISABLEDRAGDROP:不允许Drag/Drop 树状控件(3)树状控件(3)CTreeCtrl用于管理树状控件 SetImageList()与InsertItem() GetSelectedItem()与SelectItem() GetItemText()与SetItemText() DeleteItem()与DeleteAllItems() GetRootItem()、GetChildItem()、GetParentItem()与GetNextSiblingItem()树状控件(4)树状控件(4)树状控件的消息映射 TVN_SELCHANGED:选中结点发生改变 TVN_ITEMEXPANDED:选中结点被展开 TVN_BEGINLABELEDIT:开始编辑结点字符 TVN_ENDLABELEDIT:结束编辑结点字符 TVN_GETDISPINFO:需要得到某结点信息树状控件(5)树状控件(5)设计对话框控件 Tree Control风格 Has Button(增加按钮)、Has Lines(增加父子连线)、Lines at root(增加根连线) Edit Box风格 Multiline(显示多)、Want return(回车)树状控件(6)树状控件(6)在Resource View中加载位图文件 IDB_CLASS、IDB_STUREC、IDB_COMPUTERDEPT、 IDB_SELECTEDCLASS与IDB_SELECTEDSTUREC 在CTestDialog类定义中private: CImageList *m_pImageList; void AddBitmapToImageList(UINT nBitmap); void InitNodeTree();树状控件(7)树状控件(7)在CTestDialog类定义中struct CStudent { CString ID; CString Name; int Age; CStudent(CString sID, CString sName, int nAge) { ID=sID; Name=sName; Age=nAge; }; };树状控件(8)树状控件(8)在CTestDialog类构造函数中m_pImageList=new CImageList(); m_pImageList->Create(16,16,ILC_MASK,0,1); AddBitmapToImageList(IDB_COMPUTERDEPT); AddBitmapToImageList(IDB_CLASS); AddBitmapToImageList(IDB_SELECTEDCLASS); AddBitmapToImageList(IDB_STUREC); AddBitmapToImageList(IDB_SELECTEDSTUREC);树状控件(9)树状控件(9)在CTestDialog::AddBitmapToImageList()中 在CTestDialog::OnInitDialog()中CBitmap bmp; bmp.LoadBitmap(nBitmap); m_pImageList->Add(&bmp,RGB(255,255,255)); bmp.DeleteObject();InitNodeTree();树状控件(10)树状控件(10)在CTestDialog::InitNodeTree()中m_CtrlTree.SetImageList(m_pImageList,TVSIL_NORMAL); HTREEITEM hRoot=m_CtrlTree.InsertItem("Computer Deptment",0,0); HTREEITEM hClass=m_CtrlTree.InsertItem("Software", 1,2,hRoot); HTREEITEM hCurNode; CStudent *pStu; pStu=new CStudent("1001","zhang",18); hCurNode=m_CtrlTree.InsertItem(pStu->Name,3,4, hClass); m_CtrlTree.SetItemData(hCurNode,(DWORD)pStu); pStu=new CStudent("1002","wang",19);树状控件(11)树状控件(11)hCurNode=m_CtrlTree.InsertItem(pStu->Name,3,4, hClass); m_CtrlTree.SetItemData(hCurNode,(DWORD)pStu); hClass=m_CtrlTree.InsertItem("Application",1,2, hRoot); pStu=new CStudent("1003","li",20); hCurNode=m_CtrlTree.InsertItem(pStu->Name,3,4, hClass); m_CtrlTree.SetItemData(hCurNode,(DWORD)pStu); pStu=new CStudent("1004","zhao",21); hCurNode=m_CtrlTree.InsertItem(pStu->Name,3,4, hClass); m_CtrlTree.SetItemData(hCurNode,(DWORD)pStu); m_CtrlTree.Expand(hRoot,TVE_EXPAND); 树状控件(12)树状控件(12)在CTestDialog::OnSelchangedNodetree()中HTREEITEM hSelectedNode=m_CtrlTree. GetSelectedItem(); if(m_CtrlTree.GetItemData(hSelectedNode)) { CStudent *pStu=(CStudent*)m_CtrlTree. GetItemData(hSelectedNode); m_Info.Format("\r\nAge: %d",pStu->Age); m_Info="ID:"+pStu->ID+"\r\nName:"+pStu->Name +m_Info; UpdateData(false); } else { m_Info=m_CtrlTree.GetItemText(hSelectedNode); UpdateData(false); }树状控件(13)树状控件(13)在CTestDialog::OnDestroy()中HTREEITEM hRootNode=m_CtrlTree.GetRootItem(); HTREEITEM hCurClassNode=m_CtrlTree.GetChildItem (hRootNode); while(hCurClassNode) { HTREEITEM hCurStuNode=m_CtrlTree.GetChildItem (hCurClassNode); while(hCurStuNode) { CStudent *pStu=(CStudent*)m_CtrlTree. GetItemData(hCurStuNode);树状控件(14)树状控件(14) delete pStu; hCurStuNode=m_CtrlTree.GetNextSiblingItem (hCurStuNode); } hCurClassNode=m_CtrlTree.GetNextSiblingItem (hCurClassNode); } m_CtrlTree.DeleteAllItems(); delete m_pImageList;树状控件(15)树状控件(15)树状控件拖放功能(1)树状控件拖放功能(1)在树状控件中实现拖放功能 TVN_BEGINDRAG:通知树控件的父窗口拖动已经开始 WM_MOUSEMOVE:移动鼠标时发送 WM_LBUTTONUP:释放鼠标左按钮时发送树状控件拖放功能(2)树状控件拖放功能(2)设计对话框控件 设置树控件的风格 Has Button(增加+、-按钮) Has Lines(增加父子条目间连线) Lines at root(增加根条目连线)树状控件拖放功能(3)树状控件拖放功能(3)在CTestDialog类定义中private: CImageList *m_pImageList; BOOL m_bDragging; HTREEITEM m_hDragItem; HTREEITEM m_hDragTarget; void AddBitmapToImageList(UINT nBitmap); void InitNodeTree();树状控件拖放功能(4)树状控件拖放功能(4)在CTestDialog::InitNodeTree()中m_CtrlTree.SetImageList(m_pImageList,TVSIL_NORMAL); HTREEITEM hRoot=m_CtrlTree.InsertItem("Computer Deptment",0,0); HTREEITEM hClass=m_CtrlTree.InsertItem("Software", 1,2,hRoot); m_CtrlTree.InsertItem("zhang",3,4,hClass); m_CtrlTree.InsertItem("wang",3,4,hClass); hClass=m_CtrlTree.InsertItem("Application",1,2, hRoot); m_CtrlTree.InsertItem("li",3,4,hClass); m_CtrlTree.InsertItem("zhao",3,4,hClass); m_CtrlTree.Expand(hRoot,TVE_EXPAND);树状控件拖放功能(5)树状控件拖放功能(5)在CTestDialog::OnInitDialog()中 在CTestDialog::OnDestroy()中InitNodeTree(); m_bDragging=FALSE; m_hDragTarget=NULL; m_hDragItem=NULL;m_CtrlTree.DeleteAllItems(); delete m_pImageList;树状控件拖放功能(6)树状控件拖放功能(6)在CTestDialog::OnBegindragNodetree()中m_hDragItem=pNMTreeView->itemNew.hItem; int nLayer=0; //被拖动结点层数 HTREEITEM hItem=m_hDragItem; while(hItem) { hItem=m_CtrlTree.GetParentItem(hItem); nLayer++; } if(nLayer==3) //学生结点 { CImageList *pDragImage; pDragImage=m_CtrlTree.CreateDragImage (m_hDragItem);树状控件拖放功能(8)树状控件拖放功能(8)在CTestDialog::OnBegindragNodetree()中 m_CtrlTree.SelectItem(m_hDragItem); pDragImage->BeginDrag(0,CPoint(0,0)); pDragImage->DragEnter(&m_CtrlTree, pNMTreeView->ptDrag); SetCapture(); m_bDragging=true; delete pDragImage; }树状控件拖放功能(9)树状控件拖放功能(9)在CTestDialog::OnMouseMove()中if(m_bDragging) { CPoint pt(point); MapWindowPoints(&m_CtrlTree,&pt,1); CImageList::DragMove(pt); UINT uHitTest=TVHT_ONITEM; m_hD
/
本文档为【可视化编程课件_05】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索