본문 바로가기
코스웨어/15년 스마트컨트롤러

20151118_주재민_API_5(작성중)

by 알 수 없는 사용자 2015. 11. 18.
728x90
반응형

 

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));
}

 

첫번째 체크 박스의 선택 상태에 따라 사각형이 그려지기도 하고 타원형이 그려지기도 한다. 두번째 체크 박스는 선택 상태를 변경하는 시점에서는 아무런 동작도 하지 않지만 이 체크 박스가 선택되어 있으면 프로그램 종료 전에 메시지 박스를 출력하도록 하였다. 세번째, 네번째 체크 박스는 모양을 살펴보기 위해 만들어만 놓았으며 기능은 가지고 있지 않다.

 

728x90