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
指定對話框範本資源識別碼的成員。 例如,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::D estroyWindow
終結無模式對話框。
BOOL DestroyWindow();
傳回值
如果對話框已成功終結,則為TRUE;否則為 FALSE。
備註
如果對話框成功終結,則會傳回 TRUE;否則為 FALSE。
CDialogImpl::D ialogProc
此靜態函式會實作對話框程式。
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::D oModal
建立強制響應對話方塊。
INT_PTR DoModal(
HWND hWndParent = ::GetActiveWindow(),
LPARAM dwInitParam = NULL);
參數
hWndParent
[in]擁有者視窗的句柄。 預設值是 GetActiveWindow Win32 函式的傳回值。
dwInitParam
[in]指定要傳遞至WM_INITDIALOG訊息之 lParam 參數中的對話框的值。
傳回值
如果成功,呼叫 EndDialog 中指定的 nRetCode 參數值。 否則為 -1。
備註
這個對話框會自動附加至 CDialogImpl
物件。
若要建立無模式對話框,請呼叫 [建立]。
CDialogImpl::EndDialog
終結強制回應對話框。
BOOL EndDialog(int nRetCode);
參數
nRetCode
[in]CDialogImpl::D oModal 所傳回的值。
傳回值
如果對話框已終結,則為TRUE;否則為 FALSE。
備註
EndDialog
必須透過對話框程式呼叫。 終結對話框之後,Windows 會使用 nRetCode 的值做為 的傳回值DoModal
,以建立對話方塊。
注意
請勿呼叫 EndDialog
來終結無模式對話方塊。 請改為呼叫 CWindow::D estroyWindow 。
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
會設定為對話框程式,然後進一步呼叫。