Windows에서 선을 그려주는 작업을 하는 함수가 있다.


 여기서 선이란, 선분을 뜻한다.


 시작 점과 끝점을 알고 있었을 경우. 그어진 선을 선분이라고 한다.


 수학에서 직선, 반직선, 선분으로 나뉘어 지는걸 생각하면, 여기서 말하는 선은 직선이된다.


 직선을 표현하는 방법은 선형 대수학에서 말하는 함수의 값과 x와 y의 값에 따른 차로 점들을 이어간다면, 선이 된다. 이것을 만들어 주는 작업은 Windows 함수에 지원이 되어있지만, 만약에 구현을 하기 원한다면, 직선은 점들의 모임이라는 것을 이해 하면 도움이 될 것이다.


  Windows 에서 지원되어 있는 직선을 긋는 함수는 다음과 같다.


  MoveToEx(

HDC hdc, // DC의 핸들

int X, // 새로운 지점의 x 좌표.

int y, // 새로운 지점의 y 좌표.

LPPOINT lpPoint); // 이전 위치 좌표.


 LineTo(

HDC hdc, // DC의 핸들

int nXEnd, // 그리는 마지막 지점의 X 좌표

int nYEnd); // 그리는 마지막 지점의 Y 좌표.


 이렇게 사용한다. 그렇지만, 이전 지점 포인트라는 것이 있는데, 여기서 MoveToEx에 lpPoint 라는 값에는 NULL이 들어가게 된다.



 

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
85
#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);
            MoveToEx(hdc, 4040NULL);
            LineTo(hdc, 8040);
            ReleaseDC(hWnd, hdc);
            break;
        case WM_PAINT:
            hdc = GetDC(hWnd);
            TextOut(hdc, 10050"Hello World",11);
            ReleaseDC(hWnd, hdc);
            break;
    }
    return DefWindowProc(hWnd,iMessage,wParam, lParam);
}
 
cs


Posted by JunkMam
,