我已經將自定義打印屬性頁/頁面添加到PrintDlgEx顯示的對話框中。這些屬性表當然用於更改其他選項。問題在於,似乎沒有任何文檔化的方式來激活屬性表對話框中的應用按鈕,或者任何地方。這似乎是微軟方面的一大漏洞。有沒有辦法使用PrintDlgEx從打印頁面激活「應用」按鈕?
是否有任何「官方」方式來更改「應用」按鈕的狀態?如果沒有,是否有任何可能的解決方法?
我已經將自定義打印屬性頁/頁面添加到PrintDlgEx顯示的對話框中。這些屬性表當然用於更改其他選項。問題在於,似乎沒有任何文檔化的方式來激活屬性表對話框中的應用按鈕,或者任何地方。這似乎是微軟方面的一大漏洞。有沒有辦法使用PrintDlgEx從打印頁面激活「應用」按鈕?
是否有任何「官方」方式來更改「應用」按鈕的狀態?如果沒有,是否有任何可能的解決方法?
是否有任何「官方」方式來改變Apply按鈕的狀態?如果沒有,是否有任何可能的解決方法?
不直接,沒有。您將不得不手動檢索按鈕的HWND,然後根據需要對其進行處理。
使用SetWindowHookEx()
安裝本地WH_CBT
鉤正在調用PrintDlgEx()
線程。當收到通知時,對話框的HWND將作爲回調函數的參數。然後,您可以在對話框中找到Apply
按鈕的HWND(使用Spy ++或類似工具獲取有關按鈕的詳細信息,然後讓您的代碼使用GetDlgItem()
或FindWindowEx()
獲取按鈕的HWND)。在PrintDlgEx()
退出後(或者至少在完成使用按鈕HWND後),請務必撥打UnhookWindowsHookEx()
。
使用SetWinEventHook()
以註冊EVENT_OBJECT_CREATE
,EVENT_OBJECT_SHOW
,和/或通知EVENT_SYSTEM_DIALOGSTART
(個),正在調用PrintDlgEx()
線程。對話框和按鈕HWNDs將作爲回調函數的參數。 PrintDlgEx()
退出後(或者至少在您完成使用按鈕HWND後),請務必致電UnhookWinEvent()
。
一旦你有了按鈕的HWND,你就可以隨心所欲地做任何事情。這是一個標準的按鈕控制,所以任何標準的按鈕消息/功能都可以使用它。
更接近「官方」的方式是調用PropSheet_Changed()。 我得到屬性表對話框的方式是查看發送到IPrintDialogCallback :: HandleMessage()的PSN_通知的來源。或者你可以使用GetParent(GetParent(generalDialog))。
一旦你調用PropSheet_Changed(),應用按鈕將被激活。
你說得對,這似乎是微軟方面的一個巨大漏洞,因爲編碼並不是一件簡單的事情,但這是大多數人添加屬性表所需要的東西。
我可以把一些代碼,如果任何人需要它。
這非常好!去年我完成了這個項目,但當時我沒有注意到MSDN上的屬性表參考頁中的宏。 – DOS
是的,我也在想類似的東西,但我的想法並不好。謝謝! – DOS