LPOFNHOOKPROC 回呼函式 (commdlg.h)
[從 Windows Vista 開始,通用專案對話方塊已取代 [開啟 ] 和 [另存 新 檔 ] 通用對話方塊。 建議您使用通用專案對話方塊 API,而不是來自通用對話方塊程式庫的這些對話方塊。
接收從對話方塊傳送的通知訊息。 函式也會接收您藉由指定子對話方塊範本所定義之任何其他控制項的訊息。 OFNHookProc攔截程式是應用程式定義或程式庫定義的回呼函式,可與 Explorer 樣式的[開啟] 和 [另存新檔] 對話方塊搭配使用。
LPOFNHOOKPROC類型會定義這個回呼函式的指標。 OFNHookProc 是應用程式定義函數名稱的預留位置。
語法
LPOFNHOOKPROC Lpofnhookproc;
UINT_PTR Lpofnhookproc(
HWND unnamedParam1,
UINT unnamedParam2,
WPARAM unnamedParam3,
LPARAM unnamedParam4
)
{...}
參數
unnamedParam1
[ 開啟 ] 或 [ 另存新 檔] 對話方塊之子對話方塊的控制碼。 使用 GetParent 函式來取得 [ 開啟 ] 或 [ 另存新 檔] 對話方塊的控制碼。
unnamedParam2
正在接收之訊息的識別碼。
unnamedParam3
有關訊息的其他資訊。 確切的意義取決於 unnamedParam2 參數的值。
unnamedParam4
有關訊息的其他資訊。 確切的意義取決於 unnamedParam2 參數的值。 如果 unnamedParam2 參數指出 WM_INITDIALOG 訊息, unnamedParam4 是 OPENFILENAME 結構的指標,其中包含建立對話方塊時所指定的值。
傳回值
如果攔截程式傳回零,則預設對話方塊程式會處理訊息。
如果攔截程式傳回非零值,則預設對話方塊程式會忽略訊息。
針對 CDN_SHAREVIOLATION 和 CDN_FILEOK 通知訊息,攔截程式應該會傳回非零值,以指出它已使用 SetWindowLong 函式來設定非零 值DWL_MSGRESULT 值。
備註
如果您在建立[開啟] 或[另存新檔] 對話方塊時未指定OFN_EXPLORER旗標,而且您想要攔截程式,則必須使用舊樣式的 OFNHookProcOldStyle攔截程式。 在此情況下,對話方塊會有舊樣式的使用者介面。
當您使用GetOpenFileName或GetSaveFileName函式來建立 Explorer 樣式的 [開啟] 或[另存新檔] 對話方塊時,您可以提供OFNHookProc攔截程式。 若要啟用攔截程式,請使用您傳遞至對話方塊建立函式的 OPENFILENAME 結構。 在lpfnHook成員中指定攔截程式的指標,並在Flags成員中指定OFN_ENABLEHOOK旗標。
如果您提供 Explorer 樣式通用對話方塊的勾點程式,系統會建立對話方塊,這是預設對話方塊的子系。 攔截程式可作為子對話的對話方塊程式。 這個子對話方塊是以您在 OPENFILENAME 結構中指定的範本為基礎,如果沒有指定任何範本,則為預設子對話。 當預設對話方塊程式正在處理其 WM_INITDIALOG 訊息時,就會建立子對話。 在子對話處理自己的 WM_INITDIALOG 訊息之後,預設對話程式會視需要移動標準控制項,以便為子對話的任何其他控制項提供空間。 系統接著會將 CDN_INITDONE 通知訊息傳送至攔截程式。
攔截程式不會接收用於預設對話方塊之標準控制項的訊息。 您可以子類別化標準控制項,但不建議這樣做,因為它可能會讓您的應用程式與更新版本不相容。 不過,Explorer 樣式的一般對話方塊會提供一組訊息,讓攔截程式可用來監視和控制對話方塊。 其中包括一組從對話方塊傳送的通知訊息,以及您可以從對話中傳送以擷取資訊的訊息。 如需這些訊息的完整清單,請參閱 Explorer-Style Hook Procedures。
如果攔截程式處理 WM_CTLCOLORDLG 訊息,它必須傳回有效的筆刷控制碼,才能繪製對話方塊的背景。 一般而言,如果處理任何 WM_CTLCOLOR* 訊息,它必須傳回有效的筆刷控制碼,才能繪製指定控制項的背景。
請勿從攔截程式呼叫 EndDialog 函式。 相反地,攔截程式可以呼叫PostMessage函式,將具有IDCANCEL值的WM_COMMAND訊息張貼至對話方塊程式。 張貼 IDCANCEL 會關閉對話方塊,並讓對話方塊函式傳回 FALSE。 如果您需要知道攔截程式為何關閉對話方塊,您必須在攔截程式與應用程式之間提供自己的通訊機制。
規格需求
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | commdlg.h (包含 Windows.h) |
另請參閱
概念
參考