`
emowuyi
  • 浏览: 1485533 次
文章分类
社区版块
存档分类
最新评论

widowsSDK创建对话框的三种方法

 
阅读更多

自己看对话框也有些时间了,下面来总结下对话框的一些知识点。

对话框有模态对话框和非模态对话框两种基本形式。

非模态对话框允许我们把输入焦点切换到同一个应用程序的另一个窗口,该对话框也无需关闭,这个比较普遍。

模态对话框主要是两类:应用程序模式对话框和系统对话框。应用程序对话框不允许我们在本应用程序中切换输入焦点,但是可以切换到其他应用程序中去,比如点击记事本的文件打开按钮,会弹出选择打开文件的对话框,这个对话框不能切换到记事本中,但是可以切换到其他应用程序中去。这个就是属于应用程序模式对话框。系统对话框则比较恶毒,不允许你切换到任何一个应用程序中,我们一看名字就知道,系统对话框,看似比较紧急,要求我们必须首要解决····

我的第一种方法是用模态对话框来建立一个最简单的对话框。首先是.c文件的代码

这里我们还是要用到菜单和资源。所以首先添加菜单资源。我们把菜单的ID改成"MODEDIA",这里的双引号也要加上。

然后在菜单里添加名称为 help 的 一栏,在这栏的下拉列表里面添加 About...这个选项,我们将这个选项的ID改成IDM_APP_ABOUT

然后我们添加对话框资源,确认新生成的对话框有两个按钮,分别为确定和取消,确定按钮的ID为IDOK 取消按钮的ID为IDCANCEL系统默认的名字就是这样的。我们为了以防万一检查一下。

最后编译运行一下,一个最简单的模态对话框就出来了。

接下来我们来实现一下非模态对话框。

其实只是创建对话框的函数不一样,整个创建对话框的工作是交给windows去完成的,不用我们操心的。

非模态对话框相对来说是比较常用的。下面是几个注意点,我们其实只要在模态对话框里面改进一下就可以了~~~~~

还记得模态对话框的创建函数吗?

下面是非模态对话框的创建函数:

CreateDialog函数返回的是对话框的窗口句柄,我们把这个窗口句柄存在全局变量hDlgModeless当中。
而在模态对话框当中,DIalogBox是直到对话框销毁后才返回值的

接下来我们来看一下非模态对话框的样式语句:

STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS VISIBLE

你可以用记事本打开你刚才编译好的模态对话框的.rc资源文件来进行对比。为了创建一个非模态的对话框,我们把样式改成上面的语句。

在这里要注意最后一个样式WS_VISIBLE (可视的)

如果你忘记把这个样式加入进去的话,对话框将不会显示,除非你再调用下面的语句:

来达到同样的效果。

第三个差异:非模态对话框进入你的消息队列。所以我们应该更改消息循环:

while (GetMessage (&msg, NULL, 0, 0))

{

if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

}

什么时候进入消息循环呢?我们在对话框还没生成或已经销毁 hDlgModeless == 0 (这个时候的消息不是由非模态对话框产生的)

或者 消息是针对非模态对话框的时候 ! IsDialogMessage (hDlgModeless, &msg) (这和时候的消息是由非模态对话框产生的)

最后的一点差异,模态对话框使用EndDialog结束, 非模态对话框使用DestroyWindow来结束。同时把hDlgModeless的全局变量设置为NULL

DestroyWindow(hDlg);

hDlgModeless = NULL;

好了,下面就是非模态对话框的代码了:

资源的创建过程与上面的相同,这里就不再叙述了。

现在再试一下,是不是可以移动父窗口了,呵呵~~~~~~

第三种方法是把对话框作为窗口,注册一个窗口类来实现。我下面的例子创建的是一个非模态对话框。

下面先上代码.cpp文件

resource.h文件

在源文件里面添加名为Dialog.dlg的文件(创建一个.txt的文件然后重命名)


最后在编译生成的资源文件里面添加

第三种方法看起来比较奇怪。这到底是对话框还是窗口呢?其实对话框就是一个窗口!!

下面来看一下注意点:

这句告诉windows我要使用自己的窗口过程

另外一定要注意资源文件里面

这句告诉windows我要使用自己的窗口过程来处理对话框消息

资源文件引用了Dialog.dlg,这个文件用来创建自定义的对话框

这里我还有2个不明白的地方:

我在引用STYLE的时候,直接引用编译时提示找不到定义,于是我找到样式对应的值就可以了。我不知道为什么会这样,请高手指教。

另外这个对话框创建出来后按钮不起作用。我也不知道是什么原因,照理来说LOWORD(wParam)存的应该是按钮的ID啊。这里也暂时留下疑问,请高手解答。

第二个问题已经解决了。

可以在编译后的资源文件里面看到生成的对话框和按钮,可以在那里设置ID,用上面的方法生成的ID是随机的。

这里的OK只不过是按钮上的文本字符串而已,并不是按钮的ID。我把这里搞混了,所以出错了。

我可以设置按钮的ID为“OK”,然后就可以了(注:一般设置按钮ID的时候我们使用ID_BTNOK,这样标准一点)


以上是我自己总结的对话框的知识。有错误的地方,还请指教。谢谢^_^


分享到:
评论

相关推荐

    FPA-花授粉优化.rar

    多种智能优化算法设计开发应用,可供学习交流,不断更新资源

    医院口腔科高压蒸汽灭菌登记表.docx

    医院口腔科高压蒸汽灭菌登记表.docx

    微信小程序-城市天气2小程序项目源码-原生开发框架-含效果截图示例.zip

    微信小程序凭借其独特的优势,在移动应用市场中占据了一席之地。首先,微信小程序无需下载安装,用户通过微信即可直接使用,极大地降低了使用门槛。其次,小程序拥有与原生应用相近的用户体验,同时加载速度快,响应迅速,保证了良好的使用感受。此外,微信小程序还提供了丰富的API接口,支持开发者轻松接入微信支付、用户授权等功能,为开发者提供了更多的可能性。 微信小程序-项目源码-原生开发框架。想要快速打造爆款小程序吗?这里有一份原生开发框架的项目源码等你来探索!基于微信小程序的强大生态,这份源码将带你领略原生开发的魅力,实现快速迭代与高效开发。从用户授权到微信支付,从界面设计到功能实现,一切尽在掌握。赶快下载查看,让你的小程序项目在竞争激烈的市场中脱颖而出!

    基于Springboot微服务的车联网位置信息管理软件的设计与实现+论文

    基于Spring Boot微服务的车联网位置信息管理软件旨在通过现代化技术提升车辆位置信息的实时监控与管理效率。以下是该系统的功能模块和技术实现的简要介绍: 系统功能模块 车辆定位与追踪:通过集成GPS等定位技术,实时获取车辆位置信息,并提供车辆追踪功能。 位置信息管理:存储、查询、更新车辆位置信息,支持历史轨迹回放和位置数据统计分析。 报警与预警:根据预设规则,对异常位置信息进行报警和预警,如超速、越界等。 用户管理:支持用户注册、登录、权限管理等操作,确保系统安全和数据保密。 技术实现 后端技术:采用Spring Boot框架构建微服务架构,利用Maven进行项目管理,确保系统的高性能和稳定性。 数据库:使用MySQL数据库存储车辆位置信息、用户数据等关键信息,支持高效的数据查询和统计分析。 定位技术:集成GPS等定位技术,实现车辆位置的实时获取和追踪。 前端技术:结合Vue.js等前端框架,构建直观、友好的用户界面,提供丰富的交互体验。 该系统通过Spring Boot微服务架构和现代化技术,实现了车联网位置信息的实时监控与管理,为车辆管理提供了有力的技术支持。

    MSChartExtension-V3.9.2.zip

    本文介绍如何使用改进版本的Largest-Triangle-Three-Bucket(LTTB)算法使用WinForms应用程序的MSChart组件绘制大型数据点,以提高应用程序性能和数据可见性。

    VB将程序图标在添加到任务栏

    实现功能: 1.将程序图标添加到任务栏; 2.从任务栏里移出程序图标; 3.从任务栏里隐藏图标;

    MATLAB设计_计算N-D数组X中的缺失数据.zip.temp

    MATLAB设计_计算N-D数组X中的缺失数据.zip.temp

    MATLAB设计_permn彼尔姆算法.zip

    MATLAB设计_permn彼尔姆算法.zip

    BUU刷题-Reveser-FlareOn5-Web2.0(WebAssembly逆向分析)

    BUU刷题-Reveser-FlareOn5_Web2.0(WebAssembly逆向分析)

    基于SerialChart串口绘图软件从串口读入CSV数据(用逗号分隔)并直观地绘制波形图.zip

    基于SerialChart串口绘图软件从串口读入CSV数据(用逗号分隔)并直观地绘制波形图

    libaa1-1.4.0-515.1.riscv64.rpm

    安装:rpm -i xx.rpm

    SZU大物多普勒实验报告

    SZU大物多普勒实验报告

    高分项目,基于stm32和mpu9250开发的usb hid键盘、鼠标、游戏控制器,内含完整源码、HID设备规范

    高分项目,基于stm32和mpu9250开发的usb hid键盘、鼠标、游戏控制器,内含完整源码、HID设备规范 THIS SPECIFICATION IS PROVIDED “AS IS” WITH NO WARRANTIES WHATSOEVER INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR ANY PARTICULAR PURPOSE, OR ANY WARRANTY OTHERWISE ARISING OUT OF ANY PROPOSAL, SPECIFICATION, OR SAMPLE. A LICENSE IS HEREBY GRANTED TO REPRODUCE AND DISTRIBUTE THIS SPECIFICATION FOR INTERNAL USE ONLY. NO OTHER LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY OTHER INTELLECTUAL PROPERTY RIGHTS IS GRANTE

    微信小程序-Symphony 社区平台小程序项目源码-原生开发框架-含效果截图示例.zip

    微信小程序凭借其独特的优势,在移动应用市场中占据了一席之地。首先,微信小程序无需下载安装,用户通过微信即可直接使用,极大地降低了使用门槛。其次,小程序拥有与原生应用相近的用户体验,同时加载速度快,响应迅速,保证了良好的使用感受。此外,微信小程序还提供了丰富的API接口,支持开发者轻松接入微信支付、用户授权等功能,为开发者提供了更多的可能性。 微信小程序-项目源码-原生开发框架。想要快速打造爆款小程序吗?这里有一份原生开发框架的项目源码等你来探索!基于微信小程序的强大生态,这份源码将带你领略原生开发的魅力,实现快速迭代与高效开发。从用户授权到微信支付,从界面设计到功能实现,一切尽在掌握。赶快下载查看,让你的小程序项目在竞争激烈的市场中脱颖而出!

    MATLAB设计_COMTRADE阅读器.zip

    MATLAB设计_COMTRADE阅读器.zip

    Ⅲ类医用射线装置监督检查表.docx

    Ⅲ类医用射线装置监督检查表.docx

    毕业设计MATLAB_滞后型传递特征的多项式表征.zip

    毕业设计MATLAB_滞后型传递特征的多项式表征.zip

    微信小程序-房贷计算器小程序项目源码-原生开发框架-含效果截图示例.zip

    微信小程序凭借其独特的优势,在移动应用市场中占据了一席之地。首先,微信小程序无需下载安装,用户通过微信即可直接使用,极大地降低了使用门槛。其次,小程序拥有与原生应用相近的用户体验,同时加载速度快,响应迅速,保证了良好的使用感受。此外,微信小程序还提供了丰富的API接口,支持开发者轻松接入微信支付、用户授权等功能,为开发者提供了更多的可能性。 微信小程序-项目源码-原生开发框架。想要快速打造爆款小程序吗?这里有一份原生开发框架的项目源码等你来探索!基于微信小程序的强大生态,这份源码将带你领略原生开发的魅力,实现快速迭代与高效开发。从用户授权到微信支付,从界面设计到功能实现,一切尽在掌握。赶快下载查看,让你的小程序项目在竞争激烈的市场中脱颖而出!

    Client.ico

    Client.ico

    ipython-8.24.0.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics