• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision10291 (tree)
Time2022-10-01 13:11:49
Authorzmatsuo

Log Message

ウィンドウの角を丸くしない チェックボックスを無効にする条件を見直した

- 修正前

- DwmSetWindowAttribute() API が存在しないとき
- Vista より前で無効になっていた

- 次の時に無効とする

- DwmGetWindowAttribute() API が存在しないとき
- または、DwmGetWindowAttribute(DWMWA_WINDOW_CORNER_PREFERENCE) の戻り値が S_OK 以外の時

- 角が丸くなるのは Windows 11 10.0.22000以降

Change Summary

Incremental Difference

--- trunk/teraterm/common/compat_win.cpp (revision 10290)
+++ trunk/teraterm/common/compat_win.cpp (revision 10291)
@@ -103,6 +103,7 @@
103103
104104 // dwmapi.dll
105105 HRESULT (WINAPI *pDwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);
106+HRESULT (WINAPI *pDwmGetWindowAttribute)(HWND hwnd, DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute);
106107
107108 class Initializer {
108109 public:
@@ -245,6 +246,7 @@
245246
246247 static const APIInfo Lists_dwmapi[] = { // Windows Vista or later
247248 { "DwmSetWindowAttribute", (void **)&pDwmSetWindowAttribute },
249+ { "DwmGetWindowAttribute", (void **)&pDwmGetWindowAttribute },
248250 {},
249251 };
250252
--- trunk/teraterm/common/compat_win.h (revision 10290)
+++ trunk/teraterm/common/compat_win.h (revision 10291)
@@ -70,8 +70,9 @@
7070 #endif
7171
7272 // 10.0.22000 or later
73+#if !defined(_DWMAPI_H_)
74+#define _DWMAPI_H_
7375 #define DWMWA_WINDOW_CORNER_PREFERENCE 33
74-#if !defined(DWM_WINDOW_CORNER_PREFERENCE)
7576 typedef enum {
7677 DWMWCP_DEFAULT = 0,
7778 DWMWCP_DONOTROUND = 1,
@@ -210,6 +211,7 @@
210211
211212 // dwmapi.dll
212213 extern HRESULT (WINAPI *pDwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);
214+extern HRESULT (WINAPI *pDwmGetWindowAttribute)(HWND hwnd, DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute);
213215
214216 void WinCompatInit();
215217
--- trunk/teraterm/teraterm/addsetting.cpp (revision 10290)
+++ trunk/teraterm/teraterm/addsetting.cpp (revision 10291)
@@ -33,7 +33,7 @@
3333 #include <stdio.h>
3434 #include <windows.h>
3535 #include <commctrl.h>
36-#include <time.h>
36+#include <dwmapi.h>
3737 #define _CRTDBG_MAP_ALLOC
3838 #include <stdlib.h>
3939 #include <crtdbg.h>
@@ -790,9 +790,17 @@
790790 SetCheck(IDC_CHECK_FAST_SIZE_MOVE, ts.EtermLookfeel.BGFastSizeMove != 0);
791791 SetCheck(IDC_CHECK_FLICKER_LESS_MOVE, ts.EtermLookfeel.BGNoCopyBits != 0);
792792
793+ // ウィンドウの角を丸くしない
793794 SetCheck(IDC_CHECK_CORNERDONTROUND, (ts.WindowCornerDontround) != 0);
794- if (pDwmSetWindowAttribute == NULL) {
795- EnableDlgItem(IDC_CHECK_CORNERDONTROUND, FALSE);
795+ {
796+ DWM_WINDOW_CORNER_PREFERENCE preference;
797+ if (pDwmGetWindowAttribute == NULL ||
798+ pDwmGetWindowAttribute(HVTWin, DWMWA_WINDOW_CORNER_PREFERENCE, &preference, sizeof(preference)) != S_OK) {
799+ // ウィンドウの角を丸くしないに対応していないなら disable にする
800+ // DwmGetWindowAttribute() API がない or
801+ // DwmGetWindowAttribute(DWMWA_WINDOW_CORNER_PREFERENCE) で S_OK が返らない
802+ EnableDlgItem(IDC_CHECK_CORNERDONTROUND, FALSE);
803+ }
796804 }
797805
798806 // ダイアログにフォーカスを当てる
@@ -1185,6 +1193,7 @@
11851193 ts.EtermLookfeel.BGFastSizeMove = GetCheck(IDC_CHECK_FAST_SIZE_MOVE);
11861194 ts.EtermLookfeel.BGNoCopyBits = GetCheck(IDC_CHECK_FLICKER_LESS_MOVE);
11871195
1196+ // ウィンドウの角を丸くしない
11881197 if (ts.WindowCornerDontround != GetCheck(IDC_CHECK_CORNERDONTROUND)) {
11891198 ts.WindowCornerDontround = GetCheck(IDC_CHECK_CORNERDONTROUND);
11901199 if (pDwmSetWindowAttribute != NULL) {
Show on old repository browser