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

WIN32编程之DialogBox

 
阅读更多

INT_PTR DialogBox( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
这个函数根据对话框资源,创建一个模式对话框,这个对话框应该用EndDialog来结束。

hInstance 当前应用程序实例句柄。
lpTemplate 标识对话框模板资源,有两种使用方式:一种是把对话框模板的ID强制转为LPCTSTR,一种可以使用MAKEINTRESOURCE宏得到标识ID。
hWndParent 父窗口的句柄。
lpDialogFunc 对话框消息处理函数。

HWND CreateDialog( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
这个函数根据对话框资源,创建一个非模式对话框,这个对话框应该用DestroyWindow来结束。
函数的参数跟上面的DialogBox用法相同。


模式对话框一般是在栈中生成的,所以EndDialog可能只是隐藏窗口,并没有销毁,当模式对话框对应的对象离开生命区时即销毁对话框。非模式的对话框一般在堆中,所以要主动用DestroyWindow销毁它。
DialogBox 函数自己处理消息循环(这个消息循环在user32.dll里面维护,看不到)且在对话框关闭后函数才会返回(返回值是EndDialog的第二个参数, 所以可以用EndDialog的第二个参数来标识子控件的ID),而CreateDialog函数调用了CreateWindowEx函数来创建窗口并立 即返回,之后这个窗口使用主窗口的消息循环(即这个窗口产生的消息可能直接发给这个窗口的处理函数,也可能进入主窗口的消息循环)。

不管是模式的还是非模式的对话框,对于不希望处理的消息,都不应该调用DefWindowProc来处理(否则会有问题),因为系统会主动对这些消 息进行处理。对于不希望处理的消息,程序要做的只是return FALSE即可,而对于处理过的消息,则应该return TRUE。
这种情况跟主窗口的处理不同。主窗口对不希望处理的消息也要调用DefWindowProc来处理,而每个消息处理分支的返回值是无关紧要的(不像对话框那样一定要返回TRUE或FALSE那样)。


备注:DialOgBox宏用CreateWindowEx函数创建对话框。DialogBox函数然后把一个WM_INITDIALOG消息(和一个WM-SETFONT消息,如果模板指定DS_SETFONT类型)传递到对话框过程。不管模板是否指定WS_VISIBLE类型,函数显示对话框,并且使拥有该对话框的窗口(也称属主窗口)失效,且为对话框启动它本身的消息循环来检索和传递消息。

当对话框应用程序调用EndDialog函数时,DialogBox函数清除对话框户止消息循环,使属主窗口生效(如果以前有效),且返回函数EndDialog调用中的nReSUlt参数。


非模式对话框跟主窗口使用同一个消息循环,而因为非模式对话框的消息会被系统主动调用这个对话框的处理函数来处理,所以在消息循环中不应该再对这个消息进行转换和分发,可以把消息循环改成这样:
// 主消息循环:
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__stdcallFlashWndProc( 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:
returnFALSE; // 没处理过的消息
}

return TRUE; // 处理过的
}

分享到:
评论

相关推荐

    C 对话框DialogBox

    总的来说,“C 对话框DialogBox”是一个关于Windows编程中如何使用`DialogBox`函数创建和管理对话框的主题,涉及到资源的创建、消息处理、以及使用向导辅助开发等多个方面,是理解Windows GUI编程的重要知识点。

    win32编程实例之串口编程

    本实例聚焦于“win32编程实例之串口编程”,旨在帮助开发者掌握如何利用Windows API进行串口通信。Windows API提供了丰富的函数和结构,使得开发者能够创建能够与各种串行设备交互的应用程序。 首先,我们要理解win...

    不用向导建立WIN32 Dialog工程解析

    在Windows编程领域,Win32 API(应用程序接口)是开发者构建桌面应用的基础,而Dialog Box则是其中一种重要的交互元素。本篇文章将详细解析如何在不使用Visual Studio等IDE的向导辅助下,手动创建一个Win32 Dialog...

    WIN32编程 资源

    3. 菜单和对话框:利用菜单栏、快捷菜单和对话框来增强用户体验,通过LoadMenu、AppendMenu、TrackPopupMenu等函数创建和管理菜单,用CreateDialog和DialogBox函数处理对话框。 四、内存管理和文件操作 1. 内存管理...

    window32 API大全 win32编程

    作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的。本书首先对Win32 API函数做完整的概述;然后收录五大类函数:窗口管理、图形设备接口、系统服务、国际特性以及网络服务;...

    Win32编程常用函数

    - **DialogBox`: 显示对话框。 - **GetDlgItem`: 获取对话框控件句柄。 - **SetWindowText`和`GetWindowText`: 设置或获取窗口标题。 - **PostMessage**: 向指定窗口发送消息。 - **_itot`和`_ttoi`: 字符串与整数...

    Win32 Programming程序设计

    《Win32编程程序设计》是一本专注于Windows操作系统平台下的应用程序开发的教程,主要使用Microsoft的C++编译器——Visual C++。该资源包含了丰富的程序设计实例代码,旨在帮助开发者深入理解和掌握Win32 API的使用...

    win32_api_详解(PDF格式超清晰版)

    - **对话框函数(DialogBox)**:创建和管理对话框窗口。 - **编辑控制函数(Edit Control)**:处理文本编辑框。 - **列表框函数(ListBox)**:用于创建和管理列表框控件。 - **菜单函数(Menu)**:用于创建和管理...

    win32对话框tab control控件使用demo

    在Win32 API中,对话框可以通过两种方式创建:模态对话框(通过`DialogBox`函数)和非模态对话框(通过`CreateDialog`函数)。对话框通常包含各种控件,如按钮、文本框、复选框等,而Tab控件是其中一种增强用户界面...

    win32项目模板

    标题《win32项目模板》中所涉及的知识点较为广泛,覆盖了Windows编程中的多个基础概念和元素。以下是对标题、描述和提供的部分内容进行解析的知识点: 1. Win32 API项目模板概念:Win32 API是指Windows 32位应用...

    新编win32api大全.pdf(高清非扫描图片版)

    《新编win32api大全》是一本深入探讨Windows编程接口(Win32 API)的专著,旨在为读者提供全面、系统的学习资料,帮助理解并掌握Windows平台下的应用程序开发技术。Win32 API是微软为Windows操作系统设计的一套应用...

    win32指导资源下载

    `DialogBox`函数用于在程序中显示模态对话框。 - **自动化**:`auto.html`可能涵盖自动化和脚本编写,如使用`SendInput`模拟用户输入或使用`FindWindow`查找特定窗口。 - **外壳编程**:`shell.html`可能涉及...

    Win32 SDK API C++版

    `DialogBox` 和 `CreateDialog` 函数则用于显示模态和非模态对话框。 8. **事件驱动编程**:Win32 API 使用事件驱动编程模型,开发者编写处理特定消息的回调函数,当消息被发送到窗口时,系统会调用相应的回调。 9...

    Win32DlgBasedAppWizard

    对话框(Dialog Box)是Win32 API中的一种用户界面元素,通常用于收集用户输入或显示信息。"Win32Dlg" 标签暗示了这个工具专注于利用Win32 API来处理对话框相关操作。 开发基于Win32对话框的应用程序通常包括以下...

    win32 api chm格式文档

    3. **用户界面元素**:包括菜单、对话框、控件等,如CreateMenu函数用于创建菜单,DialogBox函数可以弹出一个模态对话框,而CreateWindowEx函数则可以创建各种标准控件。 4. **文件系统操作**:如CreateFile、...

    在Win32 DLL中产生对话框的方法

    在Win32 DLL中创建模态对话框主要通过`DialogBox`函数实现。以下是一个简单的示例: ```cpp BOOL CALLBACK DlgProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { // 处理消息 } extern "C" __declspec...

    SDK Win32 API Windows TXT记事本 源代码 VC++6.0

    对话框通常通过`DialogBox`或`CreateDialog`函数创建,提供更复杂的用户交互。 4. **文本处理**:`OpenFile`或`CreateFile`打开或创建文本文件,`ReadFile`和`WriteFile`读写文件内容。对于编辑器,`GetWindowText`...

    WIN32API功能150个(系统对话框篇).e.rar

    2. **LoadDialog** 和 **DialogBox**: 相较于前面的函数,这两个函数从资源中加载对话框模板,更便于资源管理。它们通常用于加载已编译到可执行文件中的对话框资源。 3. **DlgProc**: 每个对话框都有一个关联的消息...

    Win32基本控件

    此外,Win32 API还提供了诸如对话框模板(Dialog Box)、控件的消息映射(Message Mapping)、资源管理(Resource Management)等功能,使得开发者能更方便地组织和管理用户界面。在实际编程中,开发者通常会使用MFC...

    Win32下的定时关机源代码

    在Win32环境中编程,开发者需要了解Windows API(Application Programming Interface),这是微软为开发者提供的一组函数库,用于与操作系统进行交互。定时关机的核心功能主要依赖于以下几个Windows API函数: 1. *...

Global site tag (gtag.js) - Google Analytics