第四篇 对话框的建立与使用

跟我一起玩Win32开发(18):使用对话框的两个技巧 相信大家知道对话框怎么用了,就是先用“资源编辑器”设计一个对话框,然后在代码中加载处理。今天,我向大家分享两个使用对话框的技巧,还是比较实用的。不用担心,先喝杯茶,很简单的,一点也不复杂,总之,看俺写的博客,你不会有思想压力的。放心好了。   这两个技巧分别是: 1、在显示某个对话框时,向对话框传递数据。 这个我相信大家能够理解,就好比咱们在做Web开发的时候,在打开一个页面时,可能会考虑 阅读详情

对话框分为模态对话框和非模态对话框。模态对话框是指只有其销毁后,才能对其父窗口

进行操作的对话框;而非模态则无此要求。本博文将会介绍下模态对话框的资源定义与使

用。

 

一、基本知识

对话框主要是用来进行和用户交互的,其存在可以使得主窗口更加简洁。对话框也是基于

窗口的。但Windows的封装使得建立对话框比建立窗口简单的多。

下面看看建立窗口、模态对话框与非模态对话框的异同:

从上图可以发现以下几点:

1、建立对话框无需注册类,不用调用建立、显示和刷新窗口的函数了。

2、普通窗口和非模态对话框要自定义消息循环,而模态对话框则不需要了。

3、对话框对对话框过程的调用更加间接了。

4、建立模态对话的函数是DialogBoxParam,建立非模态对话框的函数是CreateDialogParam。

 

二、定义资源与使用对话框

从上图中可以明显的看出建立对话框只要调用DialogBoxParam。另外,对要特殊处理的消息也

要在自定义的对话框过程中处理。

是像上面说的那样吗?是的,但不足以用来编程!

接着看:

首先,对话框是作为一种资源存在在的。所以,得在资源文件内定义对话框。这就相当于定义了

对话框的模版,并且,模态与非模态对话框的资源定义无差别。差别在于建立时调用不同的函数。

其次,根据上图可以看到建立模态对话框,Windows内部为我们建立了内建消息循环、内建窗口

过程。我们在调用DialogBoxParam时,这个函数直到对话框的销毁才会返回。另外,在调用时

也指定了资源文件中的对话框模版,Windows根据模版建立对话框。这里也不需要我们关心。

		;建立模态对话框,一直到对话框销毁函数才返回
		;DLG_MAIN就是资源文件中的对话框
		invoke	DialogBoxParam,hInstance,DLG_MAIN,\
			NULL,offset _ProcDlgMain,NULL

 

(1)、对话框资源定义

1、

对话框ID   dialog  [ discardable ]   x坐标,y坐标,宽度,高度

[ 可选属性 ]

begin

         子窗口控件

end

其中,可选属性只要有标题文字、窗口风格、字体等;而子窗口控件包括图标、按钮等。

 

2、实例

#include	<resource.h>

#define		ICO_MAIN	0x1000
#define		DLG_MAIN	1	

//定义图标
ICO_MAIN	icon	discardable	"Main.ico"

//定义对话框
DLG_MAIN	dialog	discardable	50,50,113,63
//对话框属性定义
style		WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | WS_SYSMENU
caption		"Dialog"
font		9,"宋体"
//子窗口控件定义
BEGIN
	icon	ICO_MAIN,-1,10,11,18,21
	ctext	"Dialog example\nby lulipeng",-1,36,14,70,19
	defpushbutton "Exit(&X)",IDOK,58,46,50,14
	control "",-1,"Static",SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE,6,39,103,1
END

 

(2)、使用

1、在DialogBoxParam函数的参数中指定资源即可。

2、实例

.386
.model	flat,stdcall
option	casemap:none

include		windows.inc
include		user32.inc
includelib	user32.lib
include		kernel32.inc
includelib	kernel32.lib

ICO_MAIN	equ	1000h
DLG_MAIN	equ	1

.data?
hInstance	dd	?

.code
_ProcDlgMain	proc	uses ebx edi esi hWnd,uMsg,wParam,lParam

		mov	eax,uMsg
		.if	eax == WM_CLOSE     
			;对话框要用EndDialog销毁   
			invoke	EndDialog,hWnd,NULL
		.elseif	eax == WM_INITDIALOG
			;设置图标
			invoke	LoadIcon,hInstance,ICO_MAIN
			invoke	SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
		.elseif	eax == WM_COMMAND
			mov	eax,wParam
			.if	ax == IDOK
				invoke	EndDialog,hWnd,NULL
			.endif
		.else
			;自定义的对话框过程没有处理消息,要向
			;对话框管理器返回FALSE,否则返回TRUE
			mov	eax,FALSE
			ret
		.endif

		mov	eax,TRUE
		ret
_ProcDlgMain	endp
			
start:
		invoke	GetModuleHandle,NULL
		mov	hInstance,eax
		
		;建立模态对话框,一直到对话框销毁函数才返回
		;DLG_MAIN就是资源文件中的对话框
		invoke	DialogBoxParam,hInstance,DLG_MAIN,\
			NULL,offset _ProcDlgMain,NULL

		invoke	ExitProcess,NULL

		end	start

 

三、代码中图标 "Main.ico" 下载
Main.ico

 

四、代码运行结果

 

 

QT文件对话框,颜色对话框、字体对话框、输入对话框的使用 QT字体对话框,颜色对话框、字体对话框、输入对话框的使用程序文件对话框、字体对话框、颜色对话框输入对话框实际效果文件对话框字体对话框颜色对话框标准输入对话框字符串输入对话框INT输入对话框条目选择对话框 程序 文件对话框、字体对话框、颜色对话框 //.h #ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include &lt... 阅读详情

相关推荐

Qt-对话框使用总结

设置了对话框的显示设置后,会导致该对话框在模态显示的时候如果设置了父窗口指针,会导致模态的设置无效,这时需要在该函数中加一个参数Qt::Dialog就可以了。,参数的作用分别是:指定父窗口、设置窗口标题、设置对话框中的标签的显示文本、设置输入的字符串的显示模式、设置输人框中的默认字符串和设置获取按下按钮信息的 bool 变量。,其中的参数100表示默认的数值是100,-1000表示可输入的最小值是-1000,1000表示可输人的最大值是1000,10表示使用箭头按钮,数值每次变化10。

qq_37464701的博客 1106

【Win32】只此一篇 让你清楚明细模式(DialogBoxParam)与非模式(CreateDialogParam)对话框的区别

作者:MiTu_-_ 模式对话框与非模式对话框的四大区别前言一、显示方法二、返回方式与返回值三、关闭方式四、消息循环方式 前言 顾名思义,对话框完成的就是“”对话“”的功能,我们大部分的工作都是在主窗口的客户区完成的,但程序往往需要和用户进行交互,如输入文本、输入参数等等,这些界面完全不必放入主窗口中,而通常是通过弹出一个对话框来和用户进行“”交流”。 创建对话框与创建窗口其实很相似,只不过用...

Martin0316的博客 1464

用Windows API创建简单的菜单和对话框。

非常简单的Windows程序,对于菜单和对话框的编写一目了然。适合初学者对于Windows编程的学习。

Windows核心编程笔记(8)

win32编程

weixin_44971209的博客 199

BERTopic安装指南:hdbscan依赖问题全解析(附解决方案)

本文详细解析了安装BERTopic时常见的hdbscan依赖报错问题,深入剖析了C++编译环境缺失、Python版本兼容性以及包管理渠道混用三大核心原因。针对Windows、macOS和Linux不同系统,提供了创建虚拟环境、使用conda安装预编译包、安装C++编译工具等具体解决方案,帮助用户顺利安装BERTopic并开始文本主题建模实践。

weixin_29061041的博客 215

2023-07-04 Fast-Lio论文中公式(6)与BCH公式中近似雅可比公式的一致性推导

将(1)式代入(6)式,就有。

wmorries的博客 480

4 模态对话框和非模态对话框

4 模态对话框和非模态对话框 模态对话框 DialogBox 函数 对应关闭函数 EndDialog(关闭一个模态对话框) DialogBox 函数 The DialogBox macro creates a modal dialog box from a dialog box template resource. DialogBox does not return control until the specified callback function terminates the modal d

weixin_45672157的博客 681

8.2-12.4GHz喇叭天线设计

使用后处理模板的优化算法,对a1、h_horn、b1进行优化,各参数的优化区间即为之前计算得到的参数范围。由于矩形喇叭的辐射特型基本上是E面和H面扇形喇叭的结合,当波导中只是单模传播(只有TE波)时,矩形喇叭的口径可以通过远场公式推理出来。表示矩形喇叭的口径效率,进行最佳增益设计时,一般取值为0.5。从表中可以看出,该结构在8.58GHz的增益误差为2.68%>2.5%,需要对结构进行优化。建模完成,之后就是在矩形波导尾部添加波导端口激励,以及对应频率的远场监视器。,在这里,将频率定为区间的中心频率。

qq_48897427的博客 6662

Windows API一日一练(17)DialogBox和DialogBoxParam函数

对话框是比较常用的窗口,比如当你想让用户输入一些参数时就可以使用对话框。或者提示一些警告的信息,都是可以使用对话框的。比如当你拷贝文件时,Windows就会提示一个拷贝文件的进度对话框。对话框的使用范围比较广,并且它在设计时就可以看到运行的结果模样,这样方便设计。但对话框又分为两类,一种对话框运行后,一定要用户关闭那个对话框后才能返回到父窗口;一种对话框是不需要关闭后就可以直接返回父窗口...

anjichan4261的博客 1068

ADS SerDes仿真实战:深入解析Tx_Diff均衡器(EQ)参数对眼图质量的影响

本文以ADS仿真平台为基础,深入解析了SerDes设计中Tx_Diff均衡器(EQ)参数对信号完整性的核心影响。通过实战演示,详细对比了去加重(De-emphasis)与FIR抽头系数两种调节模式,揭示了它们如何有效对抗信道损耗与码间干扰,从而显著改善眼图的高度、宽度与抖动性能,为高速串行链路设计提供关键调优思路。

weixin_29230901的博客 228

Python爬虫实战【房产刚需专属】:爬取链家/贝壳完整房源数据,精准筛选刚需房源【房价+户型+地段+面积+装修】

本次爬虫的核心亮点就是刚需专属筛选,我已经把刚需买房的主流筛选逻辑封装为独立函数,你只需要修改筛选参数,就能精准匹配你的需求无需懂Python语法,直接改数字/文字即可!本次爬虫是刚需买房+Python爬虫实战的完美结合。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1827

如何创建与使用MFC对话框工程

详细的MFC 对话窗的创建与使用介绍

everything is possible,anything is OK. 9922

使用Qt Creator自带的Qt Designer构造UI界面流程总结

在本文中,我们将总结使用Qt Creator自带的Qt Designer构造UI界面的流程。在对话框中,您可以选择一个控件的信号,然后将其连接到另一个控件的槽。例如,您可以将按钮的点击信号连接到一个槽函数,以响应按钮的点击事件。右键单击窗口设计器中的空白区域,选择适当的布局管理器,如水平布局、垂直布局或网格布局。在Qt Designer中,您可以使用各种预定义的UI控件来设计应用程序的界面。现在,您可以在应用程序的源代码中使用生成的UI界面。在您的源文件中,包含相应的头文件,然后创建一个UI界面的实例。

cl6789的博客 1394

MFC子对话框建立与关闭

主void CMoshiwindowDlg::OnButton1() {     // TODO: Add your control notification handler code here     CDialogproty dlg;     dlg.DoModal();     m_text.SetWindowText(dlg.text); }子:1.头文件声明变量2. void CDialogproty::OnButton1() {     // TODO: Add you

BBRsher的专栏 2万+

17.6 LangSmith 私有化部署实战指南:企业级AI应用的安全基石

LangSmith 私有化部署, 企业级AI开发平台, 数据隐私合规, 混合云架构, 模型监控与审计。

yonggeit的博客 3780

[QMT和ptrade量化交易小白入门]-112、小市值热点概念交易策略,回测5年20倍

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1083

Qt 常用文件对话框及消息对话框使用

文章目录 void Dialog::showFileDlg() { // . 表示当前目录 QString sPath = QFileDialog::getOpenFileName(this,"文件对话框",".","c++ files(*.cpp);;"); m_fileLineEdit->setText(sPath); } void Dialog::showColorDlg() { QColor color = QColorDialog::getColor(Qt

weixin_45715405的博客 7425

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Windows SDK笔记(六):使用对话框资源建立窗口

  一、概述在Charles Petzold的书中,介绍了一种直接利用对话框资源建立主窗口的方法。使用这种方法,可以方便的在主窗口中安排子控件,而代码的其他部分跟用普通窗口时一样。我们知道,对话框是系统预先定义的“窗口类”,它有自己的窗口处理函数,我们自己写的对话框消息处理函数并不是真正的窗口消息处理函数。但我们可以在对话框模板脚本中,指定这个对话框使用我们自己定义的窗口类,而不是系统的对

flashsj的专栏 1360

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

建立非模态对话框与在线程中建立非模态对话框

建立非模态对话框与在线程中建立非模态对话框 弹出非模态对话框很简单,使用Create+ShowWindow就好了。但是如果在线程中这样做,那可是有问题的~(可以自己去试试)所以,我们就需要自定义消息映射和函数,通过SendMessage来创建非模态对话框。使用非模态对话框切记要懂得及时销毁,否则产生大量野指针就坏了! 建立非模态对话框代码: 1 2 3 ...

重庆一小兵--关注教育、机器视觉、商务智能、数据分析 360

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Pyqt5 6种弹出对话框结合信号与槽使用

         在博客上搜索资料,总是觉得自己太笨,没写全面看不懂哇~~。受阿狗启发,想好好开始记录,总结自己的学习情况,做到知其然,知其所以然。说不多说,进入正题。  一、6种Qt对话框介绍 通知对话框 information----程序运行时对用户操作进行反馈,保存,提交,写入等操作成功。 询问对话框 question--------提醒用户是否进行某种操作。 警告对话框 warni...

maidu_xbd的博客 5396

四、PyQt对话框的使用

PyQt学习——对话框的使用

ungoing的博客 3764

MFC_模态与非模态对话框建立

大纲 建立MFC工程 增加两个按钮并命名(关于和聊天的) 在资源视图里的Dialog里建立新的类(派生类)(添加资源->选Dialog) 在新成立的对话框中右击添加类(需创建一个与它关联的类)CAboutDlg 点击主对话框的按钮进入编写函数 模态对话框AboutDlg #include "AboutDlg.h" void CButtonDlgDlg::OnBnClickedAbout() { // TODO: 在此添加控件通知处理程序代码 CAboutDlg dlg; dlg.DoMo

半两八斤的博客 196

win32非模态对话框的建立过程

** win32非模态对话框的建立过程 ** 网上找了很多关于win32非模态对话框的文章,也看了一些培训班的视频。感觉误人者真是不少。建立一个简单的主程序本身就是一个对话框,这一切都不是问题。当主程序在运行到某个节点弹出一个非模态对话框的时候,很多文章资料都说的不清楚。 今天总结一下共享给大家 //建立非模态对话框的步骤: //第一步,建立全局变量:HWND Dlg_Modeless; 弹出对话框(非模态)的窗口句柄 //第二步,在资源文件里建立对话框资源,并且命名、确定ID号、确定风格 //第三步,在

weixin_40933560的博客 1439

MFC 子对话框建立与关闭

主 void CMoshiwindowDlg::OnButton1() { // TODO: Add your control notification handler code here CDialogproty dlg; dlg.DoModal(); m_text.SetWindowText(dlg.text); }

来自幻想 1630

对话框弹出对话框输入数据_建立输入对话框

Message dialog boxes are great when you want to inform the user of a message and get a simple response (i.e., a YES or OK click) but there are times when you want the user to give a little bit of dat...

cumao2792的博客 838

Windows SDK笔记(六):使用对话框资源建立窗口

Windows SDK笔记(六):使用对话框资源建立窗口 2010年06月13日   [b]Windows SDK[/b][b]笔记[/b][b]([/b][b]六[/b][b])[/b][b]:使用对话框资源建立窗口[/b]   作者:[ft=#00ffcc,,   [b]Ⅰ[/b][b].[/b][b]使用对话框资源建立主窗口[/b]   [b]一、概述[/b]   在Cha...

rtm490av 294
上一篇: 补码消除减法运算
下一篇: 分解因式
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值