윈도우스에서 사각형을 출력하는 것은 항상 말하는 사각형을 표현하는 방식에서 정의가 된다.
여기서는 2가지 점의 정보. 정확하게는 x1, x2, y1, y2인 총 가지 정보가 필요하다.
HDC hdc, // DC의 핸들
int nLeftRect, // 좌측 x 좌표.
int nTopRect, // 상단 y 좌표.
int nRightRect, // 우측 x 좌표.
int nBottomRect); // 하단 y 좌표.
예제
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <stdlib.h> #include <tchar.h> #include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; WNDCLASS WndClass; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; 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="ApiBase"; WndClass.lpszMenuName=NULL; WndClass.style=CS_HREDRAW|CS_VREDRAW; //윈도우 클래스 생성. RegisterClass(&WndClass); //윈도우 객체 생성. hWnd = CreateWindow("ApiBase", "Test", WS_OVERLAPPEDWINDOW, 10,// X 100,// Y 400,// Width 400,// Height 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; long dwStyle; switch(iMessage) { case WM_DESTROY: PostQuitMessage(0); break; case WM_LBUTTONDOWN: hdc = GetDC(hWnd); Rectangle(hdc, 100, 100, 300, 300); ReleaseDC(hWnd, hdc); break; case WM_PAINT: hdc = GetDC(hWnd); TextOut(hdc, 100, 50, "Hello World",11); ReleaseDC(hWnd, hdc); break; } return DefWindowProc(hWnd,iMessage,wParam, lParam); } | cs |
윈도우스에서는 사각형만 처리할 수 있는게 아니다.
라운드 사각형이라는 것을 할 수 있다.
사각형을 이용해서 라운드 사각형이 될 수 있는 것은 사각형에서 각 꼭지점에서 원을 표현 하는 것이다.
여기서, 원을 표현 하는 방식은 미분 기하학에서 나오는 매개 함수로 표현이 가능하다.
매개 함수를 이용하는 방법이란, 원래의 함수를 이용해서 처리 하는 것이 아니다.
더 자세한 것은 미분 기하학을 이용한 원을 표현법을 한 번 보는 것이 좋을 것이다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <stdlib.h> #include <tchar.h> #include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; WNDCLASS WndClass; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; 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="ApiBase"; WndClass.lpszMenuName=NULL; WndClass.style=CS_HREDRAW|CS_VREDRAW; //윈도우 클래스 생성. RegisterClass(&WndClass); //윈도우 객체 생성. hWnd = CreateWindow("ApiBase", "Test", WS_OVERLAPPEDWINDOW, 10,// X 100,// Y 400,// Width 400,// Height 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; long dwStyle; switch(iMessage) { case WM_DESTROY: PostQuitMessage(0); break; case WM_LBUTTONDOWN: hdc = GetDC(hWnd); RoundRect(hdc, 100, 100, 300, 300, 10, 20); ReleaseDC(hWnd, hdc); break; case WM_PAINT: hdc = GetDC(hWnd); TextOut(hdc, 100, 50, "Hello World",11); ReleaseDC(hWnd, hdc); break; } return DefWindowProc(hWnd,iMessage,wParam, lParam); } | cs |
'연습' 카테고리의 다른 글
콘솔 어플리케이션에서 Windows 창 띄우기. (0) | 2016.06.29 |
---|---|
Windows API 프로그래밍 -12. 원형 출력. - (0) | 2016.06.28 |
Windows API 프로그래밍 -10. 선 출력. - (0) | 2016.06.26 |
Windows API 프로그래밍 -9. 점 출력. - (0) | 2016.06.25 |
Windows API 프로그래밍 -8. 텍스트 출력. - (0) | 2016.06.24 |