280 likes | 478 Views
第 10 章 控件 (Control). 10.1 标准控件及其使用 10.2 通用控件 10.3 控件的背景颜色 ( 自学 ). 控件 (Control) :为方便用户与应用程序的交互,程序界面上放置的能够用于处理用户事件并作出响应的图形部件,称为 ~ 。如, 命令按钮 (Command Button) 文本框 (Text Box) 滚动条 (Progress Bar) 列表框 (List Box) 静态文本 (Static) ……. 控件的特点: 图形化 ( 派生自 CWnd 类 ) ,具有窗口的一切特性
E N D
第10章 控件(Control) 10.1 标准控件及其使用 10.2 通用控件 10.3 控件的背景颜色(自学)
控件(Control):为方便用户与应用程序的交互,程序界面上放置的能够用于处理用户事件并作出响应的图形部件,称为~。如,控件(Control):为方便用户与应用程序的交互,程序界面上放置的能够用于处理用户事件并作出响应的图形部件,称为~。如, • 命令按钮(Command Button) • 文本框(Text Box) • 滚动条(Progress Bar) • 列表框(List Box) • 静态文本(Static) • …… • 控件的特点: • 图形化(派生自CWnd类),具有窗口的一切特性 • 分为可见(Visible)控件和非可见(Invisible)控件 • 控件通常作为子窗口出现在应用程序的界面上 • MFC中控件以类的形式提供
10.1 标准控件及其使用 • 标准控件(Standard control): • 交互对象 • 应用于对话框,或主窗口,或工具栏 • 接收用户信息,反馈(显示)信息
10.1 标准控件及其使用 • 控件的使用规则: • 1) 创建控件类对象,一般在窗口的WM_CREATE消息响应函数OnCreate()中编写逻辑代码。 • 2) 建立消息响应,并编写相应的响应代码 Example: CListBoxlistbox; listbox.Create(…);
CObject 1. 静态文本控件(CStatic) CCmdTarget • 用途:显示文本或图片。一般不接收用户事件消息。 CWnd CStatic • 初始化成员函数:Create()原型 • BOOLCreate( • LPCTSTRlpszText, //字符串 • DWORDdwStyle, // 样式 • constRECT&rect, // 大小及位置 • CWnd*pParentWnd, // 父窗口 • UINTnID=0xffff); // 控件的资源标识
10.1 标准控件及其使用 • 为了使应用程序的子窗口可见,有两个样式是必须选定的, • WS_CHILD • WS_VISIBLE • 如, • CStatic m_static; • m_static.Create(“Static”, WS_CHILD | WS_VISIBLE | SS_CENTER, • CRect(20,20,100,40), this, 0) 不需要响应用户交互,因此,资源标识设为0。 分析例 10-1
CObject 2. 按钮控件(CButton) CCmdTarget BOOLCreate( LPCTSTRlpszCaption, //显示文本 DWORDdwStyle, // 样式 constRECT&rect, // 大小及位置 CWnd*pParentWnd, // 父窗口 UINTnID); // 资源标识 CWnd CButton
2. 按钮控件(CButton) Example: #define IDB_BUTTON1 101 (Resource.h) CButton button; button.Create(“Button”, WS_CHILD | WS_VISIBLE |WS_BORDER, CRect(20,20,100,60), this, IDB_BUTTON1); button.Create(“CHECK”, WS_CHILD | WS_VISIBLE | BS_CHECKBOX, CRect(20,20,100,60), this, IDB_BUTTON1); button.Create(“RADIO”, WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, CRect(20,20,100,60), this, IDB_BUTTON1);
2. 按钮控件(CButton) CButton的消息响应:
Example: • 消息映射 • ON_BN_CLICKED(IDB_BUTTON1, OnButton1Clicked) • 2) 消息映射函数声明和定义 • afx_msg void OnButton1Cliked(); • void CButtonDemoView::OnButton1Clicked() { … } 演示CButton消息映射过程 分析例10-2
CObject 3. 编辑控件(CEdit) CCmdTarget • CEdit:输入文本,或编辑文本, • 是应用程序从用户处得到文本的主要对象 • 单行文本,或多行文本 CWnd CEdit
3. 编辑控件(CEdit) BOOLCreate( DWORDdwStyle, //样式 constRECT&rect, //大小及位置 CWnd*pParentWnd,//父窗口 UINTnID);//资源标识
分析例10-3 EN_MAXTEXT The EN_MAXTEXT notification message is sent when the current text insertion has exceeded the specified number of characters for the edit control. The text insertion has been truncated.
10.2 通用控件 • 进度条 • 滑动条 • 微调器 • 图像列表 • 列表视图 • 工具栏
10.2 通用控件 1. 进度条控件(CProgressCtrl) BOOLCreate( DWORDdwStyle, constRECT&rect, CWnd*pParentWnd, UINTnID); dwStyle: PBS_VERTICAL垂直进度条 PBS_SMOOTH平滑进度条(否则,块状填充)
1. 进度条控件(CProgressCtrl) Example: CProgrssCtrl progressCtrl; progressCtrl.Create(WS_CHILD | WS_BORDER | WS_VISIBLE, CRect(20, 20, 100, 20), this, IDC_PROGBAR); progrssCtrl.SetRange(0, 100); progrssCtrl.SetStep(10); progrssCtrl.SetPos(0); for(int i = 0; i < 10; i++) progrssCtrl.StepIt();
CSpinButtonCtrl经常与编辑框控件(CEdit)配对使用。CSpinButtonCtrl经常与编辑框控件(CEdit)配对使用。 2. 微调器控件(CSpinButtonCtrl) BOOL CSpinButtonCtrl::Create(DWORDdwStyle,constRECT&rect, CWnd*pParentWnd,UINTnID);
2. 微调器控件(CSpinButtonCtrl) 与CEdit控件的绑定: CWnd * CSpinButtonCtrl::SetBuddy(CWnd * pWndBuddy)
2. 微调器控件(CSpinButtonCtrl) Example: CEdit spinEdit; spinEdit.Create(WS_CHILD|WS_VISIBLE|WS_BORDER, CRect(20,20,100,40), this, IDC_SPINNER); CSpinButtonCtrl spin; spin.Create(…); spin.SetBuddy(&spinEdit);\ spin.SetRange(0,100); spin.SetPos(0); ….
10.2 通用控件 定时器 Timer 分析例10-4
定时器的使用 • 定时器告诉WINDOWS一个时间间隔(Interval),然后WINDOWS以此时间间隔周期性触发程序。 • 通常有两种方法来实现: • 发送WM_TIMER消息 • 调用应用程序定义的回调函数 • 1.1 用WM_TIMER来设置定时器 • 先请看SetTimer这个API函数的原型 • UINT_PTR SetTimer( • HWND hWnd, // 窗口句柄 • UINT_PTR nIDEvent, // 定时器ID,区分多个定时器 • UINT uElapse, // 时间间隔,单位为毫秒 • TIMERPROC lpTimerFunc // 回调函数 • ); SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
响应代码 消息映射 启动定时器 定时器的使用 • 在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了,例如: • UINT SetTimer(1,100,NULL); • 函数返回值就是第一个参数值表示此定时器的ID号。 • 第二个参数表示定时间隔100毫秒,三个参数在这种方法中一般用NULL。
定时器的使用 • 1.2 调用回调函数 • 此方法首先写一个如下格式的回调函数 • void CALLBACK TimerProc(HWND hWnd,UINT nMsg, • UINT nTimerid,DWORD dwTime); • 然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。
多定时器的使用 • 使用MFC,增加WM_TIMER的消息处理函数OnTimer即可,请看如下例子 • void CTimerTestDlg::OnTimer(UINT nIDEvent) • { • switch (nIDEvent) • { • case 24: ///处理ID为24的定时器 • Draw1(); • break; • case 25: ///处理ID为25的定时器 • Draw2(); • break; • } • }
定时器的使用 • 取消定时器 • 不再使用定时器后,我们应该调用KillTimer来取消定时,KillTimer的原型如下 • BOOL KillTimer( • HWND hWnd, // 窗口句柄 • UINT_PTR uIDEvent // ID • ); • 在MFC程序中我们可以直接调用KillTimer(int nIDEvent)来取消定时器。