CDialogImpl 类

此类提供用于创建模式或无模式对话框的方法。

重要

无法在 Windows 运行时中执行的应用程序中使用此类及其成员。

语法

template <class T,
    class TBase = CWindow>
    class ATL_NO_VTABLE CDialogImpl : public CDialogImplBaseT<TBase>

参数

T
你的类,派生自 CDialogImpl

TBase
新类的基类。 默认基类为 CWindow

成员

方法

函数 说明
创建 创建无模式对话框。
DestroyWindow 销毁无模式对话框。
DoModal 创建模式对话框。
EndDialog 销毁模式对话框。

CDialogImplBaseT 方法

函数 说明
GetDialogProc 返回当前对话框过程。
MapDialogRect 将指定矩形的对话框单位映射到屏幕单位(像素)。
OnFinalMessage 在收到最后一条消息(通常为 WM_NCDESTROY)后调用。

静态函数

函数 说明
DialogProc 处理发送到对话框的消息。
StartDialogProc 在收到第一条消息时调用,用于处理发送到对话框的消息。

注解

使用 CDialogImpl,你可以创建有模式或无模式对话框。 CDialogImpl 提供对话框过程,它使用默认消息映射将消息定向到相应的处理程序。

基类析构函数 ~CWindowImplRoot 可确保窗口在对象销毁之前消失。

CDialogImplCDialogImplBaseT 派生,而后者则从 CWindowImplRoot 派生。

注意

类必须定义一个 IDD 成员,该成员指定对话框模板资源 ID。 例如,ATL 项目向导会自动将以下行添加到类:

enum { IDD = IDD_MYDLG };

其中,MyDlg 是在向导的“名称”页中输入的“短名称”

有关 请参阅
创建控件 ATL 教程
在 ATL 中使用对话框 ATL 窗口类
ATL 项目向导 创建 ATL 项目
对话框 Windows SDK 中的对话框和后续主题

要求

标头:atlwin.h

CDialogImpl::Create

创建无模式对话框。

HWND Create(
    HWND hWndParent,
    LPARAM dwInitParam = NULL );

HWND Create(
    HWND hWndParent,
    RECT&,
    LPARAM dwInitParam = NULL);

参数

hWndParent
[in] 所有者窗口的句柄。

RECT& rect [in] 指定 对话框的大小和位置的 RECT 结构。

dwInitParam
[in] 在 WM_INITDIALOG 消息的 lParam 参数中指定要传递到对话框的值。

返回值

新创建的对话框的句柄。

注解

此对话框会自动附加到 CDialogImpl 对象。 创建模型对话框,调用 DoModal。 上述第二个重写仅与 CComControl 配合使用。

CDialogImpl::DestroyWindow

销毁无模式对话框。

BOOL DestroyWindow();

返回值

如果对话框已成功销毁,则为 TRUE;否则为 FALSE。

注解

如果对话框已成功销毁,则返回 TRUE;否则返回 FALSE。

CDialogImpl::DialogProc

此静态函数实现对话框过程。

static LRESULT CALLBACK DialogProc(
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

参数

hWnd
[in] 对话框的句柄。

uMsg
[in] 发送到对话框的消息。

wParam
[in] 其他的消息特定信息。

lParam
[in] 其他的消息特定信息。

返回值

如果消息已处理,则为 TRUE;否则为 FALSE。

备注

DialogProc 使用默认消息映射将消息定向到相应的处理程序。

可以替代 DialogProc 以提供不同的消息处理机制。

CDialogImpl::DoModal

创建模式对话框。

INT_PTR DoModal(
    HWND hWndParent = ::GetActiveWindow(),
    LPARAM dwInitParam = NULL);

参数

hWndParent
[in] 所有者窗口的句柄。 默认值为 GetActiveWindow Win32 函数的返回值。

dwInitParam
[in] 在 WM_INITDIALOG 消息的 lParam 参数中指定要传递到对话框的值。

返回值

如果成功,则为调用 EndDialog 时指定的 nRetCode 参数的值。 否则,为 -1。

注解

此对话框会自动附加到 CDialogImpl 对象。

若要创建无模式对话框,请调用 Create

CDialogImpl::EndDialog

销毁模式对话框。

BOOL EndDialog(int nRetCode);

参数

nRetCode
[in] 要由 CDialogImpl::DoModal 返回的值。

返回值

如果对话框被销毁,则为 TRUE;否则为 FALSE。

注解

EndDialog 必须通过对话框过程调用。 销毁对话框后,Windows 将使用 nRetCode 的值作为创建了对话框的 DoModal 的返回值。

注意

请勿调用 EndDialog 销毁无模式对话框。 改为调用 CWindow::DestroyWindow

CDialogImpl::GetDialogProc

返回 DialogProc,即当前对话框过程。

virtual WNDPROC GetDialogProc();

返回值

当前对话框过程。

备注

重写此方法以将对话框过程替换为你自己的对话框过程。

CDialogImpl::MapDialogRect

将指定矩形的对话框单位转换为(映射到)屏幕单位(像素)。

BOOL MapDialogRect(LPRECT lpRect);

参数

lpRect
指向一个 CRect 对象或 RECT 结构,该结构将接收包含更新区域的更新的客户端坐标。

返回值

如果更新成功,则为非零值;如果更新失败,则为 0。 若要获得扩展的错误信息,请调用 GetLastError

注解

该函数将指定的 RECT 结构中的坐标替换为转换后的坐标,后者允许使用该结构创建对话框或将控件置于对话框中。

CDialogImpl::OnFinalMessage

在收到最后一条消息(通常为 WM_NCDESTROY)以后调用。

virtual void OnFinalMessage(HWND hWnd);

参数

hWnd
[in] 正在销毁的窗口的句柄。

注解

请注意,如果要在窗口销毁时自动删除对象,可在此处调用 delete this;

CDialogImpl::StartDialogProc

仅在收到第一条消息时调用一次,用于处理发送到对话框的消息。

static LRESULT CALLBACK StartDialogProc(
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

参数

hWnd
[in] 对话框的句柄。

uMsg
[in] 发送到对话框的消息。

wParam
[in] 其他的消息特定信息。

lParam
[in] 其他的消息特定信息。

返回值

窗口过程。

备注

初次调用 StartDialogProc 后,DialogProc 会被设置为对话框过程,进一步的调用就会转到该处。

另请参阅

BEGIN_MSG_MAP
类概述