精华内容
下载资源
问答
  • //弹出模态对话框 有阻塞功能可以顺利弹出 //首先给要弹出的窗口添加一个类,会自动生成该窗口的.cpp和.h文件 //1.要弹出对话框,首先要知道对话框属于哪个类,属于的类就是我们取的IDD后的名称,在类视图中查看...

    模态对话框:当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。(比如:word中的“另存为”)

    非模态对话框:它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。

    通过两个按钮分别弹出:

    //模态对话框按钮是点击事件
    
    
    void CMFC2Dlg::OnBnClickedButton1()
    {
    	// TODO: 在此添加控件通知处理程序代码
    
    	//弹出模态对话框  有阻塞功能可以顺利弹出
    	//首先给要弹出的窗口添加一个类,会自动生成该窗口的.cpp和.h文件
    	//1.要弹出对话框,首先要知道对话框属于哪个类,属于的类就是我们取的IDD后的名称,在类视图中查看类
    	/*2.要先引用该类的头文件,在MFC中引用类的头文件时,
    	    如果起的类名时以大C开头,引用头文件的时候不要写大C,直接写大C后面的名称.h,
    		但是后面引用类名时还是要加上大C
    	*/
    
    	CDIALOG1 dlg;//用CDIALOG1类声明出来一个对象,命名为dlg
    
    	dlg.DoModal();//以模态方式进行弹出()
    	/*模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。
    	  对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。
    	*/
    
    
    
    }
    
    
    void CMFC2Dlg::OnBnClickedButton2()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	//非模态对话框  无阻塞功能,弹出闪现;
    	//解决办法:把CSHOW cshow;放在成员变量里,即放在主窗口Dlg.h文件中的private下,注意要在头文件中引用该类的头文件
    	//CSHOW cshow;
    
    	//cshow.Create(IDD_SHOW);//创建窗口只能创建一次,多次会崩掉
    	                         //解决办法:把改行代码放到初始化函数中去,即放在CMFC2Dlg::OnInitDialog里
    
    	cshow.ShowWindow(SW_SHOWNORMAL);
    
    }
    
    展开全文
  • 一、写数据库导致AutoCAD异常问题默认状态下AutoCAD2004是多文档应用程序,系统变量SDI=0, acdbHostApplicationServices()->... 而使用非模态对话框时,对话框资源不属于任何一个文档,如果修改往数据库(写操作),就

    一、写数据库导致AutoCAD异常问题

    默认状态下AutoCAD2004是多文档应用程序,系统变量SDI=0,

    acdbHostApplicationServices()->workingDatabase();

    不是指一个文档,而是多个文档.当使用模态对话框时,这个对话框资源属于唯一的一个文档,所以不会产生错误;
    而使用非模态对话框时,对话框资源不属于任何一个文档,如果修改往数据库(写操作),就会导致AutoCAD异常.

    解决的方法是:

    使用非模态对话框时要显式地管理文档的状态,当然,如果不需要多文档,则将系统变量SDI设为1也能解决非模态对话框的问题,
    一般以写的方式操作实体时,要将当前文档锁定,操作结束后,解锁文档,而以读的方式打开对象,不需要锁定文档:

    acDocManager->lockDocument(acDocManager->curDocument(), AcAp::kWrite, NULL, NULL, true
    );

    这个函数的使用是锁定文档以便访问它们的资源,这些资源包括与文档相关联的的数据库对象(AcDbDatabases objects associated with a document),以及这些数据库中的实体对象(AcDbObject objects),还有数据库常驻系统变量(all AcDbDatabase resident system variables).
    它还包括了基于系统变量的所有文档(all document based system variables),及与文档关联的事务管理器(the Transaction Manager associated with a document).文档在以AcDb::kForRead打开一个AcDbObject对象时不需要锁定,读取系统变量时也不需要锁定文档.
    ...
    acDocManager->unlockDocument(acDocManager->curDocument());


    示例:

    void
    lockDocument_Test()
    {
       AcGePoint3d start(0.0,0.0,0.0), end(10.0,10.0,0.0);
       AcDbLine *line = new
    AcDbLine(start, end);
       AcDbBlockTable *pBlockTable;

       // 锁定当前文档
       acDocManager->lockDocument(acDocManager->curDocument(), AcAp::kWrite, NULL, NULL, true);

       acDocManager->curDocument()->database()->getBlockTable(pBlockTable, AcDb::kForRead);
       //acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead);
       AcDbBlockTableRecord *pBlockTableRec;
       pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRec, AcDb::kForWrite);
       pBlockTable->close();
       AcDbObjectId objId;
       pBlockTableRec->appendAcDbEntity(objId, line);
       line->close();
       pBlockTableRec->close();
       // 运行完解锁文档
       acDocManager->unlockDocument(acDocManager->curDocument());
     

    二、刷新显示屏幕问题

    有时在程序中修改了实体,比如删除了实体,但在屏幕上没有及时地刷新,这时执行屏幕选取实体函数acedSSGet(),

    仍然能够选中原来的实体,明明它们已经删除了,这时怎么办呢,考虑用acedCommand(RTSTR, "REGEN", RTNONE);

    虽然也可以,但它会重新生成整个图形数据库,如果数据量很大,那么重生成的速度会很慢,

    这样就不可能在程序的一段循环语句中修改每一个实体后都对数据库重生成,那程序运行的时间大部分都花在刷新数据库上了,

    显然这不合理.

    解决方法:

       // 刷新显示屏幕
       actrTransactionManager->flushGraphics();
       acedUpdateDisplay();

    展开全文
  • ObjectARX中使用非模态对话框遇到的两个问题及解决办法 一、写数据库导致AutoCAD异常问题 默认状态下AutoCAD2004是多文档应用程序,系统变量SDI=0, acdbHostApplicationServices()->workingDatabase(); 不是指...
     
    

    ObjectARX中使用非模态对话框遇到的两个问题及解决办法

    一、写数据库导致AutoCAD异常问题

    默认状态下AutoCAD2004是多文档应用程序,系统变量SDI=0,

    acdbHostApplicationServices()->workingDatabase();

    不是指一个文档,而是多个文档.当使用模态对话框时,这个对话框资源属于唯一的一个文档,所以不会产生错误;
    而使用非模态对话框时,对话框资源不属于任何一个文档,如果修改往数据库(写操作),就会导致AutoCAD异常.

    解决的方法是:

    使用非模态对话框时要显式地管理文档的状态,当然,如果不需要多文档,则将系统变量SDI设为1也能解决非模态对话框的问题,
    一般以写的方式操作实体时,要将当前文档锁定,操作结束后,解锁文档,而以读的方式打开对象,不需要锁定文档:

    acDocManager->lockDocument(acDocManager->curDocument(), AcAp::kWrite, NULL, NULL, true);

    这个函数的使用是锁定文档以便访问它们的资源,这些资源包括与文档相关联的的数据库对象(AcDbDatabases objects associated with a document),以及这些数据库中的实体对象(AcDbObject objects),还有数据库常驻系统变量(all AcDbDatabase resident system variables).
    它还包括了基于系统变量的所有文档(all document based system variables),及与文档关联的事务管理器(the Transaction Manager associated with a document).文档在以AcDb::kForRead打开一个AcDbObject对象时不需要锁定,读取系统变量时也不需要锁定文档.
    ...
    acDocManager->unlockDocument(acDocManager->curDocument());


    示例:

    void lockDocument_Test()
    {
       AcGePoint3d start(0.0,0.0,0.0), end(10.0,10.0,0.0);
       AcDbLine *line = new AcDbLine(start, end);
       AcDbBlockTable *pBlockTable;

       // 锁定当前文档
       acDocManager->lockDocument(acDocManager->curDocument(), AcAp::kWrite, NULL, NULL, true);

       acDocManager->curDocument()->database()->getBlockTable(pBlockTable, AcDb::kForRead);
       //acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead);
       AcDbBlockTableRecord *pBlockTableRec;
       pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRec, AcDb::kForWrite);
       pBlockTable->close();
       AcDbObjectId objId;
       pBlockTableRec->appendAcDbEntity(objId, line);
       line->close();
       pBlockTableRec->close();
       // 运行完解锁文档
       acDocManager->unlockDocument(acDocManager->curDocument());

    二、刷新显示屏幕问题

    有时在程序中修改了实体,比如删除了实体,但在屏幕上没有及时地刷新,这时执行屏幕选取实体函数acedSSGet(),

    仍然能够选中原来的实体,明明它们已经删除了,这时怎么办呢,考虑用acedCommand(RTSTR, "REGEN", RTNONE);

    虽然也可以,但它会重新生成整个图形数据库,如果数据量很大,那么重生成的速度会很慢,

    这样就不可能在程序的一段循环语句中修改每一个实体后都对数据库重生成,那程序运行的时间大部分都花在刷新数据库上了,

    显然这不合理.

    解决方法:

       // 刷新显示屏幕
       actrTransactionManager->flushGraphics();
       acedUpdateDisplay();

     

    展开全文
  • 模式对话框对话框可以分为模式对话框模式对话框两种。模式对话框是指用户只能在当前的窗体中进行操作,在该窗体没有关闭之前不能切换到其它的窗体。...​ 一般情况下,用于确认信息的操作对话框属于...

    模式对话框

    ​ 对话框可以分为模式对话框和非模式对话框两种。模式对话框是指用户只能在当前的窗体中进行操作,在该窗体没有关闭之前不能切换到其它的窗体。非模式对话框是指当前的所操作的窗体可以切换。

    ​ 简单来说,屏蔽同一应用程序中其它窗口事件响应的对话框,就叫做模式对话框。

    ​ 一般情况下,用于确认信息的操作对话框属于模式对话框。如打开文件对话框就是典型的模式对话框,而常见的查找和替换便是非模式对话框。

    ​ 在Qt中只要是继承至QDailog的窗口类都可以以模式对话框的方式来显示。

    1 QDailog与QWidget对比

              

     

      QWidget

       1、指定父窗口的时候,不调用QWidget::show(),嵌套在父窗口中显示,与其它窗口共用消息循环。

    2、指定父窗口的时候,调用QWidget::show(),仍然嵌套在父窗口中显示,与其它窗口共用消息循环。

       3、不指定父窗口的时候,调用QWidget::show(),以顶级窗口方式显示,与其它窗口共用消息循环。

       4、不能以模态窗口方式显示,没有exe()函数。

      QDailog继承至QWidget

       1、指定父窗口的时候,不调用QWidget::show(),不显示窗口。

       2、指定父窗口的时候,调用QWidget::show(),以顶级窗口方式显示,与其它窗口共用消息循环。

    3、不指定父窗口的时候,调用QWidget::show(),以顶级窗口方式显示,与其它窗口共用消息循环。

       4、模态窗口显示,,调用QDailog::exec(),屏蔽其它窗口消息循环。

    注意:简单来看,如果想以模式窗口显示,继承QDailog,调用QDailog::exec()即可。

    2 触发一个模式对话框

    ​ 例如:

    1. #include "widget.h"
    2. #include <QPushButton>
    3. #include <QDialog>
    4. Widget::Widget(QWidget *parent) : QWidget(parent)
    5. {
    6. QPushButton * pb = new QPushButton("dialog", this);
    7. connect(pb, SIGNAL(clicked()), this, SLOT(showDialog));
    8. }
    9. void Widget::showDialog()
    10. {
    11. QDialog dialog;
    12. dialog.exec(); // 消息循环,阻塞等待模式窗口关闭。
    13. }

    3 模式窗口exec返回值

    1. [virtual slot] int QDialog::exec()

    ​ 这个函数是模式窗口的关键,它会屏蔽原先的QApplication::exec的消息循环接收消息,所有的消息都被它接收走,直到它返回,其返回值为1时代表QDialog::Accepted,为0时代表QDialog::Rejected。

    • 如果想返回QDialog::Accepted,那么只需调用一下QDialog::accept槽函数

    1. [virtual slot] void QDialog::accept()
    • 如果想返回QDialog::Rejected,那么只需调用一下QDialog::reject槽函数

    1. [virtual slot] void QDialog::reject()
    • 如果想返回其它自定义的值,那么只需要调用一下QDialog::done槽函数

    1. [virtual slot] void QDialog::done(int r) //r参数来指定exec的返回值

    来看一个复杂一点的例子:

    1. #include "widget.h"
    2. #include <QPushButton>
    3. #include <QHBoxLayout>
    4. #include <QDialog>
    5. #include <QDebug>
    6. Widget::Widget(QWidget *parent)
    7.   : QWidget(parent)
    8. {
    9.    initMainWidget();
    10.    initDialog();
    11. }
    12. void Widget::initMainWidget()
    13. {
    14.    QHBoxLayout * hBox = new QHBoxLayout(this);
    15.    QPushButton * pb  = new QPushButton("pb", this);
    16.    hBox->addWidget(pb);
    17.    this->setLayout(hBox);
    18.    connect(pb, SIGNAL(clicked()), this, SLOT(showDailog())); //按钮触发调用槽函数来显示对话框.
    19. }
    20. void Widget::initDialog()
    21. {
    22.    QPushButton * pbEnter  = new QPushButton("enter", this);
    23.    QPushButton * pbCancel  = new QPushButton("cancel", this);
    24.    QHBoxLayout * hBox = new QHBoxLayout(this);
    25.    _dialog = new QDialog(this);
    26.    _dialog->setLayout(hBox);
    27.    hBox->addWidget(pb_enter);
    28.    hBox->addWidget(pb_cancel);
    29.    connect(pbEnter, SIGNAL(clicked()),  _dialog, SLOT(accept()));
    30.    connect(pbCancel, SIGNAL(clicked()), _dialog, SLOT(reject()));
    31. }
    32. void Widget::showDailog()
    33. {
    34.    int ret = _dialog->exec(); //使用模式窗口显示
    35.    qDebug() << "show Dialog return value " << ret << endl;
    36. }
    37. Widget::~Widget()
    38. {
    39. }

    4 常见Dialog应用

    ​ 常见的继承至QDialog的派生类,QFileDialog,QFontDialog,QColorDialog,QMessageBox,它们有一个共同特点,都提供了快速创建模式窗口的静态函数。

    4.1 QFileDialog文件浏览框

    • 打开文件浏览框,用户选择完成后,返回对应的文件名

    1. [static] QString QFileDialog::getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options())
    2. /*
    3. *QWidget *parent 指定父窗口
    4. *const QString &caption 指定窗口标题
    5. *const QString &dir 指定打开的路径,模式情况下是当前路径
    6. *const QString &filter 指定文件的过滤器
    7. */
    • 保存文件浏览框,用户选择完成后,返回对应的文件名

    1. [static] QString QFileDialog::getSaveFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options())
    2.  /*
    3. *QWidget *parent 指定父窗口
    4. *const QString &caption 指定窗口标题
    5. *const QString &dir 指定打开的路径,模式情况下是当前路径
    6. *const QString &filter 指定文件的过滤器
    7. */

    例如:

    widget.h

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include <QWidget>
    4. class Widget : public QWidget
    5. {
    6.    Q_OBJECT
    7. public:
    8.    Widget(QWidget *parent = 0);
    9.    ~Widget();
    10. public slots:
    11.    void showFileDailog();
    12.    void showSaveFileDialog();
    13. private:
    14.    QString _filename;
    15. };
    16. #endif // WIDGET_H

    widget.cpp

    1. #include "widget.h"
    2. #include <QHBoxLayout>
    3. #include <QPushButton>
    4. #include <QFileDialog>
    5. #include <QDebug>
    6. Widget::Widget(QWidget *parent)
    7.   : QWidget(parent)
    8. {
    9.    QHBoxLayout * hBox = new QHBoxLayout(this);
    10.    QPushButton * pb  = new QPushButton("showFileDailog", this);
    11.    QPushButton * pb1  = new QPushButton("showSaveFileDailog", this);
    12.    hBox->addWidget(pb);
    13.    hBox->addWidget(pb1);
    14.    this->setLayout(hBox);
    15.    connect(pb, SIGNAL(clicked()), this, SLOT(showFileDailog())); //按钮触发调用槽函数来显示对话框.
    16.    connect(pb1, SIGNAL(clicked()), this, SLOT(showSaveFileDialog())); //按钮触发调用槽函数来显示对话框.
    17. }
    18. void Widget::showSaveFileDialog()
    19. {
    20.    _filename = QFileDialog::getSaveFileName(this, "save", _filename, "Image(*.png *.jpg)");
    21.    qDebug() << "get save filename :" << _filename << endl;
    22. }
    23. void Widget::showFileDailog()
    24. {
    25.   _filename = QFileDialog::getOpenFileName(this, "open", _filename, "Image(*.png *.jpg)");
    26.   qDebug() << "filename :" << _filename << endl;
    27. }

    4.2 QFontDialog字体对话框

    ​ QFontDialog字体对话框用来获取一个字体格式,那么在这之前,我们需要了解一下什么是字体。

    4.2.1 QFont类

    ​ Qt中的字体类为QFont,没有继承任何Qt基类,我们知道字是有大小、字体格式,那这些字体格式就保存在QFont对象中。

    常用函数有:

    1. QString QFont::family() const; //获取字体格式
    2. int QFont::pointSize() const;  ///获取字体大小
    3. void QFont::setFamily(const QString &family); //设置字体格式
    4. void QFont::setPointSize(int pointSize); //设置字体大小

    4.2.2 获取系统支持的所有字体

    1. QStringList QFontDatabase::families(WritingSystem writingSystem = Any) const

    例如:

    1. QFontDatabase fontDb;
    2. qDebug() << fontDb.families() << endl;

    4.2.3 QWidget的QFont对象

    ​ 在QWidget窗口上显示字也需要一个QFont成员对象,用来记录该窗口上显示文本信息时所有使用的字体格式。

    • QWidget获取字体对象

    1. const QFont & QWidget::font() const
    • QWidget设置窗口对应字体

    1. void QWidget::setFont(const QFont &)

    例如, 改变Widget对象的字体格式

    1. #include "widget.h"
    2. #include <QLabel>
    3. #include <QDebug>
    4. Widget::Widget(QWidget *parent)
    5.   : QWidget(parent)
    6. {
    7.    QLabel* label = new QLabel("label", this);
    8.    QFont font = this->font();
    9.    font.setFamily("Verdana"); //将Widget对象的字体格式改为Verdana
    10.    font.set
    11.    this->setFont(font);
    12. }

    4.2.4 使用QFontDialog获取字体

    • 字体对话框可以用来选择一种字体,返回对应的QFont对象,常用静态函数如下:

    1. [static] QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget *parent = Q_NULLPTR, const QString &title = QString(), FontDialogOptions options = FontDialogOptions());
    2. /*
    3. *bool *ok 通过这个值来判断获取字体是否成功
    4. *QWidget *parent 指定父窗口
    5. *const QString &title 指定标题
    6. */

    例如:

    1. #include "widget.h"
    2. #include <QFontDialog>
    3. #include <QHBoxLayout>
    4. #include <QPushButton>
    5. #include <QDebug>
    6. #include <QLabel>
    7. Widget::Widget(QWidget *parent)
    8.   : QWidget(parent)
    9. {
    10.    QHBoxLayout * hBox = new QHBoxLayout(this);
    11.    QPushButton * pb  = new QPushButton("showFontDailog", this);
    12.    QLabel * label = new QLabel("label", this);
    13.    hBox->addWidget(pb);
    14.    hBox->addWidget(label);
    15.    this->setLayout(hBox);
    16.    connect(pb, SIGNAL(clicked()), this, SLOT(showFontDailog())); //按钮触发调用槽函数来显示对话框.
    17. }
    18. void Widget::showFontDailog()
    19. {
    20.    bool ok;
    21.    QFont initFont = this->font();
    22.    QFont font = QFontDialog::getFont(&ok, initFont, this);
    23.    if(ok)
    24.   {
    25.        qDebug() << font << endl;
    26.        this->setFont(font);
    27.   }
    28. }

    4.3 QColorDialog颜色对话框

    • QColor类

      QColor用来表示颜色,没有继承任何Qt基类,我们知道界面必然涉及到颜色相关的属性,那这些属性值都是一个个QColor对象来保存。

    • QPalette类

      QPalette调色板,由于QWidget需要多个QColor对象来保存窗口丰富的色彩,Qt又把所有不同用处的颜色封装到QPalette类中。可以通过QWidget::palette函数来获取对应窗口的调色板。

      1. const QPalette & QWidget::palette() const;

      然后再通过QPalette::setColor函数来设置不同用途的颜色。

      1. void QPalette::setColor(ColorRole role, const QColor &color);
      2. /*
      3. * ColorRole role枚举类型,其值可以是:
      4. * QPalette::Window 背景色
      5. * QPalette::WindowText 字体颜色
      6. * 等等
      7. */

      例如:

      1. #include "widget.h"
      2. #include <QLabel>
      3. #include <QDebug>
      4. Widget::Widget(QWidget *parent)
      5.   : QWidget(parent)
      6. {
      7.    new QLabel("label", this);
      8.    QPalette palette = this->palette();
      9.    palette.setColor(QPalette::WindowText, QColor(Qt::red));
      10.    this->setPalette(palette);
      11. }

    • QColorDialog常用静态函数getColor,用来获取一个QColor对象

      1. #include "widget.h"
      2. #include <QHBoxLayout>
      3. #include <QPushButton>
      4. #include <QDebug>
      5. #include <QLabel>
      6. #include <QColorDialog>
      7. Widget::Widget(QWidget *parent)
      8.   : QWidget(parent)
      9. {
      10.    QHBoxLayout * hBox = new QHBoxLayout(this);
      11.    QPushButton * pb  = new QPushButton("showColorDailog", this);
      12.    QLabel * label = new QLabel("label", this);
      13.    hBox->addWidget(pb);
      14.    hBox->addWidget(label);
      15.    this->setLayout(hBox);
      16.    connect(pb, SIGNAL(clicked()), this, SLOT(showColorDailog())); //按钮触发调用槽函数来显示对话框.
      17. }
      18. void Widget::showColorDailog()
      19. {
      20.    QPalette palette = this->palette();
      21.    QColor initColor = palette.color(QPalette::Background);
      22.    QColor color = QColorDialog::getColor(initColor, this, "getcolor");
      23.    if(color.isValid())
      24.   {
      25.        palette.setColor(QPalette::Background, color);
      26.        qDebug() << color << endl;
      27.        this->setPalette(palette);
      28.   }
      29. }

      4.4 QMessageBox消息对话框

      常用静态函数:

    • 警告对话框

      1. [static] StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton);
      2. /*
      3. * QWidget *parent 指定父窗口
      4. * const QString &title 窗口标题
      5. * const QString &text 警告内容
      6. */
    • 信息对话框

      1. [static] StandardButton QMessageBox::information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton);
      2. /*
      3. * QWidget *parent 指定父窗口
      4. * const QString &title 窗口标题
      5. * const QString &text 信息内容
      6. */
      7.  

    • 疑问对话框

      1. [static] StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton);
      2. /*
      3. * QWidget *parent 指定父窗口
      4. * const QString &title 窗口标题
      5. * const QString &text 疑问内容
      6. */
    展开全文
  • 前面讲了模态对话框和非模态对话框,本节来将一种特殊的对话框——属性页对话框。 属性页对话框的分类  属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面...
  • 非模态对话框 在Init中new这个对话框,在Close时delete 和主窗口同级的窗口 2.调用CreatrWindow后,发送WM_CREATE消息,之后,OnInitDiadlg()被调用。 3.窗口类里面维护了窗口内核对象,只有当该窗口对象进行Create或...
  • 用MFC实现“查找/替换”对话框

    千次阅读 2014-07-20 10:40:40
    “查找/替换”对话框属于非模态对话框
  • 对话框过程

    2016-02-21 20:18:54
    发送给对话框(模态和非模态)的消息是由程序中的对话框过程进行处理的。这个过程与真正的窗口过程看起来很像,但其实是不一样的,对话框的窗口过程属于Windows,对于许多消息,这个窗口过程会调用对话框过程。 BOOL...
  • Qt-Day02-学习笔记

    2021-01-13 17:34:19
    2. 模态对话框,模式对话框,以及半模式对话框3. QLabel4. QPushButton, QMenu5. 1. QWidget,QDialog,QMainWindow的异同点? QWidget,QDialog,QMainWindow都是继承于QObject; QWidget类是所有的用户界面对象的基类;...
  • push与present使用

    2019-09-26 19:01:24
    模态视图和非模态都是子视图,属于App的主要窗口,区别是: “一个模态窗口创建了一个使主窗口被禁用的模式,但仍然保持主窗口可见。用户必须先与模态窗口交换才能返回主应用。”-维基百科 我感觉就像弹出一个...
  • 模态弹窗是较重的提示方式,...而非模态弹框属于轻量级的提示方式,其优点是不强制用户进行交互操作,或者用户依然可以在页面进行其他操作。弹框出现一段时间后会自动消失,所以但不利于承载过多文字信息。非模态弹...
  • // 设置为模态对话框,不能操作主窗体。如果这里用JFrame就无法实现该功能了。 this.setLocation(jf.getX() + 50, jf.getY() + 50); this.setTitle("添加用户信息"); this.setLayout(new GridLayout(4, 1)...
  • Visual C++ 2008入门经典--详细书签版

    热门讨论 2013-02-02 16:07:15
    CruiseYoung提供的带有详细书签的电子书籍目录 ... 特别说明:该版本是目前网络上最全的版本:修正了268-367页缺页的问题。 Visual C++ 2008入门经典 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2008 ...
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... 特别说明:该版本是目前网络上最全的版本:修正了268-367页缺页的问题。 该资料是《Visual C++ 2008入门经典》的源代码及课后练习答案 对应的书籍资料见: ...
  • Visual C++ 2005 入门经典 详细书签版

    热门讨论 2013-02-02 16:39:43
    CruiseYoung提供的带有详细书签的电子书籍目录 ... Visual C++ 2005入门经典 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2005 原出版社: Wiley 作者: (美)Ivor Horton 译者: 李颂华 康会光 ...
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... 该资料是《Visual C++ 2005入门经典》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2005入门经典 ...原书名: Ivor Horton's Beginning Visual C++ 2005 ...
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... Visual C++ 2010入门经典(第5版) 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2010 原出版社: Wrox 作者: (美)Ivor Horton [作译者介绍] ...
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... 该资料是《Visual C++ 2010入门经典(第5版)》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2010入门经典(第5版) ...原书名: Ivor Horton's Beginning ...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    什么是模态对话框? 67.阐述MVC的概念 68.GUI布局管理器的使用,FlowLayout,BorderLayout,GridBagLayout 69.如何构造一棵树?选择树的一个节点时,如何得到这个节点? 70.向编辑框中输入字符时,如何控制只输入...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    5.7 秘诀:演示一个自定义模态信息视图 153 5.8 秘诀:选项卡栏 155 5.9 秘诀:记住选项卡状态 157 5.10 补充点:Interface Builder和选项卡栏控制器 160 5.11 小结 161 第6章 组合视图和动画 162 6.1 视图...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

属于非模态对话框