精华内容
下载资源
问答
  • MFC中对话框有两种形式,一个是模态对话框(model ... 在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。  点击模态对话框中的OK按钮,模态对话框会被销毁。

         MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。

     一、模态对话框(model dialog box)

            在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。

           点击模态对话框中的OK按钮,模态对话框会被销毁。

            创建一个模态对话框的代码:

    //创建一个模态对话框  
    CTestDialog td;  
    td.DoModal();   

    其中CTestDialog为我自己所新建和一个对话框资源相关联的对话框类。

            可以创建一个布局模态对话框类变量,不用担心它会随着所在函数返回而被销毁。因为DoModal()函数的一个功能是,当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行。

            DoModal()函数也有显示对话框的功能,所以也无需调用其他函数来显示对话框。

    二、非模态对话框(modaless dialog box)

            在程序运行的过程中,若出现了非模态对话框,主窗口还可以发送消息。

            点击非模态对话框中的OK按钮,非模态对话框没有销毁,只是隐藏了。若想点击OK按钮时,非模态对话框也销毁,那么CTestDialog类必须重载其基类CDialog的虚函数OnOK(),在此函数里调用DestroyWindow()来销毁此对话框。

            若和上面一样的方式创建一个非模态对话框:

              CTestDialog td;  
    td.Create(IDD_DIALOG1); //创建一个非模态对话框  
    td.ShowWindow(SW_SHOWNORMAL); //显示非模态对话框  

      那么,在运行时,你会发现此对话框无法显示。这是因为你声明的对话框变量td是局部变量,但这个函数返回时,td也被析构了,所以无法显示此对话框。

            创建非模态对话框,必须声明一个指向CTestDialog类的指针变量,且需要显示的调用ShowWindow()才能将对话框显示出来。有两种创建方法:

    (1)采用局部变量创建一个非模态对话框

    //采用局部变量创建一个非模态对话框  
    CTestDialog *pTD = new CTestDialog();  
    pTD->Create(IDD_DIALOG1); //创建一个非模态对话框  
    pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框  

        因为指针在声明的时候是被放在堆栈中,只有整个应用程序关闭后才会被销毁,所以可以正常显示对话框。

            这种方法虽然不影响程序的运行,可是指针pTD所指向的内存却导致不可用,这样的编程很不好。

    (2)采用成员变量创建一个非模态对话框

            首先在你所要编写的类的头文件中声明一个指针变量:

    private:  
        CTestDialog *pTD;  

    然后再在相应的CPP文件,在你要创建对话框的位置添加如下代码:

    [cpp] view plain copy
    //采用成员变量创建一个非模态对话框  
    pTD = new CTestDialog(); //给指针分配内存  
    pTD->Create(IDD_DIALOG1); //创建一个非模态对话框  
    pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框  
    // 最后在所在类的析构函数中收回pTD所指向的内存:
    delete pTD;  


    副窗口调用主窗口控件

    方法1

    ((CDEMODlg*)GetParent())->SetDlgItemTextA(IDC_EDIT1, "123");
    方法2
    CDEMODlg *dlg;
    	dlg->GetParent()->SetDlgItemTextA(IDC_EDIT1, "456");






    展开全文
  • 设置对话框应用程序窗口启动位置 设置对话框应用程序窗口启动位置 设置对话框应用程序窗口启动位置 设置对话框应用程序窗口启动位置
  • 本文记录了如何将该项目改造成一个包含2个文件对话框、1个文本显示框的窗口程序,2个文件对话框分别用于选择新旧编码对照表.xlsxmdb文件,文本显示框用于打印必要的信息。 完整源代码测试文件都已上传至...

    在本文的其他文章中有一个实现旧编码替换为新编码的小项目,因为窗口程序比较直观,所以需要改造相关代码以生成窗口程序。

    本文记录了如何将该项目改造成一个包含2个文件对话框、1个文本显示框的窗口程序,2个文件对话框分别用于选择新旧编码对照表.xlsx和mdb文件,文本显示框用于打印必要的信息。

    完整源代码和测试文件都已上传至https://download.csdn.net/download/liyuannian/10709852

    本项目得到的最终效果如下图:

    本项目:

    1)通过在类中自定义信号和槽解决了“Cannot queue arguments of type 'QTextBlock'”的错误。

    2) 实现了文件选择对话框(选择mdb和excel文件)和文本框(打印信息)。

    3)通过添加centralwidget中心布局,实现了窗口的控件大小可变。

    4)在虚拟机中安装win10,并使用原版Python3.7规避了python3+Anaconda生成的exe文件过大的问题。

    4)利用多线程,解决了执行exe时卡死的问题。

    开发流程为:

    Step1: 得到*.ui文件

    在Qt Designer中设定好界面,并保存为*.ui文件 

    Step2: 由*.ui生成*.py文件

    在CMD中首先进入到该路径下:Anaconda3\Library\bin\pyuic5.bat

    并找到要处理的.ui文件,执行(以下是我电脑上的处理办法):

    pyuic5 E:\00_ProgramFiles_LYN\Anaconda3\Library\bin\mdb_code.ui –o E:\00_ProgramFiles_LYN\Anaconda3\Library\bin\mdb_code.py

    Step3: 在自定义的py文件中,编写自己的类并实现step2中的py文件中的Ui_MainWindow类中的方法

    Step4:利用pyinstaller将*.py生成*.exe

    CMD中切换到要打包的.py目录。如果没有安装pyinstaller,则在命令行中执行:pip install pyinstaller

    之后执行:pyinstaller -F –w *.py

    执行结束后会在py所在的目录内看到三个文件夹,__pycache__、build和dist,前两个没用,可以删除,生成的exe存放在dist中。

    总结:

    以下是一些坑,虽然项目的功能很简单,但是走了不少弯路,希望其他人能避免。

    1)在子线程中无法绘制界面,因此不要在子线程中向文本框内输出信息,可以在自己的类中自定义信号和槽函数,当想在文本框内打印信息时,就发一个信号(就是要打印的信息,str类型)给槽函数处理,可解决错误:

    “Cannot queue arguments of type 'QTextBlock'”。

    2)在生成exe时,如果使用Anaconda,则exe会超级大,本项目可达200MB,因此尽量使用原生的Python,最新版为Python3.7,我的处理方法很笨,用虚拟机装了一个win10,只安装了一个原生Python3.7...

    3)运行py文件尽量不要使用IDE,据说有Bug,最好使用CMD运行,可看到全面的警告和错误信息,缺少什么包就安装什么包。

    4)界面自适应的问题可以直接使用Qt Designer解决,在Designer中设置好布局,则界面自动可实现自适应。

    展开全文
  • 随时随地阅读更多技术实战干货,获取项目源码、...这种对话框本质上依然是窗口,只是把显示窗口的Activity的风格设为对话框风格。下面简单的实例来演示: Activity: package com.lovo; import android.app.Act...

    随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、QQ技术交流群(183198395)。

    这种对话框本质上依然是窗口,只是把显示窗口的Activity的风格设为对话框风格。下面简单的实例来演示:

    Activity:

    package com.lovo;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		Button btn = (Button) findViewById(R.id.btn);
    		btn.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// 结束该Activity
    				finish();
    			}
    		});
    	}
    }
    


    Manifest:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.lovo"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="10" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name"
                android:theme="@android:style/Theme.Dialog" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>


    布局XML:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical" >
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:src="@drawable/image2" />
    
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="确定" />
    
    </LinearLayout>


    附上图片效果:

    下面使用PopupWindow创建对话框风格的窗口,代码如下:

    Activity:

    package com.lovo;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.PopupWindow;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		View root = this.getLayoutInflater().inflate(R.layout.popup, null);
    		// 创建PopupWindow对象
    		final PopupWindow popup = new PopupWindow(root, 280, 360);
    		// 获得主界面上的Button对象
    		Button btn = (Button) findViewById(R.id.btn);
    		btn.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// 以下拉方式显示
    				popup.showAsDropDown(v);
    				// 将PopupWindow显示在指定位置
    				// popup.showAtLocation(findViewById(R.id.btn), Gravity.CENTER,
    				// 20, 20);
    			}
    		});
    		Button close = (Button) root.findViewById(R.id.close);
    		close.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// 关闭popup窗口
    				popup.dismiss();
    			}
    		});
    
    	}
    }
    


    主界面布局XML:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical" >
    
    
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击我" />
    
    </LinearLayout>


    弹出对话框风格的窗口的布局XML:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical" >
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:src="@drawable/image2" />
    
        <Button
            android:id="@+id/close"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="关闭" />
    
    </LinearLayout>


    图片效果:点击按钮弹出窗口

     

    展开全文
  • 自定义单选、多选对话框及popwindow窗口实例源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 在基于对话框的mfc程序中,添加控制台窗口用于显示输出信息。
  • MFC实现对话框的停靠窗口 1.对话框建立 插入Dialog,ID改为DIALOG_SET; 添加相关控件 添加类CSetting 对话框的属性设置 border->None style->child 2.停靠窗口建立 类导向->添加MFC类->基类...

    **

    MFC实现对话框的停靠窗口

    **
    VS2019,建立MFC应用,设置高级中去除默认停靠窗口。
    1.对话框建立
    1.1插入Dialog,ID改为DIALOG_SET;
    1.2对话框的属性设置 border->None,style->child
    1.3添加相关控件
    1.4右键单击添加MFC类CSetting
    在这里插入图片描述

    2.停靠窗口建立
    2.1类导向->添加MFC类->基类CDockablePane
    在这里插入图片描述
    2.2MainFrm.h中添加 pubilc成员 :CClassView m_wndClassView;
    2.3类视图->CMainFrame->消息MW_Create
    在这里插入图片描述

    if (!m_wndClassView.Create(_T("Title"), this, CRect(0, 0, 200, 200), TRUE, ID_SET, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
    	{
    		TRACE0("Failed to create Class View window\n");
    		return FALSE; // failed to create
    	}
    
    	m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
    	DockPane(&m_wndClassView);
    

    此时运行已有空停靠窗口
    3.关联对话框和停靠窗口
    3.1 CClassView中添加pubilic成员CSetting SET;(头文件"CSetting.h")
    3.2CClassView->OnCreate中添加

    SET.Create(DIALOG_SET, this);
    SET.ShowWindow(SW_SHOW);
    

    在这里插入图片描述

    3.3 此时对话框已挂载在停靠窗但边框不适配
    CClassView->OnSize中添加 (消息WM_SIZE)
    在这里插入图片描述

    if (SET.GetSafeHwnd())
    	{
    		CRect rect;
    		GetClientRect(&rect);
    		SET.MoveWindow(rect);
    	}
    

    在这里插入图片描述

    展开全文
  • 对话框和窗口的区别

    千次阅读 2016-10-12 21:46:00
    窗口”与“对话框”有什么区别? 计算机类稿件的一大特点是文中的图很多...其中,“窗口对话框”是两个极易用错的计算机术语。如果不能明确“窗口”与“对话框”这两个词之间的区别,将会给计算机类...
  • 因此,通过GDI 建立的对话框和其他窗子是不能正常显示的。 不过,通过使用特别的技术你能合并一个 Windows 对话框,HTML 帮助,或者其它任何一种窗口 到你的应用程序当中。 FSWindow 例子描述了一个对话框如何...
  • 对话框与父窗口之间数据共享的C_Builder编程。在推出对话框后,父窗口的响应问题。
  • 采用MFC编程时,子对话框常常要向主窗口传递数据,获取主窗口的对象指针便显得非常重要了。 void CMyView::OnModel() //点击菜单,创建对话框的几种变量设置,总共是4种方法,模态的一种,非模态的三种 { // TODO: ...
  • PyQt5为应用程序设计提供了一些常用的标准对话框,如打开文件对话框、选择颜色对话框、信息提示确认选择对话框、标准输入对话框等,用户无须自己设计这些常用的对话框,从而可以减少程序设计工作量。 QFileDialog...
  • android 自定义对话框,android-styled-dialogs 可自定义样式的dialog,Android实现...基本的对话框,自定义彩色Toast,自定义单选、多选对话框及popwindow窗口实例源码,自定义列表选择Dialog,适用网络请求数据
  • 模态对话框的父窗口设置

    千次阅读 2015-05-03 14:47:39
    我的毕业设计基本是搞完了,那么最近几天在做一些测试修改。其中就有一个问题折腾了我好久,今天才发现,原来是这么回事。...具体看图: 最下面黑色背景的是我的父窗口,前台的是一个非模态的子对话框,此时,子对
  • android自定义单选、多选对话框及popwindow窗口实例源码0分提供下载了
  • 使用CSplitterWnd类对窗口进行分割,将对话框窗口与视图窗口相关联,达到特殊的效果
  • 程序是基于对话框的,进入对话框主界面后进入子窗口,子窗口作用是测量采集数据,需求是在子窗口中采集数据的同时有数据统计,要在子窗口画坐标轴。。求大神指导。
  • 窗口A: ComboBox 里面存储着窗口B的标题, 点击按钮1设置窗口B的标题. Button 4个, 文本框一个, 输入数字后点击4个方位的按钮, 窗口B会移动多少距离. 滑块 , 改变窗口B的透明度
  • 更改对话框和框架窗口图标 (VC/MFC)

    千次阅读 2010-03-27 12:02:00
    1、对于窗口大图标小图标一致的情况下,在构造函数中将LoadIcon的参数直接修改成对应ICON资源ID (最简单的情况) 2、在OnCreate函数调用完成后,还会调用OnInitDialog,所以,此时就不能在OnCreate函数中修改图标...
  • BOOL CInput::OnInitDialog() { CDialog::OnInitDialog();... * 设置窗口为顶层窗口 */ this->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); return TRUE; // return TRUE...
  • 1、首先创建要在对话框里显示的那个对话框,命名为:IDD_INNER。  设置这个对话框的属性:  1)、“Style”选择“Child”;中文版“样式”选择“下层”。  2)、“Border”为“None”;中文版“边框”选择...
  • 因此,通过GDI 建立的对话框和其他窗子是不能正常显示的。 不过,通过使用特别的技术你能合并一个 Windows 对话框,HTML 帮助,或者其它任何一种窗口 到你的应用程序当中。 FSWindow 例子描述了一个对话框如何在全屏...
  • MFC如何将对话框嵌入浮动窗口

    千次阅读 2017-10-17 13:19:25
    MFC浮动窗口的中创建对话框
  • 对话框实现,窗口置顶功能

    千次阅读 2018-12-20 21:23:18
    { // 窗口置顶 SetWindowPos(&amp;wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } else { // 取消窗口置顶 SetWindowPos(&amp;wndBottom, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOREDRAW); ...
  • 基于对话框的MFC窗口之间值的传递

    千次阅读 2017-05-06 20:56:34
    编码时碰到一个MFC多个对话框窗口之间值的传递的问题,花了些时间总结一下。问题具体是这样的: 单击CWorkerBorrow对话框类中的“添加借调“功能按钮,弹出CMBorrow对话框来编辑信息,然后鼠标点击CEdit类型的编辑...
  • VC对话框动态窗口大小类,就可以作为基类继承后可以根据窗口拖动动态调整窗口大小
  • 本章介绍多窗口的设计调用问题,包括PyQt5标准对话框的使用,自定义对话框的设计使用,如何在主窗口和对话框之间传递数据,如何设计类似于多页浏览器的多窗口程序,如何设计标准MDI(Multiple Document ...
  • VB对话框窗口移动VB对话框窗口移动VB对话框窗口移动VB对话框窗口移动VB对话框窗口移动
  • 更改MFC对话框默认的窗口类名

    千次阅读 2018-12-01 18:10:07
    MFC窗口程序的默认类名是"#32770",而且MFC窗口程序不支持动态修改类名,也就是不能像窗口标题那样用this-&gt;SetWindowText(L"春哥纯爷们"); 来修改窗口类名。 在主程序窗口的属性中有&...
  • 对话框窗口分割

    2013-03-10 15:04:03
    MFC对话框窗口分割功能实现,主要是用picture控件模拟

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 309,989
精华内容 123,995
关键字:

对话框和一般窗口