DialogBox

函数原型:

INT_PTR DialogBox( HINSTANCE hInstance,LPCTSTR

lpTemplate,

HWND hWndParent,DLGPROC lpDialogFunc);

函数功能:

这个函数根据对话框资源,创建一个模式对话框,这个对话框应该用EndDialog来结束。

参数:

hInstance 当前应用程序实例句柄。

lpTemplate

标识对话框模板资源,

有两种使用方式:一种是把对话框模板的ID强制转为LPCTSTR,

一种可以使用MAKEINTRESOURCE宏得到标识ID。

hWndParent 父窗口的句柄。

lpDialogFunc

对话框消息处理函数。

PS.模态对话框在掉起后,直到对话框结束才会继续原来的程序运行,因此如果在新对话框调起后还有操作,则要么用多线程,要么就用非模态对话框。

//模态对话框

CSplash 继承自 CDialog

CSplash dlg;

dlg.DoModal();

CreateDialog

函数原型:

HWND CreateDialog( HINSTANCE hInstance,LPCTSTR

lpTemplate,

HWND hWndParent,DLGPROC lpDialogFunc);

函数功能:

这个函数根据对话框资源,创建一个非模式对话框,这个对话框应该用DestroyWindow来结束。

参数:

函数的参数跟上面的DialogBox用法相同。

PS. 非模态对话框

//非模态

CSplash *

pDlg = new CSplash();

pDlg->Create(IDD_SPLASH,this);

pDlg->ShowWindow(SW_SHOW);

所谓的模态与非模态:

对话框一般分为两种类型:模态类型(modal)与非模态类型(modeless)。

所谓模态对话框,就是指除非采取有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话框。非模态对话框则不会强制此种特性,用户可以在当前对话框以及其他窗口间进行切换。

模式对话框一般是在栈中生成的,所以EndDialog可能只是隐藏窗口,并没有销毁,当模式对话框对应的对象离开生命区时即销毁对话框。非模式的对话框一般在堆中,所以要主动用DestroyWindow销毁它。

模态与非模态的消息处理:

DialogBox函数自己处理消息循环(这个消息循环在user32.dll里面维护,看不到)且在对话框关闭后函数才会返回(返回值是EndDialog的第二个参数,所以可以用EndDialog的第二个参数来标识子控件的ID),而CreateDialog函数调用了CreateWindowEx函数来创建窗口并立即返回,之后这个窗口使用主窗口的消息循环(即这个窗口产生的消息可能直接发给这个窗口的处理函数,也可能进入主窗口的消息循环)。

不管是模式的还是非模式的对话框,对于不希望处理的消息,都不应该调用DefWindowProc来处理(否则会有问题),因为系统会主动对这些消息进行处理。对于不希望处理的消息,程序要做的只是return

FALSE即可,而对于处理过的消息,则应该return TRUE。

这种情况跟主窗口的处理不同。主窗口对不希望处理的消息也要调用DefWindowProc来处理,而每个消息处理分支的返回值是无关紧要的(不像对话框那样一定要返回TRUE或FALSE那样)。

非模式对话框跟主窗口使用同一个消息循环,而因为非模式对话框的消息会被系统主动调用这个对话框的处理函数来处理,所以在消息循环中不应该再对这个消息进行转换和分发,可以把消息循环改成这样:

// 主消息循环:

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

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable,

&msg))

{

//

不是非模式对话框g_hFlashWnd的消息才分发

if ( !IsDialogMessage(

g_hFlashWnd, &msg ) )

{

TranslateMessage(&msg);

DispatchMessage(&msg);

} }

}

CreateDialog会发出WM_INITDIALOG消息。

一些例子代码:

/// 非模式对话框消息处理函数

BOOL __stdcall FlashWndProc( HWND hWnd, UINT msg, WPARAM wParam,

LPARAM lParam )

{

switch ( msg )

{

case WM_INITDIALOG:

break;

case WM_PAINT:

break;

case WM_LBUTTONDOWN:

DestroyWindow( hWnd );

break;

default:

return FALSE; // 没处理过的消息

}

return TRUE; // 处理过的

}

///创建一个非模式对话框

g_hFlashWnd = CreateDialog( hInst,

MAKEINTRESOURCE(IDD_FLASH), hWnd, (DLGPROC)FlashWndProc );

ShowWindow( g_hFlashWnd, SW_SHOW );

oracle dialog运行,win32窗口创建 之 CreateDialog和DialogBox相关推荐

  1. win32窗口创建之通俗易懂版

    win32应用程序的第一章 1最简单的win32窗口的创建 这里呢我把win32窗口的创建作为第一个知识分享给大家,也算我对他的一个巩固了.嘿嘿 这里我要说明的是创建这个窗口有两种方法(当然是对于萌新 ...

  2. Windows下游戏制作(1)---win32窗口创建(2)

    写出一个窗口 之前我们简单的认识了一下win32主函数,下面我们来讨论一下如何用这个主函数作为起点来写出一个win32窗口程 序. int WINAPI WinMain(   HINSTANCEhIn ...

  3. 【转】C++ win32窗口创建详解

    转自:https://my.oschina.net/u/4328928/blog/3315324 本篇所讲解的内容仅限于 Windows 操作系统且限于 win32程序设计 现在我们在Windows系 ...

  4. win32窗口问题-CreateWindow创建窗口一直失败

    使用背景 利用VS创建空项目,使用WinMain入口构建代码创建一个win32窗口时,运行老是不显示窗口,调试发现程序在CreateWindow时老是产生失败结果: 就是上图,_hWnd获取Creat ...

  5. Android4.0窗口机制token分析以及activitiy, dialog, toast 窗口创建过程分析

    From 51CTO 一  前言 在谈到这个话题的时候,脑海里面千头万绪,因为它涉及到了方方面面的知识- 比如Activity管理,窗口添加,Token权限验证等等- 既然这么复杂,那么我们就复杂的问 ...

  6. 深入解析Windows窗口创建和消息分发

    Windows GUI采用基于事件驱动的编程模型,事实上几乎所有的界面库都是这样做的.在纯粹的Window32 SDK编程时代,人们还可以搞懂整个Windows窗体创建和消息的流通过程,但是在现在各种 ...

  7. 【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”

    本系列博文几乎没有难啃的"专业术语",尽量让读者能够看明白文章所述内容,是本系列博文的核心宗旨之一.(由于本人也是由于项目需要,所以才来查阅相关资料,文中出现的错误欢迎指出,共同进 ...

  8. 第一个 Win32 窗口程序

    第一个 Win32 窗口程序 程序骨架 int WinMain(){ // 设计窗口外观及交互响应,注册,申请专利RegisterClass(...) ;// 生产窗口 CreateWindow(.. ...

  9. Oracle数据库使用Navicat premium创建用户时遇到的坑

    最近受疫情影响,所以一直是远程办公,所以在家无法直接连接公司的数据库,于是自己需要本地创建数据库.创建完数据库后,在运行项目时,一直报错,错误大致的描述就是连接出错,无法连接数据源之类的: 因为一直用 ...

最新文章

  1. python替换字符串内容
  2. cnblogs.com精华收藏帖
  3. 新认知,新力量!神策 2021 数据驱动大会来了
  4. php+redis队列流程
  5. java 里面eaquls和==区别
  6. [架构] 分布式和集群的区别
  7. 【总结记录】面向对象设计OOP三大特性(封装、继承、多态)、七大基本原则的理解(结合代码、现实实例理解)
  8. [SceneKit] 不会 Unity3D 的另一种选择
  9. 写给JAVA入门书作者们的一封信
  10. sudo gem install cocoapods
  11. python把float可以转变成int_在Python中将float转换为整数的最安全方法?
  12. 磁共振影像分析之: 基于FSL的VBM分析(1)
  13. 一个词语解释了我万千的苦闷
  14. jconsole不能连接本地idea程序
  15. SpaceSyntax【空间句法】之DepthMapX学习:第一篇 数据的输入 与 能做哪些分析
  16. 苹果最新发布的16 英寸 MacBook Pro有哪些亮点和不足之处?
  17. 关机提示 ”task host window任务宿主正在执行关闭任务并且正在停止已运行的任务“我是这样解决的
  18. 网站js劫持了怎么处理和预防、js劫持了怎么办
  19. 波菲那契数列公式_裴波那契数列
  20. Mission Planner初学者安装调试教程指南(APM或PIX飞控)5——规划航点航线

热门文章

  1. 面试/笔试第一弹 —— 计算机网络面试问题集锦【转】
  2. Core Techniques And Algorithms In Game Programming
  3. PHP对接支付宝当面付详细教程
  4. Windows PowerShell简介
  5. 3D游戏设计-牧师与魔鬼_动作分离版
  6. winXPSP3的盘怎么装在VISTA系统里
  7. 潘通色卡tcx电子版_潘通色卡电子版Pantone TPX(三)
  8. URLEncoder.encode(str,编码) new URLDecoder().decode(str,编码)
  9. 新书推荐 |《用户增长方法论:找到产品长盛不衰的增长曲线》
  10. 三轴加速度计得到角度值原理