Skip to content

Commit d71c8c8

Browse files
committed
[windows] Implement getTitleBarHeight methods #34
1 parent 0483433 commit d71c8c8

File tree

4 files changed

+33
-0
lines changed

4 files changed

+33
-0
lines changed

example/lib/pages/home.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,15 @@ class _HomePageState extends State<HomePage> with WindowListener {
423423
),
424424
onTap: () {},
425425
),
426+
PreferenceListItem(
427+
title: Text('getTitleBarHeight'),
428+
onTap: () async {
429+
int titleBarHeight = await windowManager.getTitleBarHeight();
430+
BotToast.showText(
431+
text: 'titleBarHeight: $titleBarHeight',
432+
);
433+
},
434+
),
426435
PreferenceListItem(
427436
title: Text('setSkipTaskbar'),
428437
onTap: () async {

lib/src/window_manager.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,10 @@ class WindowManager {
328328
await _channel.invokeMethod('setTitleBarStyle', arguments);
329329
}
330330

331+
Future<int> getTitleBarHeight() async {
332+
return await _channel.invokeMethod('getTitleBarHeight');
333+
}
334+
331335
/// Makes the window not show in the taskbar / dock.
332336
Future<void> setSkipTaskbar(bool isSkipTaskbar) async {
333337
final Map<String, dynamic> arguments = {

windows/window_manager.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ class WindowManager
7979
std::string WindowManager::GetTitle();
8080
void WindowManager::SetTitle(const flutter::EncodableMap &args);
8181
void WindowManager::SetTitleBarStyle(const flutter::EncodableMap &args);
82+
int WindowManager::GetTitleBarHeight();
8283
void WindowManager::SetSkipTaskbar(const flutter::EncodableMap &args);
8384
bool WindowManager::HasShadow();
8485
void WindowManager::SetHasShadow(const flutter::EncodableMap &args);
@@ -532,6 +533,19 @@ void WindowManager::SetTitleBarStyle(const flutter::EncodableMap &args)
532533
SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
533534
}
534535

536+
int WindowManager::GetTitleBarHeight()
537+
{
538+
HWND hWnd = GetMainWindow();
539+
540+
TITLEBARINFOEX *ptinfo = (TITLEBARINFOEX *)malloc(sizeof(TITLEBARINFOEX));
541+
ptinfo->cbSize = sizeof(TITLEBARINFOEX);
542+
SendMessage(hWnd, WM_GETTITLEBARINFOEX, 0, (LPARAM)ptinfo);
543+
int height = ptinfo->rcTitleBar.bottom - ptinfo->rcTitleBar.top;
544+
free(ptinfo);
545+
546+
return height;
547+
}
548+
535549
void WindowManager::SetSkipTaskbar(const flutter::EncodableMap &args)
536550
{
537551
bool is_skip_taskbar = std::get<bool>(args.at(flutter::EncodableValue("isSkipTaskbar")));

windows/window_manager_plugin.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,12 @@ void WindowManagerPlugin::HandleMethodCall(const flutter::MethodCall<flutter::En
413413
window_manager->SetTitleBarStyle(args);
414414
result->Success(flutter::EncodableValue(true));
415415
}
416+
else if (method_name.compare("getTitleBarHeight") == 0)
417+
{
418+
int value = window_manager->GetTitleBarHeight();
419+
result->Success(flutter::EncodableValue(value));
420+
}
421+
416422
else if (method_name.compare("setSkipTaskbar") == 0)
417423
{
418424
const flutter::EncodableMap &args = std::get<flutter::EncodableMap>(*method_call.arguments());

0 commit comments

Comments
 (0)