Software Framework/Flutter
[Flutter::Window] win32 MessageBox 출력해보기 (Level 1 : 구현)
Bull_
2024. 7. 31. 14:18

Flutter에서는 win32 패키지를 통해서 실제 win32 api 를 호출할 수 있다. win32 패키지에 대해서 자세히 알아보진 않았지만 우선 win32 를 통해 MessageBox 이벤트를 호출하는 프로그램을 만들어보자.
Level 1 : 구현
Level 1 : 구현단계에서는 코드에 대한 자세한 설명과 원리는 거의 없고 A는 B이다 형식의 설명입니다.
CODE
windows_message_box.dart
import 'package:win32/win32.dart';
class WindowsApi {
static void showMessageBox(String text, String caption) {
final textPtr = TEXT(text);
final captionPtr = TEXT(caption);
MessageBox(0, textPtr, captionPtr, 0);
free(textPtr);
free(captionPtr);
}
}
짧은 예제라서 파일을 구분할 필요는 없지만 Win32가 독립적인 시스템인 만큼 이번에는 OOP적인 코드로 작성했다.
int MessageBox(
int hWnd,
Pointer<Utf16> lpText,
Pointer<Utf16> lpCaption,
int uType,
)

MessageBox는 win32 의 함수이다. 실제 C++에서 win32의 MessageBox와 거의 똑같다. (정말 같은 건지는 잘 모르겠다.)
- hWnd
- 설명: 메시지 박스의 소유자를 지정합니다. 일반적으로 부모 윈도우의 핸들을 전달합니다. 0 또는 NULL을 전달하면 메시지 박스는 소유자가 없는 것으로 간주됩니다.
- 예시: 0 또는 NULL (소유자가 없는 메시지 박스), 특정 윈도우 핸들.
- lpText
- 설명: 메시지 박스에 표시할 텍스트 문자열의 포인터입니다.
- 예시: 'Hello, World!' (표시할 메시지).
- lpCaption
- 설명: 메시지 박스 제목 표시줄에 표시할 캡션 문자열의 포인터입니다.
- 예시: 'Flutter Windows API' (메시지 박스의 제목).
- uType
- 설명: 메시지 박스의 스타일 및 행동을 지정하는 플래그입니다. 여러 값을 조합하여 사용할 수 있습니다. 버튼, 아이콘, 기본 버튼, 모달 모드를 지정할 수 있습니다.
- 예시:
- MB_OK (0x00000000): "확인" 버튼만 있는 메시지 박스.
- MB_OKCANCEL (0x00000001): "확인" 및 "취소" 버튼이 있는 메시지 박스.
- MB_YESNO (0x00000004): "예" 및 "아니오" 버튼이 있는 메시지 박스.
- MB_ICONEXCLAMATION (0x00000030): 느낌표 아이콘을 표시합니다.
- MB_ICONINFORMATION (0x00000040): 정보 아이콘을 표시합니다.
- MB_DEFBUTTON1 (0x00000000): 첫 번째 버튼을 기본 버튼으로 설정합니다.
- MB_DEFBUTTON2 (0x00000100): 두 번째 버튼을 기본 버튼으로 설정합니다.
textPtr과 captionPtr은 포인터이기 때문에 반드시 할당을 해제 해주어야 한다.
main.dart
import 'package:flutter/material.dart';
import 'windows_message_box.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Windows API Example'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Text('Check your Windows message box!'),
),
ElevatedButton(
child: Text('Show Message Box'),
onPressed: () {
WindowsApi.showMessageBox(
'Hello, World!', 'Flutter Windows API');
},
),
],
),
),
);
}
}
이제 버튼으 눌렀을 때 MessageBox가 나오도록 win32 api를 호출하는 함수를 구현한 showMessageBox 메소드를 호출하면 된다.