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
可确保窗口在对象销毁之前消失。
CDialogImpl
从 CDialogImplBaseT
派生,而后者则从 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
会被设置为对话框过程,进一步的调用就会转到该处。