没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2007-08-31 17:29:05.000|阅读 1281 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
1,对话框也是窗口,它不当可以接受消息,而且还可以被移动和关闭,甚至可以在它的客户区中进行绘图操作。
2,模式对话框在被关闭之前,用户无法在同一应用程序的其它地方进行工作。模式对话框更易于编程。
无模式对话框在它仍保留在屏幕的同时,用户还可以在应用程序的其它窗口进行工作。
3,对话框控件既可以通过 CWnd 指针来引用,也可以通过资源文件定义的索引值(和#define常量相关联)来引用。对话框控件本身就是一个窗口。控件通过向上级对话框发送消息来响应用户的动作。
利用 ClassWizard 可以帮助产生 CDialog 派生类,还可以使对话框类数据成员和对话框控件相联系。
4,在现存在项目中添加模式对话框步骤:
1)用对话框编辑器创建包含各种控件的对话框资源。对话框编辑器会对项目的资源文件更新,使之包含新的对话框资源,并且该项目的 resource.h 文件也会被更新,以便能够包含新的#define常量。
2)利用 ClassWizard 创建 CDialog 派生类,并将它和第一步所创建的资源相连接。
3)利用 ClassWizard 添加控件消息响应函数,并进行编辑。
4)在其它类中需要使用地方先构造该对话框类对象,再调用 DoModal 显示模式对话框。
说明:
1)在产生的对话框头文件中包含一个枚举类型常量 IDD,用于设置该对话框资源 ID。枚举常量 IDD 的使用减弱了 CPP 文件对资源 ID 的依赖。
2)《在其它类中显示模式对话框后,只有当模式对话框退出后,才继续执行该类显示模式对话框代码后的代码。》
5,在组合筐中 Data 属性页下,添加一条后按 CTRL+RETURN 来结束(或添加下条item)。(VC6中按?键可以获取相关帮助提示的)。组合框有 Simple,Dropdown,Drop List 三中风格,可以是 Styles 中选择。
列表筐中,用户只能用鼠标选择选择一个条目,而且在对话框编辑器中不能输入列表框的初始选择条目。
在静态文本控件中可以内置'&'符号。运行时候,&符号后面的字符下将有一个下划线。用户在按下 ALT 键后同时按下相应带下划线的字母,则就可以跳转到相应的控件上去。注意同一对话框中跳转字符不能重复。
6,当 DoModal 被调用后,实际在幕后引起一系列如下的动作:
CDialog::DoModal->CEx06Dialog::OnInitDialog->其它的初始化->CDialog::OnInitDialog->CWnd::UpdateData(FALSE)->CEx06Dialog::DoDataExchange
用户输入数据...
用户单击 OK 按钮
CEx06Dialog::OnOk->...其它的确认处理...->CDialog::OnOk->CWnd::UpDateData(TURE)->CEx06Dialog::DoDataExchange->CDialog::EndDialog(IDOK)
说明:
1)virtual BOOL OnInitDialog( );
//CDialog::OnInitDialog This member function is called in response to the WM_INITDIALOG message. This message is sent to the dialog box during the Create, CreateIndirect, or DoModal calls, which occur immediately before the dialog box is displayed.
//Override this member function if you need to perform special processing when the dialog box is initialized.
2)BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
//CWnd::UpdateData :Call this member function to initialize data in a dialog box, or to retrieve and validate dialog data.
//bSaveAndValidate:Flag that indicates whether dialog box is being initialized (FALSE) or data is being retrieved (TRUE).
//By default UpdateData(TRUE) is called in the default CDialog::OnOK handler and UpdateData(FALSE) is called in the default CDialog::OnInitDialog.
3)virtual void DoDataExchange( CDataExchange* pDX );
//CWnd::DoDataExchange Called by the framework to exchange and validate dialog data.
//Never call this function (DoDataExchange) directly. It is called by the UpdateData member function.
//Call UpdateData to initialize a dialog box’s controls or retrieve data from a dialog box.
4)void EndDialog( int nResult );
//CDialog::EndDialog makes the dialog box invisible but does not destroy it.
//Call this member function to terminate a modal dialog box. This member function returns nResult as the return value of DoModal(IDOK 表示接受对话框数据,IDCANCEL 表示取消对话框数据). You must use the EndDialog function to complete processing whenever a modal dialog box is created.
//注意:If you implement the OK button in a modeless dialog box, you must override the OnOK member function and call DestroyWindow from within it.
5)当 DoModal 函数返回的时候,对话框窗口不再存在。我们可以在堆栈中创建模式对话框对象,这样就可以保证当程序控制转向到 C++对话框对象所在的范围之外时,它及时的删除掉。
7,代码解释:
void CEx06aDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEx06aDialog)
DDX_Text(pDX, IDC_BIO, m_strBio);//
DDX_Radio(pDX, IDC_CAT, m_nCat);
...
DDV_MinMaxInt(pDX, m_nSsn, 0, 999999999);
//}}AFX_DATA_MAP
}
说明:
1)DoDataExchange、DDX_(交换)、DDV_(确认)函数都具有双向性。如果调用 UpdateData(FALSE)(参数为 FALSE),则这些数据就会将与控件相关联(值关联)的数据成员的值传递给对话框中的控件;相反,如果 UpDateData(TURE)(参数是 TURE),则这些函数会将数据从对话框控件中传递给与之相关联(值关联)的数据成员。
2)这里 DDX_Text 函数被重载,具体参阅 MSDN。The DDX_Text function manages the transfer of int, UINT, long, DWORD, CString, float, or double data between an edit control in a dialog box, form view, or control view and a CString data member of the dialog box, form view, or control view object.
其它 DDX_函数参阅 MSDN。
8,Enter 键触发 OnOk 函数调用:
当用户按下 ENTER 键后,OS 会自动去查找输入焦点落在哪个按钮上,获得焦点的按钮四周将被点线矩形框包围。如果所有的按钮都没获得输入焦点,则 OS 会自动去寻找程序或资源所指定的默认按钮(默认按钮边框较粗)。如果对话框没有默认按钮,那么即使对话框中没有 OK 按钮,OnOk 函数也会自动被调用。
由于 OnOk 函数是虚函数,可以重写 OnOk 函数,将其函数体置空,变可以使使 ENTER 键无效。
分离 OK 按钮:改写 OK 按钮 ID,并除掉其默认按钮(Default Button)的设置。
9,p107至 WIN32程序员:强烈建议看看,下为简要笔记。
对话框控件会向他们父对话框发送 WM_COMMAND 通告消息。大多数窗口程序处理函数都是通过一个嵌套的 switch 结构了处理这些通告消息的,而 MFC 则更直接了当地把这些控件通知消息和其它的 Windows 消息放在同一个层次上处理。
10,Esc 键触发 OnCancel 函数的调用,导致控制从对话框中退出,如果是模式对话框则 DoModal的还返回 IDCANCEL 值。其消除方法同 ENTER 键。
11,事例代码涉及的一些主要函数及补充说明:
1)CWnd* GetDlgItem( int nID ) const;//可用它来获取对话框上控件指针(返回的时候,强制转换成所需要的控件指针),注意临时性。
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
//Retrieves a pointer to the specified control or child window in a dialog box or other window. The pointer returned is usually cast to the type of control identified by nID.
说明:如果需要包 CWnd 指针转化成一个控件 ID,则可以使用 MFC 中 CWnd 类 GetDlgCtrlID 成员函数。
2)GetScrollPos Retrieves the current position of a scroll box.
SetScrollPos Sets the current position of a scroll box.
GetScrollRange Retrieves the current minimum and maximum scroll-bar positions for the given scroll bar.
SetScrollRange Sets minimum and maximum position values for the given scroll bar.
3)afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );//CWnd::OnHScroll
afx_msg void OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );//CWnd::OnVScroll
3)所有的水平滚动条都绑在 WM_HSCROLL 消息控制函数,所有的竖直滚动条则都绑在一个 WM_VSCROLL 消息控制函数上。(一般控件都有自己的独立的消息控制函数,但[滚动条控件]有点不同,所以对同一个对话框多个滚动条消息处理的时候,一般都将它们的滚动范围设置一致,方便编程)
/////////////////////////
///P109-125页内容笔记待续
12,每个控件在显示之前会向其父对话框发送 WM_CTLCOLOR 消息,对话框本身也会发送该消息。
《对话框和对话框控件都是窗口,也可以在这些窗口中进行绘图操作。(添加 OnPain 函数,调用 Invalidate/UpdateWindow 让窗口重绘)》
13,在运行时加入对话框控件:
一般步骤:
1)在对话框类中添加一个内嵌的控件窗口数据成员。一个内嵌控件 C++对象将与相应的对话框对象一起被构造和删除。
2)从 View 菜单中选择 Resource Symbols,为新的控件添加一个 ID 常量。(也可以在 Resource.h 中用定义)
3)用 ClassWizard 映射 WM_INITDIALOG 消息覆盖(Override)基类 CDialog::OnInitDialog 函数。在该函数里调用控件窗口的Create成员函数,并显示新的控件(可以用 ShowWindow 函数)。Windows 回在删除对话框窗口的同时也删除该控件窗口。
4)在派生对话框类里,为新控件手工加入必要的通知消息控制函数。(三步:消息控制函数原型说明,消息映射,消息处理函数)
14,Win32编程经验:父窗口和控件之间是通过 Windows 消息进行通信的(如 MFC 中象CListBox::InserString 函数),但适用于所有窗口类型的控件类成员函数并不发送消息,而是调用 Win32函数。
15,Windows 通用控件:Win95引进的象[进度指示器],[滑杆条],[微调按钮控件],[列表控件]和[树状控件]。这些控件的代码在 Windows 的 COMCTL32.DLL 文件中,其中包括了每个控件的窗口过程函数,及每个控件的注册窗口类的代码,这些注册代码在 DLL 加载时候被调用。当应用程序初始化对话框时,将使用对话框资源中符号化的类名,来连接到 DLL 里的窗口过程函数上。这样应用程序就有了控件的窗口,但代码实际上在 DLL 里。
除了 ActiveX 控件,大多数控件都是用这种方法实现的。
16,WM_NOTIFY
idCtrl = (int) wParam; //控件ID
pnmh = (LPNMHDR) lParam; //指向 NMHDR 结构指针,该结构由控件管理。
说明:
1)Sent by a common control to its parent window when an event has occurred in the control or the control requires some kind of information.
2)Not all controls will send WM_NOTIFY messages. In particular, the standard Windows controls (edit controls, combo boxes, list boxes, buttons, scroll bars, and static controls) do not send WM_NOTIFY messages.
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:csdn面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号