From f6fe6c9558412be991cd07ff3448f56c2a5c2629 Mon Sep 17 00:00:00 2001 From: fanchenio Date: Tue, 7 Nov 2023 10:33:42 +0800 Subject: [PATCH] Optimization window --- cargo.toml | 1 + electron/main/about/index.ts | 1 - electron/main/classification/index.ts | 4 ---- electron/main/data/index.ts | 1 - electron/main/item/index.ts | 3 --- electron/main/main/index.ts | 5 ++++- electron/main/setting/index.ts | 1 - rust/lib.rs | 9 +++++++++ rust/windows.rs | 26 +++++++++++++++++++++++--- 9 files changed, 37 insertions(+), 14 deletions(-) diff --git a/cargo.toml b/cargo.toml index 8b3e373..29fc1c3 100644 --- a/cargo.toml +++ b/cargo.toml @@ -30,6 +30,7 @@ features = [ "Win32_System_Environment", "Win32_UI_Input_Ime", "Win32_Globalization", + "Win32_Graphics_Dwm", ] [build-dependencies] diff --git a/electron/main/about/index.ts b/electron/main/about/index.ts index 3038e2f..75fcda1 100644 --- a/electron/main/about/index.ts +++ b/electron/main/about/index.ts @@ -18,7 +18,6 @@ function createWindow() { parent: global.mainWindow, height: 212, width: 600, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, diff --git a/electron/main/classification/index.ts b/electron/main/classification/index.ts index c4b039f..c5465dd 100644 --- a/electron/main/classification/index.ts +++ b/electron/main/classification/index.ts @@ -43,7 +43,6 @@ function createAddEditWindow(id: number | null, parentId: number | null) { parent: global.mainWindow, height: 174, width: 400, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, @@ -108,7 +107,6 @@ function createSetIconWindow(id: number) { parent: global.mainWindow, height: 500, width: 358, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, @@ -168,7 +166,6 @@ function createAssociateFolderWindow(id: number) { parent: global.mainWindow, height: 249, width: 400, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, @@ -233,7 +230,6 @@ function createAggregateWindow(id: number) { parent: global.mainWindow, height: 144, width: 400, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, diff --git a/electron/main/data/index.ts b/electron/main/data/index.ts index 08085ec..200b1f8 100644 --- a/electron/main/data/index.ts +++ b/electron/main/data/index.ts @@ -19,7 +19,6 @@ function createBackupRestoreDataWindow() { parent: global.mainWindow, height: 108, width: 400, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, diff --git a/electron/main/item/index.ts b/electron/main/item/index.ts index 54fda4b..f02f441 100644 --- a/electron/main/item/index.ts +++ b/electron/main/item/index.ts @@ -51,7 +51,6 @@ async function createAddEditWindow( parent: global.mainWindow, height: 500, width: 600, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, @@ -112,7 +111,6 @@ async function createNetworkIconWindow() { parent: global.itemAddEditWindow, height: 230, width: 400, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, @@ -164,7 +162,6 @@ async function createSVGIconWindow() { parent: global.itemAddEditWindow, height: 230, width: 400, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, diff --git a/electron/main/main/index.ts b/electron/main/main/index.ts index 3a518d5..2bc798f 100644 --- a/electron/main/main/index.ts +++ b/electron/main/main/index.ts @@ -30,7 +30,6 @@ function createMainWindow() { title: "Dawn Launcher", width: 800, height: 600, - type: "toolbar", frame: false, show: false, maximizable: false, @@ -56,6 +55,10 @@ function createMainWindow() { } // 加载完毕 mainWindow.webContents.on("did-finish-load", () => { + // 设置窗口无动画 + global.addon.removeWindowAnimation( + mainWindow.getNativeWindowHandle().readInt32LE(0) + ); // 恢复上一次的位置 let bounds = cacheData.cacheStore.get("mainWindowBounds"); if (bounds) { diff --git a/electron/main/setting/index.ts b/electron/main/setting/index.ts index 1ef1a86..570a77b 100644 --- a/electron/main/setting/index.ts +++ b/electron/main/setting/index.ts @@ -28,7 +28,6 @@ function createSettingWindow() { parent: global.mainWindow, height: 500, width: 600, - type: "toolbar", maximizable: false, minimizable: false, resizable: false, diff --git a/rust/lib.rs b/rust/lib.rs index 8f2e460..ddf401a 100644 --- a/rust/lib.rs +++ b/rust/lib.rs @@ -165,3 +165,12 @@ pub fn get_clipboard_bitmap_base64() -> Option { pub fn empty_recycle_bin(window: i32) { windows::empty_recycle_bin(window) } + +/** + * 去掉窗口动画 + */ +#[allow(dead_code)] +#[napi] +pub fn remove_window_animation(window: i32) { + windows::remove_window_animation(window); +} diff --git a/rust/windows.rs b/rust/windows.rs index ba1487c..04a179c 100644 --- a/rust/windows.rs +++ b/rust/windows.rs @@ -18,9 +18,12 @@ use windows::{ w, Win32::{ Foundation::{HWND, LPARAM, LRESULT, MAX_PATH, POINT, RECT, SIZE, WPARAM}, - Graphics::Gdi::{ - GetMonitorInfoW, GetObjectW, MonitorFromWindow, BITMAP, MONITORINFO, - MONITOR_DEFAULTTONEAREST, + Graphics::{ + Dwm::{DwmSetWindowAttribute, DWMWA_TRANSITIONS_FORCEDISABLED}, + Gdi::{ + GetMonitorInfoW, GetObjectW, MonitorFromWindow, BITMAP, MONITORINFO, + MONITOR_DEFAULTTONEAREST, + }, }, Storage::FileSystem::SearchPathW, System::{ @@ -671,3 +674,20 @@ pub fn empty_recycle_bin(window: i32) { let _ = SHEmptyRecycleBinW(hwnd, None, SHERB_NOSOUND); }; } + +/** + * 去掉窗口动画 + */ +pub fn remove_window_animation(window: i32) { + // HWND + let hwnd = HWND(window as isize); + let pvattribute = &mut true as *mut _ as *const _; + unsafe { + let _ = DwmSetWindowAttribute( + hwnd, + DWMWA_TRANSITIONS_FORCEDISABLED, + pvattribute, + std::mem::size_of_val(&pvattribute) as u32, + ); + }; +}