일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스토어드 프로시저
- binary search
- MYSQL
- 이진탐색
- 다익스트라
- Dijkstra
- two pointer
- Stored Procedure
- Brute Force
- 그래프
- union find
- Trie
- Two Points
- SQL
- DP
- Hash
- String
Archives
- Today
- Total
codingfarm
3. 메시지 박스 (Message Box) 본문
메시지 박스 : 조그만 별도의 윈도우를 열어서 사용자에게 정보를 전달하거나 질문을 하는 장치
MessageBox 함수 호출 한번으로 비교적 간단하게 만들 수 있다.
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
매개변수 | 기능 |
hWnd | $\bullet$ 메시지 박스의 오너(Owner) 윈도우 $\bullet$ 메시지 박스가 떠 있는동안 오너 윈도우는 사용할 수 없는 상태가 된다. |
lpText | 메시지 박스에 출력할 문자열 |
lpCaption | 메시지 박스의 타이틀 바에 나타날 제목 문자열 |
uType | 메시지 박스에 어떤 종류의 버튼이 나타날 것인가를 지정하는 여러가지 플래그들 |
uType에 심을 수 있는 값은 아래와 같다.
값 | 설명 |
MB_ABORTRETRYIGNORE | Abort, Retry, Ignore 세 개의 버튼이 나타난다. |
MB_OK | OK 버튼 하나만 나타난다. |
MB_OKCANCEL | OK, Cancel 두 개의 버튼이 나타난다. |
MB_RETRYCANCEL | Retry, Cancel 두 개의 버튼이 나타난다. |
MB_YESNO | Yes, No 두 개의 버튼이 나타난다. |
MB_YESNOCANCEL | Yes, No, Cancel 세 개의 버튼이 나타난다. |
버튼 종류를 지정하는 값 외에 아이콘을 출력하는 다음과같은 플로그도 사용할 수 있다.
버튼 종류 플로그와 아이콘 ㅡㄹ래그를 OR연산자로 연결하여 uType 인수에 지정한다.
값 | 아이콘 |
MB_ICONEXCLAMATION MB_ICONWARNING |
|
MB_ICONINFORMATION MB_ICONASTERISK |
|
MB_ICONQUESTION | |
MB_ICONSTOP MB_ICONERROR MB_ICONHAND |
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("TextOut");
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance
, LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = (WNDPROC)WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&Message, 0, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (iMessage) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_LBUTTONDOWN:
MessageBox(hWnd, TEXT("마우스 왼쪽 버튼을 눌렀습니다."),
TEXT("메시지 박스"), MB_ICONINFORMATION | MB_RETRYCANCEL);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
위 코드를 실행하여 나온 window 창에서 좌클릭을 하면 아래와 같은 메시지 박스가 출력된다.
MessageBox의 리턴함수를 통해 통해 사용자가 메시지박스에서 어떤 버튼을 눌렀는지 알 수 있다.
값 | 설명 |
IDABORT | Abort버튼을 눌렀다. |
IDCANCEL | Cancel 버튼을 눌렀다. |
IDIGNORE | Ignore 버튼을 눌렀다. |
IDNO | No버튼을 눌렀다. |
IDOK | OK 버튼을 눌렀다. |
IDRETRY | Retry 버튼을 눌렀다. |
IDYES | Yes 버튼을 눌렀다. |
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("TextOut");
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance
, LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = (WNDPROC)WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&Message, 0, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (iMessage) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_LBUTTONDOWN:
int ret = MessageBox(hWnd, TEXT("마우스 왼쪽 버튼을 눌렀습니다."),
TEXT("메시지 박스"), MB_ICONINFORMATION | MB_RETRYCANCEL);
hdc = GetDC(hWnd);
SetTextAlign(hdc, TA_CENTER);
switch (ret) {
case IDRETRY:
TextOut(hdc, 100, 100, TEXT("Retry Click"),11);
break;
case IDCANCEL:
TextOut(hdc, 100, 100, TEXT("Cancel Click"), 12);
break;
}
ReleaseDC(hWnd, hdc);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
위 코드는 어느 버튼이 눌렸는지 화면의 출력을 통해 확인할 수 있다.
'Windows > 윈도우즈 API' 카테고리의 다른 글
4. 입력 - 키보드 입력 (0) | 2020.11.30 |
---|---|
3. 메시지 비프 (0) | 2020.11.30 |
3. 그래픽 출력 (0) | 2020.11.19 |
3. 문자열의 출력(TextOut, DrawText) (0) | 2020.11.19 |
3. DC(Device Context) (0) | 2020.11.19 |
Comments