Windows 窗体显示的“模式方式”与“非模式方式”
Windows 窗体显示的“模式方式”与“非模式方式”
一、Windows 窗体的显示模式
在Windows中,显示存在作为窗体和对话框要么是有模式的,要么是无模式的。
“模式”窗体或对话框必须关闭或隐藏,然后您才能继续使用应用程序的其余部分。当我们要显示重要消息的对话框应始终是有模式的。例如 MessageBox 是一个可供您使用的有模式的窗体。
“无模式”窗体让您在此窗体与另一窗体之间变换焦点,而不必关闭初始窗体。 用户在该窗体显示的同时可继续在任何应用程序的其他位置工作。
作为编程,执行代码是一条一条向下执行的,“模式”窗体或对话框,是严格执行这一规律,查找问题较容易。“无模式”窗体,执行代码可以跨越出的现对话框(或模块),进入另一窗体或下一段代码。因此,无模式窗体的编程难度更大,因为用户访问这些窗体的顺序可能无法预知。不论用户执行什么操作,都必须使该应用程序的状态保持一致。 工具窗口经常以无模式方式显示。
通俗理解,“模式”窗体就是一个“栈”,由父窗口,进入子窗口后,退出子窗口,才能返回父窗口。而非“模式”窗口,就是一个“梳子”每个窗口是并列,随时进入指定窗口。
从代码的执行上,“模式”窗体有暂停键,出现代码任务末完成就暂停。需非“模式”窗体无暂停键,出现代码任务末完成就越过,执行后续的代码。
二、sPageControl创建的窗口,就得使用非“模式”方式
Show()
以非模式方法显示新的窗体并且立即返回,并不会在当前激活的窗体和新窗体之间创建任何关系;这意味着现存的窗体可以被关闭,而新窗体仍然继续显示。
三、“模式”
Showmodal()
窗口用Showmodal函数显示出来后,程序不会继续自己执行, 而是根据你对这个窗口的操作来执行, ,只有关闭了这个窗口后才会执行。
Form.ShowModal() 时相当于执行了一个 Call,主窗体是能够处理下一条消息,其它的窗体不接受用户的操作,ShowModal() 以下的代码在 ShowModal() 出的窗体被关闭前是不会被执行的,但并不影响父窗体的消息循环。
一个窗口用Show过程显示出来后,代码一样往下执行的,即程序会继续执行。
四、举例
ShowModal 出来的对话框必须关掉才能处理其他窗体.也就是当前焦点不能转移到其他的窗体上,除非关掉。
Show 出来的对话框则可以将当前焦点转移到其他界面上。
Show出来的一般是子窗体。通常对话框叫非模式对话框,ShowModal 出来的是主窗体,叫模式对话框.。