Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- Flutter
- bloc
- BOF
- Kaggle
- study book
- Stream
- fastapi를 사용한 파이썬 웹 개발
- MATLAB
- Dreamhack
- BFS
- C++
- DART
- 영상처리
- system hacking
- Widget
- ARM
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- Computer Architecture
- llm을 활용 단어장 앱 개발일지
- FastAPI
- Image Processing
- MDP
- Got
- Algorithm
- PCA
- rao
- pytorch
- 백준
- BAEKJOON
- ML
Archives
- Today
- Total
Bull
[Flutter::Window] win32 MessageBox 출력해보기 (Level 1 : 구현) 본문
Software Framework/Flutter
[Flutter::Window] win32 MessageBox 출력해보기 (Level 1 : 구현)
Bull_ 2024. 7. 31. 14:18Flutter에서는 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
메소드를 호출하면 된다.
'Software Framework > Flutter' 카테고리의 다른 글
[Flutter] keyboard 입력받기 Web, Window, ... (Level 1 : 구현) (0) | 2024.08.06 |
---|---|
[Flutter] copyWith 메소드의 역할 (0) | 2024.08.06 |
[Flutter::Widget] Bottom Menu Dropdown 만들어보자. (0) | 2024.07.27 |
[Flutter::Widget] 채팅 UI를 만들어 봅시다! (0) | 2024.07.25 |
[Flutter::Animation] Hero 기법 (1) | 2024.07.25 |