我有一個帶有浮動視窗的 Windows 應用程式。我在多顯示幕設定(FHD、4K)上運行它。該應用程式被標記為系統感知,因此我們選擇主監視器的當前 DPI 值并根據該值進行縮放。之后,作業系統位圖縮放它。該應用程式在 Windows 10 上運行。
現在,當一個浮動視窗被拖動到另一臺顯示幕時,作業系統位圖會自動對其進行縮放,并且一切正常。
問題是我們有一些沒有標題欄的視窗,我們有代碼可以通過從視窗的客戶區拖動來移動這些視窗。當滑鼠被釋放時,我們呼叫MoveWindow()API 將視窗移動到目標位置。這在單個顯示幕上作業正常,但是當我們將視窗放在不同的顯示幕上時,它沒有位圖縮放,它似乎丟失了它的放置位置。當我們通過標題欄拖動視窗時,作業系統似乎只進行位圖縮放,而不是在以編程方式移動視窗時。
關于以編程方式移動視窗時如何實作這種自動縮放的任何想法?
uj5u.com熱心網友回復:
所以這取決于視窗是如何創建的。我通過使用WS_CAPTION樣式創建視窗然后稍后洗掉該樣式來修復它。我不確定內部做了什么,但是當它通過滑鼠拖動或使用諸如MoveWindow.
::CreateWindowEx(WS_EX_PALETTEWINDOW,...,..., WS_POPUP | WS_CAPTION,...);
::SetWindowLong(hWnd, GWL_STYLE, ::GetWindowLong(hWnd, GWL_STYLE) & ~WS_CAPTION);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314748.html
上一篇:使用SetWinEventHook()時如何定義訊息回圈?
下一篇:您能否從基本Win32控制臺模板應用程式中的C#/Winrt組件呼叫(不是WinForm/抽象/包裝器或使用C /Winrt模板)?)
