[SDK] -模态对话框 和 非模态对话框

news2025/1/10 10:20:11

前言

  • 各位师傅大家好,我是qmx_07,今天给大家讲解对话框的相关知识点,就此SDK学习告一段落,之后会更新相关项目内容

在这里插入图片描述

创建对话框

  • 项目->添加 ->资源->Dialog->修改对话框ID->拖拉尺寸设置对话框大小
    在这里插入图片描述

通过菜单绑定 模态对话框

在这里插入图片描述
在这里插入图片描述

  • 通过点击菜单栏,呼唤 对话框窗口
INT_PTR CALLBACK Dialog1WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
    {
        return (INT_PTR)TRUE;
    }
    case WM_CLOSE:
    {
        EndDialog(hWnd, 0);
        break;
    }
    default:
        break;
    }
    return 0;
}
    case WM_COMMAND:
        {
        switch (LOWORD(wParam))
        {
            //模态对话框
        case ID_DLG1:
        {
            DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_ONE),hWnd, Dialog1WndProc);
        }
  • DiaglogBox创建模态对话框,并绑定对话框过程函数
  • Diaglog和EndDiaglog配套使用
  • 对话框也属于一个窗口,有自己的过程处理函数,函数作用:处理对话框产生的消息,处理返回TRUE,不处理返回FALSE由系统进行内定处理
    画面演示:
    在这里插入图片描述
  • 模态对话框会阻塞父窗口的原因:
  • 模态对话框内部自建消息循环
  • 对话框初始化的时候,显示对话框之前发送【WM_INITDIALOG】进行初始化,调用了EnableWindows 禁用了父窗口你的鼠标和键盘输入
  • 对话框创建完成后不能如CreateWindow创建的那般缩放 窗口大小

相关API讲解

  • DialogBox:函数用于创建一个基于模板资源的模态(模式)对话框
  • 需要调用 EndDialog 函数终止模态对话框
int DialogBox(  
    HINSTANCE hInstance,
    LPCTSTR   lpTemplate, 
    HWND 	  hWndParent, 
  	DLGPROC   lpDialogFunc
  ); 

在这里插入图片描述

  • DialogWndProc:用于处理模态对话框 或者 非模态对话框的消息处理
BOOL CALLBACK DialogWndProc(
    HWND 	hwndDlg,	//指向该对话框的句柄
    UINT 	uMsg,		//消息ID
    WPARAM  wParam,		//其他消息
    LPARAM 	lParam		//其他消息
    );
  • GetModuleHandle:获取模块句柄,模块必须为DLL文件,如果参数为NULL GetModuleHandle返回对用于创建调用进程的文件的句柄(exe文件)
HMODULE GetModuleHandle(   LPCTSTR lpModuleName);

通过菜单绑定非模态对话框

在这里插入图片描述
在这里插入图片描述

    case WM_COMMAND:
        {
        switch (LOWORD(wParam))
        {
        //非模态对话框
        case ID_DLG2:
        {
            HWND hDlg2 = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_TWO), hWnd, Dialog2WndProc);
            ShowWindow(hDlg2, SW_SHOW);
        }
        }
INT_PTR CALLBACK Dialog2WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
    {
        return (INT_PTR)TRUE;
    }
    case WM_CLOSE:
    {
        EndDialog(hWnd, 0);
        break;
    }
    default:
        break;
    }
    return 0;
}
  • CreateDialog创建对话框,并绑定对话框过程函数,返回值为指向该非模态对话框的窗口句柄。
    搭配EndDialog来关闭非模态窗口
  • 非模态对话框需要调用showWindow来显示窗口
  • 非模态对话框 可以操作父窗口
    画面演示:
    在这里插入图片描述

相关API讲解

CreateDidlog:从对话框模板资源创建一个非模态对话框,需要通过showWindow来显示窗口

HWND CreateDialog( 
    HINSTANCE hInstance,		
    LPCTSTR lpTemplate, 
    HWND hWndParent,  
    DLGPROC lpDialogFunc
    ); 

总结

  • 介绍了SDK 模态对话框 和 非模态对话框的区别,相关API讲解,及画面演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多通道电源测试设备怎么测试多路电源?

为了提升多路电源模块的测试效率和精度,NSAT-8000多通道ATE自动化测试设备持续迭代创新,旨在精准检测电源每个通道的性能指标,判断电源质量是否合格。 一、测试系统结构 二、测试设备 常用的测试电源的仪器主要有示波器、数字万用表、电子负载…

Android app广告变现广告预算来源有哪些?

APP开发者想要通过广告变现实现收益的最大化,首先要了解广告预算来源有哪些? 1、Push 推送广告 通过推送消息到用户设备通知栏上展示广告。 2、第三方 SDK 广告 很多应用都会集成第三方广告平台,比如 AdMob、Facebook Audience Network、…

ESP32-S3百度文心一言大模型AI语音聊天助手(支持自定义唤醒词训练)【手把手非常详细】【万字教程】

简介 此项目主要使用ESP32-S3实现一个AI语音聊天助手,可以通过该项目熟悉ESP32-S3 arduino的开发,百度语音识别,语音合成API调用,百度文心一言大模型API的调用方法,音频的录制及播放,SD卡的读写&#xff0c…

SAP自建表log功能开启

1、SE11下进入“技术设置”,勾选“日志更改” 2、RZ10修改系统参数 rec/clientALL, 或rec/client000(客户端号,多个客户端使用“,”分割。激活参数文件 没有这个参数的话新增一个 修改了SAP系统参数文件DEFAULT.PFL需要重启SAP…

【ESP-IDF FreeRTOS】软件定时器

除了ESP-IDF中的软硬件定时器,我们还可以使用FreeRTOS中的软件定时器,它是基于Tick的定时器。不过我一般不用,因为有ESP-IDF的定时器了嘛,但还是介绍一下。 首先包含头文件。 #include "freertos/timers.h" 接着我们…

N2011A叉车限速器如何实现超速报警且强制限速的

叉车安装限速器是对厂区叉车控制行驶速度常见的一种方式,但限速器真的能限速吗? 九盾N2011A叉车限速器是采取无线传感器的方式,相比传统的限速器,需要前桥打孔攻牙,稍有不慎就打断,安装麻烦耗工时&#xf…

2024年提升转化率的10个最佳弹窗软件解决方案

无论你是喜欢还是讨厌它们,弹窗通知并不一定都是坏的。当然,大多数网站访问者并不愿意被横幅打扰(更糟糕的是那种自动播放音频的视频)。不过,你有没有想过只在他们快要离开你的网站时才显示弹窗?使用退出意…

FP7127 / FP7128:LED舞台灯降压方案 RGB调光 智能调光模块

前言: 舞台灯作为一种应用于文化娱乐场所的灯具,用来营造环境、渲染氛围,在舞台上突出中心人物、塑造演员形象,在文化场馆,如博物馆等的场所,突出展品细节。根据灯光用途和适用类型,舞台灯可以…

【F的领地】项目拆解:百家号批量搬运掘金 | 搬运类项目核心思路分享

【F的领地】项目拆解:百家号批量搬运掘金 项目介绍 百家号批量搬运掘金是之前老百家号项目的一种新玩法,操作简单。 只需会操作电脑和手机即可,无脑搬运就行,玩法是批量搬运视频,用软件去重后在百家号发布。 然后是…

Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发

Miracast/WifiDisplay概念介绍 Miracast Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如…

Linux和C语言(Day09)

一、学习内容 指针 指针的概念 什么是内存 内存是计算必不可少的硬件设备,一般说到内存常会说TA多大——M、G、T 内存单位:bit【位,最小单位】 Byte【字节,基本单位】 KB MB GB TB CPU如何从内存取数据 通过内存地址去取 将内存…

全球主流单片机制造商

欧美地区 1、FreescaleNXP(飞思卡尔恩智浦):荷兰,主要提供16位、32位MCU。应用范围:汽车电子、LED和普通照明、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控制、电源和功率转换器、能源和智能电网、自…

数据资产入表(二)|数据要素资产化与数据资产入表路线框架,一文说清“入表”实现步骤

前言 小兵的数据资产入表系列文章第一篇为大家介绍了国内外关于“数据要素市场化”的探索现状以及推进“数据资产入表”的相关政策。想必大家读完第一篇后,已经认识到数据要素市场化是大势所趋,但是数据的特殊性使得其市场化之路比其他生产要素要更加复杂…

Vue3+Django5+REST Framework开发电脑管理系统

前端:Vue3TypeScript 后端:Django5REST Framework 功能介绍 用户管理角色管理菜单管理配件管理仓库管理类型管理电脑管理入库管理出库管理库存管理收发明细管理 界面预览 源码地址:managesystem: 电脑管理系统

亚信安全出席第五届国际反病毒大会 探究AI现代网络勒索治理

近日,第二届网络空间安全(天津)论坛正式开幕。本届论坛由天津市政府主办,国家计算机病毒应急处理中心、天津市公安局、天津市滨海新区政府承办,国家网络与信息安全信息通报中心协办,围绕“共建网络安全 共治…

MySQL表操作及约束

修改表 重命名: mysql> alter table user1 rename to user; 新增一列 mysql> alter table user add image_path varchar(128) comment 路径 after birthday; mysql> alter table user add image_path varchar(128) comment 路径 after birthday; Query…

火山引擎VeDI核心产品DataTester再进化,A/B大模型应用评测功能上线

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,火山引擎A/B测试产品DataTester上线了A/B大模型应用评测功能。此次升级不仅强化了模型上线前的基础能力评测,还新增了针对线上使用场景…

基本数据结构:“树”的简单介绍

树是一种重要的非线性数据结构,它模拟了树这种自然结构,由结点(Node)和边(Edge)组成,常用于表示分层关系(如文件系统、组织结构等)。以下是树的一些基本概念和特性&#…

对浏览器事件循环机制的理解

目录 事件循环宏观理解事件循环异步任务细分宏任务与微任务后的理解结合流程图与代码理解览器事件循环 首先来介绍一些谷歌浏览器的进程与线程。 谷歌浏览器包含五个进程:浏览器主进程、渲染进程、GPU进程、网络进程、插件进程。 其中最重要的渲染进程包含五个线程…

java多线程笔记2

一.线程和进程的区别 为什么要进行并发编程:CPU多核心 通过多进程可以实现并发编程,但是进程太重量了,因此引入了多线程. 线程是轻量级的进程,创建和销毁的开销更小,进程是包含线程的,同一进程的若干线程公用同一份系统资源(内存,硬盘等). 二.Thread类重要的属性 三.线程等…