zoukankan      html  css  js  c++  java
  • 论模态与拟模态框

    什么是模态弹出,是指某个函数会弹出显示并要求用户响应操作才会返回的调用。例如有快捷菜单的弹出,模态对话框的弹出,消息提示框的弹出等等这些,一直等待着用户输入的界面元素,输入焦点会一直挂着,直到用户响应,结束了模态调用过程。因为此时界面线程是阻塞在模态调用过程中,主消息循环不会执行到,而阻塞在模态自身的消息循环中。因此被称作模态。

    那么什么又被称作拟模态框,很简单,只是使用户觉得这是个模态对话。而实际却只是普通窗口或非模态对话框。有两种可行方式模拟,一个种仿模态过程,在在弹出显示的调用中也实现自身消息循环,不过这样也要求你实现相应结束消息循环的接口。无论是模态对话还是弹出菜单也好,我们可以看到API都有EndDialog或EndMenu两个函数,用以结束自身的消息循环。另一种是简单较常用的方法,就是在弹出拟模态窗口时,把主窗口给禁用这样用户的输入焦点就不可能转到主窗口上,而通过拟模态操作完毕才激活主窗口。这样也就实现了模拟模态对话。


    下面我们该讨论的就是,出现这两种东西各自有什么优劣呢?很显然的,拟模太若是把主窗口给禁用了,在多窗口界面逻辑复杂的程序中容易出现界面被锁不可操作的问题,设计者必须考虑周全禁用与激活的逻辑。而使用真实模态对话没有这种事情。但既然有了拟模态,那肯定必然是有其用处的,因为使用模态的话,每次都弹出都需要重新创建对话框,完成对话并销毁对话框,如果这类对话很频繁,于是人们就想到找出一种优化方案以节省系统开销,所以拟拟模态窗出现了。

    是的,创建了拟模态窗只需要一次,后续只直弹出显示即可,省去系统为我们做过多不必要的事情。因为他是普通窗口罢,所以不会阻塞界面主消息循环。

  • 相关阅读:
    学习vim命令:“:w !sudo tee %”
    mac下安装和卸载软件
    很好用的在线markdown编辑器
    doc2vec 利用gensim 生成文档向量
    C语言经典算法100例-024-求数列的前20 项和,2/1,3/2,5/3,8/5...
    C语言经典算法100例-023-打印菱形
    C语言经典算法100例-022-乒乓球比赛名单问题
    C语言经典算法100例-021-猴子吃桃问题
    C语言经典算法100例-020-小球自由下落问题
    C语言经典算法100例-019-求完数
  • 原文地址:https://www.cnblogs.com/qianwen36/p/3657431.html
Copyright © 2011-2022 走看看