DUI-模态对话框的实现

模态对话框要求自己实现自己的消息循环,当然,建议它还是处于主线程中,所以最好是由它再调用主线程的消息循环函数,此时主线程自身的消息循环函数被阻塞,等待模板对话框的消息循环函数退出

参考代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

INT_PTR XX::DoModal(LPCWSTR lpszXmlId, HWND hParent/*=NULL*/bool bShadow/*=false*/, DM::CRect rect/* = NULL*/)

{

    BOOL bEnableParent = FALSE;

    if(NULL == hParent)

    {

        hParent = GetActiveWnd();

    }

    

    if (hParent && hParent != ::GetDesktopWindow() && ::IsWindowEnabled(hParent))

    {

        ::EnableWindow(hParent, FALSE);

        bEnableParent = TRUE;

    }

    if(!DM_CreateWindow(lpszXmlId, rect.left,rect.top,rect.Width(),rect.Height(), hParent, bShadow))

    {

        ::EnableWindow(hParent, TRUE);

        return 0; // 此处失败了

    }

    GetClientRect(rect);

    if (!rect.IsRectEmpty())

    {

        CenterWindow();

    }

    SendMessage(WM_INITDIALOG);//发送init消息

    if(GetExStyle()&WS_EX_TOOLWINDOW)

    {

        ::ShowWindow(m_hWnd,SW_SHOWNOACTIVATE);

    }

    else

    {

        ::ShowWindow(m_hWnd,SW_SHOWNORMAL);

    }

    

    ::SetWindowPos(m_hWnd, /*HWND_TOP*/HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);

         Run(m_hWnd,true);// 消息循环

    if (bEnableParent)

    {

        ::EnableWindow(hParent, TRUE);

    }

    return m_nRetCode;

}

void  XX::EndDialog( INT_PTR nResult )

{

    m_nRetCode = nResult;

    PostMessage(WM_QUIT);

}

http://hgy413.com/1635.html

时间: 2024-11-05 19:37:12

DUI-模态对话框的实现的相关文章

MFC中模态对话框和非模态对话框的区别

在MFC中有模态对话框和非模态对话框,那这两种有什么区别呢.又都是用于什么场合呢. 首先,要弄清楚2种对话框是如何创建的. 然后要弄清楚2种对话框有什么区别,可能从表面上看,模态会阻塞主对话框,可原理是什么呢. 还有就是,当有模态和非模态对话框没有关闭的时候,在任务栏中,关闭主窗体,会有什么样的效果呢. 虽然,现在有很多优秀的开源库比如QT,DUI等,但是这些原理,我们还是要了解的,不能停留在用的层面.有人说MFC过时了,有人说,现在有很多开源库,知道怎么用就可以了.但是现在界面要的交互好,界面

QT笔记之模态对话框及非模态对话框

模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭.对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互. 在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框:另一种是使用show()方法

JavaScript内容梳理 示例之模态对话框 示例之全选和反选以及取消 示例之后台管理左侧菜单

1 <!DOCTYPE html> 2 <!--示例之模态对话框--> 3 <html lang="en"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>Title</title> 7 <style> 8 .hide{ 9 display: none; 10 } 11 .c1{ 12 position: fixed; 13 lef

bootstrap添加多个模态对话框支持

bootstrap添加多个模态对话框支持 (2015-03-04 21:05:35) 转载▼ 标签: 房产   因为项目需要,在页面交互上要弹出多个dialog窗口,而bootstrap的modal支持弹出dialog窗口,但是如果在此基础上,会出现遮罩层越来越多,背景越来越黑的情况. 代码具体如下: (function(){ modal = {}; modal.openDialog = function(url, title, width, height, id){}; modal.close

QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg(this); dlg.exec(); 如果不加this,则会在任务管理器里面产生一个新的EXE. 3.如果对话框的标题是自定义,不想使用系统的标题,这时候需要在代码中加入: setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint ); setAttr

QDialog 模态对话框与事件循环

起源 qtcn中文论坛中有网友问到: 假设程序正常运行时,只有一个简单的窗体A,此时只有一个GUI主线程,在这个主线程中有一个事件循环处理窗体上的事件.当此程序运行到某阶段时,弹出一个模态窗体B(书上说模态窗体是有其自己的事件循环的),此时模态窗体B是否会有一个对应的子线程处理其事件循环? 这儿其实有两个问题: 模态对话框 和 事件循环 没有必然联系 事件循环 和 子线程 没有必然联系 题外: 如果进一步呢?其实我们还可以说: 模态对话框 和 QDialog 没必要联系 QDialog 对话框

大三在校生的传智120天的1200小时.net(十四) 关于easyUI的模态对话框

会用easyUI的模态对话框会是我们的开发更加简洁,只需下载这个插件,把需要的文件拖到项目中,下面展示一个easyUI的模态对话框,以及使用方法和属性.这里是一个常用功能小展示,试试上easyUI自带的说明文档非常全面,*****学会查看文档很重要,看几次就会熟练***** <script type="text/javascript" src="../Script/jquery-1.8.3.js"></script> <script s

MFC中模态对话框和非模态对话框

MFC的对话框非为两种,一种叫模态对话框(Modal  Dialog  Box,又叫做模式对话框),一种叫做非模式对话框(Modaless Dialog Box,又叫无模式对话框).两者的区别在于当对话框打开的时候,是否允许用户进行其他对象的操作. 一.模态对话框 模态对话框指,当用户需要对该对话框之外的其他对话框或者模块进行操作时,必须该对话框关闭,才能去编辑其他对话框或者模块. 创建如下: //创建模态对话框 CModalDialog modalDialog; modalDialog.DoM

Qt的模态对话框和非模态对话框 经常使用setAttribute (Qt::WA_DeleteOnClose)

模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户将无法操作其他的窗口.非模态相反,用户仍然可以操作其他的窗口,包括该子对话框的父对话框. 如果从线程角度来讲,模态对话框实际上是线程阻塞的,也就是子对话框是一个线程,但是在创建这个子线程之后,父窗口就阻塞了:模态对话框则不是阻塞型的线程模型,父子线程可以并行运行. 和所有流行的图形类库一样,Qt也提供了创建模态和非模态对话框的机制. 在Qt中创建模态对话框,主要用到了QDialog的exec函数: SonDialo

MFC模态与非模态对话框

1.简述 1.1模态对话框(model dialog box) 当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务. 1.2非模态对话框(modeless dialog box) 当非模态对话框显示时,运行转而执行程序中的其他任务,而不用关闭这个对话框. 2.代码 2.1模态对话框的实现 void CModelCtrDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 TestDialog1 dlg; dlg