6-5-나. Font.dsw
HFONT CreateFontIndirect( CONST LOGFONT *lplf);
LOGFONT 구조체에서 폰트의 특성을 다 정의하므로 함수는 이 구조체의 포인터만 인수로 전달받는다.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR 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,TEXT("My First Program"), 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;
HFONT font, oldfont;
TCHAR str[] = TEXT("폰트 Test 1234");
LOGFONT lf;
switch (iMessage) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
lf.lfHeight = 50;
lf.lfWidth = 0;
lf.lfEscapement = 0;
lf.lfOrientation = 0;
lf.lfWeight = 0;
lf.lfItalic = 0;
lf.lfUnderline = 0;
lf.lfStrikeOut = 0;
lf.lfCharSet = HANGEUL_CHARSET;
lf.lfOutPrecision = 0;
lf.lfClipPrecision = 0;
lf.lfQuality = 0;
lf.lfPitchAndFamily = 0;
strcpy(lf.lfFaceName, "궁서");
font = CreateFontIndirect(&lf);
oldfont = (HFONT)SelectObject(hdc, font);
TextOut(hdc, 100, 100, str, lstrlen(str));
SelectObject(hdc, oldfont);
DeleteObject(font);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
6-5-다. 문자열의 색상
COLORREF SetTextColor( HDC hdc, COLORREF crColor );
COLORREF SetBkColor( HDC hdc, COLORREF crColor );
int SetBkMode( HDC hdc, int iBkMode );
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR 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,TEXT("My First Program"), 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;
HFONT font, oldfont;
TCHAR str[] = TEXT("폰트 Test 1234");
HBRUSH MyBrush, OldBrush;
switch (iMessage) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
MyBrush = CreateHatchBrush(HS_CROSS, RGB(0, 0, 255));
OldBrush = (HBRUSH)SelectObject(hdc, MyBrush);
Rectangle(hdc, 50, 50, 400, 200);
SelectObject(hdc, OldBrush);
font = CreateFont(30, 0, 0, 0, 0, 0, 0, 0, HANGEUL_CHARSET, 0, 0, 0, 0, "궁서");
oldfont = (HFONT)SelectObject(hdc, font);
SetTextColor(hdc, RGB(255, 0, 0));//text 글자색
SetBkColor(hdc, RGB(255, 255, 0));//text 배경 노란색
TextOut(hdc, 100, 100, str, lstrlen(str));
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc, 100, 150, str, lstrlen(str));
SelectObject(hdc, oldfont);
DeleteObject(MyBrush);
DeleteObject(font);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
6-5-라. 글자 회전시키기
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR 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,TEXT("My First Program"), 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;
int i;
TCHAR str[] = TEXT(" Beautiful Korea");
HFONT MyFont, OldFont;
switch (iMessage) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
for (i = 0; i<900; i += 100)
{
MyFont = CreateFont(50, 0, i, 0, FW_NORMAL, FALSE, FALSE, FALSE,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS,
"Times New Roman");
OldFont = (HFONT)SelectObject(hdc, MyFont);
TextOut(hdc, 0, 450, str, lstrlen(str));
SelectObject(hdc, OldFont);
DeleteObject(MyFont);
}
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
7-1-가. 컨트롤의 정의
7-1-나. Button
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass = TEXT("MyButton");
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,TEXT("My First Program"), 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)
{
switch (iMessage) {
case WM_CREATE:
CreateWindow(TEXT("button"), TEXT("Click Me"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
20, 20, 100, 25, hWnd, (HMENU)0, g_hInst, NULL);
CreateWindow(TEXT("button"),TEXT("Me Two"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
20, 50, 100, 25, hWnd, (HMENU)1, g_hInst, NULL);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case 0:
MessageBox(hWnd, TEXT("First Button Clicked"),TEXT("Button"), MB_OK);
break;
case 1:
MessageBox(hWnd, TEXT("Second Button Clicked"), TEXT("Button"), MB_OK);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
7-2-나. Check
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass = TEXT("MyButton");
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,TEXT("My First Program"), 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;
static HWND c1, c2, c3, c4;
static BOOL ELLIPSE = FALSE;
switch (iMessage) {
case WM_CREATE:
c1 = CreateWindow(TEXT("button"), TEXT("Draw Ellipse?"), WS_CHILD | WS_VISIBLE |
BS_CHECKBOX, 20, 20, 160, 25, hWnd, (HMENU)0, g_hInst, NULL);
c2 = CreateWindow(TEXT("button"), TEXT("Good bye Message?"), WS_CHILD | WS_VISIBLE |
BS_AUTOCHECKBOX, 20, 50, 160, 25, hWnd, (HMENU)1, g_hInst, NULL);
c3 = CreateWindow(TEXT("button"), TEXT("3State"), WS_CHILD | WS_VISIBLE | BS_3STATE,
20, 80, 160, 25, hWnd, (HMENU)2, g_hInst, NULL);
c4 = CreateWindow(TEXT("button"), TEXT("Auto 3State"), WS_CHILD | WS_VISIBLE |
BS_AUTO3STATE, 20, 110, 160, 25, hWnd, (HMENU)3, g_hInst, NULL);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case 0:
if (SendMessage(c1, BM_GETCHECK, 0, 0) == BST_UNCHECKED) {
SendMessage(c1, BM_SETCHECK, BST_CHECKED, 0);
ELLIPSE = TRUE;
}
else {
SendMessage(c1, BM_SETCHECK, BST_UNCHECKED, 0);
ELLIPSE = FALSE;
}
InvalidateRect(hWnd, NULL, TRUE);
break;
case 2:
if (SendMessage(c3, BM_GETCHECK, 0, 0) == BST_UNCHECKED)
SendMessage(c3, BM_SETCHECK, BST_CHECKED, 0);
else
if (SendMessage(c3, BM_GETCHECK, 0, 0) == BST_INDETERMINATE)
SendMessage(c3, BM_SETCHECK, BST_UNCHECKED, 0);
else
SendMessage(c3, BM_SETCHECK, BST_INDETERMINATE, 0);
break;
}
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
if (ELLIPSE == TRUE)
Ellipse(hdc, 200, 100, 400, 200);
else
Rectangle(hdc, 200, 100, 400, 200);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
if (SendMessage(c2, BM_GETCHECK, 0, 0) == BST_CHECKED)
MessageBox(hWnd, TEXT("Good bye"), TEXT("Check"), MB_OK);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
첫번째 체크 박스의 선택 상태에 따라 사각형이 그려지기도 하고 타원형이 그려지기도 한다. 두번째 체크 박스는 선택 상태를 변경하는 시점에서는 아무런 동작도 하지 않지만 이 체크 박스가 선택되어 있으면 프로그램 종료 전에 메시지 박스를 출력하도록 하였다. 세번째, 네번째 체크 박스는 모양을 살펴보기 위해 만들어만 놓았으며 기능은 가지고 있지 않다.
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151118 -권오민- WinAPI-5일차 (3) | 2015.11.18 |
---|---|
20151118 윤재희 #5. 그래픽 & 게임 (4) | 2015.11.18 |
20151118-김재홍-win32API_5일차 (4) | 2015.11.18 |
20151118 22번 업무일지 우대희 API (6) | 2015.11.18 |
20151118 임현수 업무일지 WIN32API #5 (4) | 2015.11.18 |
20151117-주재민-api (4) | 2015.11.18 |
김태현 WinAPI 4일차 단축키 만들기 문자열 테이블 GDI오브젝트 (5) | 2015.11.18 |
20151117 수업 / API_4 남수진 (6) | 2015.11.18 |