{"componentChunkName":"component---src-templates-tag-js","path":"/tag/direct2d/","result":{"data":{"contentfulTag":{"title":"Direct2D","id":"7f110475-5307-5f78-8806-a8b020bd2864","slug":"direct2d","post":[{"id":"d6c4067e-e4bf-57ed-aa09-cc1bbf4787f6","title":"GDI를 사용한 Win32 응용프로그램 작성","slug":"gdi-lines","publishDate":"March 24, 2014","publishDateISO":"2014-03-24","heroImage":{"title":"LineDrawingApplication Report6","fluid":{"aspectRatio":1.2218934911242603,"src":"//images.ctfassets.net/e1rkozd9gki4/1Mv4cExAdOYhv9JAzDDpX9/61f9ed64c0c6c1c6ca3f02e41be8506d/LineDrawingApplication_Report6.jpg?w=1800&q=50","srcSet":"//images.ctfassets.net/e1rkozd9gki4/1Mv4cExAdOYhv9JAzDDpX9/61f9ed64c0c6c1c6ca3f02e41be8506d/LineDrawingApplication_Report6.jpg?w=413&h=338&q=50 413w","srcWebp":"//images.ctfassets.net/e1rkozd9gki4/1Mv4cExAdOYhv9JAzDDpX9/61f9ed64c0c6c1c6ca3f02e41be8506d/LineDrawingApplication_Report6.jpg?w=1800&q=50&fm=webp","srcSetWebp":"//images.ctfassets.net/e1rkozd9gki4/1Mv4cExAdOYhv9JAzDDpX9/61f9ed64c0c6c1c6ca3f02e41be8506d/LineDrawingApplication_Report6.jpg?w=413&h=338&q=50&fm=webp 413w","sizes":"(max-width: 1800px) 100vw, 1800px"}},"body":{"childMarkdownRemark":{"timeToRead":10,"html":"<p>선분 그리기 응용프로그램</p>\n<h2 id=\"실행-화면-및-소스-설명\" style=\"position:relative;\"><a href=\"#%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-%EB%B0%8F-%EC%86%8C%EC%8A%A4-%EC%84%A4%EB%AA%85\" aria-label=\"실행 화면 및 소스 설명 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>실행 화면 및 소스 설명</h2>\n<h3 id=\"1-처음-실행한-모습\" style=\"position:relative;\"><a href=\"#1-%EC%B2%98%EC%9D%8C-%EC%8B%A4%ED%96%89%ED%95%9C-%EB%AA%A8%EC%8A%B5\" aria-label=\"1 처음 실행한 모습 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 처음 실행한 모습</h3>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 429px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 53.379953379953385%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAUgBSAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAVACgDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAMEBgcC/8QALxAAAAQBCAgHAAAAAAAAAAAAAAECAwQGERMUISMxoQUHEjNBQmNyF1FhcZGx0f/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABkRAQEAAwEAAAAAAAAAAAAAAAEAAhESMf/aAAwDAQACEQMRAD8A6miRcOts1G8U6iI0zJOz3ttyFeI1dQL+zfqI+aecyPOwbBjcN9pfQkF200XPfByS5ntGy+avOnVj8i1DardAwbiVsFEIUnA6dX6NwAdM5LKOyG0dRqNSnlTJPF1RgNQ7uV9pgIg+lszyDQtUZjLhu75S4+gkrnTzAAsyudPMK508wAJeHYy6Xd8p8QAApf/Z'); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report1\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/GfWSVGq087OAzmXAISrF0/d0533fa0715671080f3fa0571cf515aa/LineDrawingApplication_Report1.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/GfWSVGq087OAzmXAISrF0/d0533fa0715671080f3fa0571cf515aa/LineDrawingApplication_Report1.jpg?w=107 107w,\nhttps://images.ctfassets.net/e1rkozd9gki4/GfWSVGq087OAzmXAISrF0/d0533fa0715671080f3fa0571cf515aa/LineDrawingApplication_Report1.jpg?w=215 215w,\nhttps://images.ctfassets.net/e1rkozd9gki4/GfWSVGq087OAzmXAISrF0/d0533fa0715671080f3fa0571cf515aa/LineDrawingApplication_Report1.jpg?w=429 429w\"\n        sizes=\"(max-width: 429px) 100vw, 429px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 230px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 33.91304347826087%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEATgBOAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAOACgDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAUCAwYE/8QALRAAAQIFAgQDCQAAAAAAAAAAAQIDAAQREyEFEiIxUWEVQZEkMlJTYnGBofD/xAAWAQADAAAAAAAAAAAAAAAAAAAAAQT/xAAcEQABBQEBAQAAAAAAAAAAAAAEAAEVUrECMQX/2gAMAwEAAhEDEQA/AMw5q770vLgp05G9KSAF7VDBHEafTn7iOdGpurCj7KAOqzk0rQYhBLTMm02EvSN5dcqLqk4rXkO1R+YhflrQSZTj+MOnp0/uUWMeQ3nWKJ/nDP7zq0bepOOOrRWVTtIG4uYNehpFLmsuNr222lYBqlVRyhKJmT2tgyAqk1WbquIUpTtnMQL0tfKhKm35Iunt5+vrDkCbYlHC01O/HHPkoghHdl9rgEsaq903Dw4/cEEgRbERotNX/9k='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report2\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/4mYu6l36wLYPvV2EsjUurE/c483e15c548eb380298a8af111ed813f/LineDrawingApplication_Report2.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/4mYu6l36wLYPvV2EsjUurE/c483e15c548eb380298a8af111ed813f/LineDrawingApplication_Report2.jpg?w=58 58w,\nhttps://images.ctfassets.net/e1rkozd9gki4/4mYu6l36wLYPvV2EsjUurE/c483e15c548eb380298a8af111ed813f/LineDrawingApplication_Report2.jpg?w=115 115w,\nhttps://images.ctfassets.net/e1rkozd9gki4/4mYu6l36wLYPvV2EsjUurE/c483e15c548eb380298a8af111ed813f/LineDrawingApplication_Report2.jpg?w=230 230w\"\n        sizes=\"(max-width: 230px) 100vw, 230px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\">LRESULT CALLBACK <span class=\"token function\">WndProc</span><span class=\"token punctuation\">(</span>HWND hWnd<span class=\"token punctuation\">,</span> UINT message<span class=\"token punctuation\">,</span> WPARAM wParam<span class=\"token punctuation\">,</span> LPARAM lParam<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>message<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">case</span> WM_RBUTTONDOWN<span class=\"token operator\">:</span>\n      <span class=\"token keyword\">double</span> currentX <span class=\"token operator\">=</span> <span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">//</span>\n      <span class=\"token keyword\">double</span> currentY <span class=\"token operator\">=</span> <span class=\"token function\">HIWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">//</span>\n      <span class=\"token function\">TRACE</span><span class=\"token punctuation\">(</span><span class=\"token function\">_T</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\\n오른쪽 마우스 버튼 좌표 = (%d, %d)\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> currentX<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> currentY<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span></code></pre></div>\n<p>처음 실행한 상태에서 오른쪽 버튼을 클릭하게 되면 , WndProc함수에서\nWM_RBUTTODWN이 적용이 되고 현재 좌표를 알려준다.</p>\n<h3 id=\"2메뉴\" style=\"position:relative;\"><a href=\"#2%EB%A9%94%EB%89%B4\" aria-label=\"2메뉴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.메뉴</h3>\n<p>총 3개의 메뉴가 있다.\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 186px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 10.21505376344086%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAOwA6AAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAEACgDASIAAhEBAxEB/8QAGAABAQADAAAAAAAAAAAAAAAAAAMBBAf/xAAkEAABBAIBAgcAAAAAAAAAAAABAAIDBBEhEjFBBRMiUWGB0f/EABcBAAMBAAAAAAAAAAAAAAAAAAABAgP/xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAMAwEAAhEDEQA/AOo3hOLbXNvW2iR2S1suAPSdD26ZVLLpjExgszt4EO5B+zgnRJ6hEW0yIa1CSxxjlNqdxc3Yc7I7fqvdFgmCRt60wPkjBYyTDcD6zvvtERAz4WZ2wwSvu2ZHccHzJMg66n5REVTCf//Z'); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report4\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/LcuyrNvZH5nBNkWiy7xNc/5262f898193297d5b2529eca89a0c209/LineDrawingApplication_Report4.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/LcuyrNvZH5nBNkWiy7xNc/5262f898193297d5b2529eca89a0c209/LineDrawingApplication_Report4.jpg?w=47 47w,\nhttps://images.ctfassets.net/e1rkozd9gki4/LcuyrNvZH5nBNkWiy7xNc/5262f898193297d5b2529eca89a0c209/LineDrawingApplication_Report4.jpg?w=93 93w,\nhttps://images.ctfassets.net/e1rkozd9gki4/LcuyrNvZH5nBNkWiy7xNc/5262f898193297d5b2529eca89a0c209/LineDrawingApplication_Report4.jpg?w=186 186w\"\n        sizes=\"(max-width: 186px) 100vw, 186px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<p>파일에서 끝내기를 누르게 되면 현재 돌아가고 있는 프로그램이 종료가 되\n고 창이 꺼진다.\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 178px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 29.213483146067414%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAKwArAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAMACgDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAMCBAUH/8QAKhAAAgEDAwIDCQAAAAAAAAAAAQIDAAQREiFBBVEGE9EUIjEyQoGhwfD/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAH/xAAXEQEBAQEAAAAAAAAAAAAAAAAAERIB/9oADAMBAAIRAxEAPwDpLeEpJSsyzIuoqxGrY4XGMY52P2qdjHbRWJgt78KrjIaGRg2FbGSdPcgVvyQujlFuZQo2A930pCWKRKFjkZFAIAVEAAJyfp5p6GK1jbTysZouoyy6WKnMhxzwR/YpnUrG7nhZ/bpoNMbA+VJ353XORjgirCwNHkJcSKD2Cj9UPA8iMjXU2lhg/L6VaUKt+hXCMZD1S6k1PrALnAGxxjtt+aK3FGlQB8AMUUddbH//2Q=='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report3\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/25RUA8pIbaq2dKWgYpFpgK/864cee26fbe6cc0870c2e34375d09b20/LineDrawingApplication_Report3.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/25RUA8pIbaq2dKWgYpFpgK/864cee26fbe6cc0870c2e34375d09b20/LineDrawingApplication_Report3.jpg?w=45 45w,\nhttps://images.ctfassets.net/e1rkozd9gki4/25RUA8pIbaq2dKWgYpFpgK/864cee26fbe6cc0870c2e34375d09b20/LineDrawingApplication_Report3.jpg?w=89 89w,\nhttps://images.ctfassets.net/e1rkozd9gki4/25RUA8pIbaq2dKWgYpFpgK/864cee26fbe6cc0870c2e34375d09b20/LineDrawingApplication_Report3.jpg?w=178 178w\"\n        sizes=\"(max-width: 178px) 100vw, 178px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<p>색상 메뉴를 클릭하게 되면 색을 골를 수 있는 버튼들이 있는 창이 따로 뜨게 된다. 원하는 색을 클릭하고 선택을 누르게 되면 선의 색이 변경이 가능하다. 취소를 누를 경우 색은 변경하지 않고 따로 뜬 색상 고르는 창이 꺼지게 된다.\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 418px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 44.73684210526316%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAcgByAAD/2wBDAAwICQoJBwwKCgoNDQwOEh4TEhAQEiQaGxUeKyYtLComKSkvNUQ6LzJAMykpO1E8QEZJTE1MLjlUWlNKWURLTEn/2wBDAQ0NDRIQEiMTEyNJMSkxSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUn/wAARCAASACgDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAECAwQH/8QAKhAAAQMCBAUDBQAAAAAAAAAAAQACAxESBBMhIjEyQVFSBWFxFIGRoeH/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/xAAZEQEBAQEBAQAAAAAAAAAAAAAAAQISEUH/2gAMAwEAAhEDEQA/APRI8NDlNJc4XAHmUZcbpLS0hvlVtFvDU4eOhA2jiPZUe3KeZnSu+NSPwn2wcyqfTQXEX/sKrY4xIW2m0Gl1zaLpqQSQQdPH++6yYL3iUSuo46DWnDtVPVHMYYj0/CTOfK4Fzmt0IeQOvQIuuYEQykkHYeA+UVmerV+OOKR+Sze7lHVSXOJ1JP3REhBNRQ6jsjdpq3Q9wiISJZH5L97uU9URFvLOn//Z'); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report5\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/12awYrk72qQEZxfBblJh7S/388b42dad2f809cf5d7e39c9d3249872/LineDrawingApplication_Report5.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/12awYrk72qQEZxfBblJh7S/388b42dad2f809cf5d7e39c9d3249872/LineDrawingApplication_Report5.jpg?w=105 105w,\nhttps://images.ctfassets.net/e1rkozd9gki4/12awYrk72qQEZxfBblJh7S/388b42dad2f809cf5d7e39c9d3249872/LineDrawingApplication_Report5.jpg?w=209 209w,\nhttps://images.ctfassets.net/e1rkozd9gki4/12awYrk72qQEZxfBblJh7S/388b42dad2f809cf5d7e39c9d3249872/LineDrawingApplication_Report5.jpg?w=418 418w\"\n        sizes=\"(max-width: 418px) 100vw, 418px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span>\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 413px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 81.8401937046005%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAZQBlAAD/2wBDAAkGBwgHBgkICAgKCgkLDhcPDg0NDhwUFREXIh4jIyEeICAlKjUtJScyKCAgLj8vMjc5PDw8JC1CRkE6RjU7PDn/2wBDAQoKCg4MDhsPDxs5JiAmOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTn/wAARCAAhACgDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAMBAgYEB//EADQQAAEDAgEFDwUBAAAAAAAAAAEAAgMEERIhMTShsQUGBxMUIkFSYXFyc4GR8DJRYsHh8f/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABoRAQEBAQADAAAAAAAAAAAAAAABERICIUH/2gAMAwEAAhEDEQA/APR4t6cb4sRlALgC2wtbvXPU7x6WZtuUuDh9Wey1tKb0sLj0sB1KG87D+Rxnu6P17K6mMKeCncFzi6R9SXnK4iYjUuuk4NtyKSQPhlq2uGY8ecmpbBvON+sb+gzJqdUyMpNvMomxPdxs5Iac8n8QtNVHDTTH7MJ1IUyX4135T1KXBlooG9ZjRqy6lcm+NwzuOAfPdLpg7k0LgL2iGHtNv8TcJaQACQxuTtPzaiLMAuSMwyD0V1DRZoClAms0Sfy3bEIrNEn8t2xCoydLo8XgGxMQhESjpQhAqo0eXwHYhCEH/9k='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report6\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/1Mv4cExAdOYhv9JAzDDpX9/61f9ed64c0c6c1c6ca3f02e41be8506d/LineDrawingApplication_Report6.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/1Mv4cExAdOYhv9JAzDDpX9/61f9ed64c0c6c1c6ca3f02e41be8506d/LineDrawingApplication_Report6.jpg?w=103 103w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1Mv4cExAdOYhv9JAzDDpX9/61f9ed64c0c6c1c6ca3f02e41be8506d/LineDrawingApplication_Report6.jpg?w=207 207w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1Mv4cExAdOYhv9JAzDDpX9/61f9ed64c0c6c1c6ca3f02e41be8506d/LineDrawingApplication_Report6.jpg?w=413 413w\"\n        sizes=\"(max-width: 413px) 100vw, 413px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<p>아래 소스는 색상 메뉴를 클릭했을 때 나오는 창에 대한 소스이다.</p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\">INT_PTR CALLBACK <span class=\"token function\">ColorProc</span><span class=\"token punctuation\">(</span>HWND hDlg<span class=\"token punctuation\">,</span> UINT message<span class=\"token punctuation\">,</span> WPARAM wParam<span class=\"token punctuation\">,</span> LPARAM lParam<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">//색상  대화  상자의  메시지  처리기 UNREFERENCED_PARAMETER(lParam);</span>\n  <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>message<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">case</span> WM_INITDIALOG<span class=\"token operator\">:</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>INT_PTR<span class=\"token punctuation\">)</span> TRUE<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">case</span> WM_COMMAND<span class=\"token operator\">:</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>wParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> IDC_BLACK<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      selectedColor <span class=\"token operator\">=</span> <span class=\"token number\">0x000000</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// black return (INT_PTR)TRUE;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>wParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> IDC_RED<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      selectedColor <span class=\"token operator\">=</span> <span class=\"token number\">0x0000ff</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// red return (INT_PTR)TRUE;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>wParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> IDC_GREEN<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      selectedColor <span class=\"token operator\">=</span> <span class=\"token number\">0x00ff00</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// green return (INT_PTR)TRUE;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>wParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> IDC_BLUE<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      selectedColor <span class=\"token operator\">=</span> <span class=\"token number\">0xff0000</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// blue return (INT_PTR)TRUE;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>wParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> IDOK<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// 현재 컬러를 갱신 currentColor = selectedColor;</span>\n      <span class=\"token function\">EndDialog</span><span class=\"token punctuation\">(</span>hDlg<span class=\"token punctuation\">,</span> <span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>wParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>INT_PTR<span class=\"token punctuation\">)</span> TRUE<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>wParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> IDCANCEL<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// 취소</span>\n      <span class=\"token function\">EndDialog</span><span class=\"token punctuation\">(</span>hDlg<span class=\"token punctuation\">,</span> <span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>wParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>INT_PTR<span class=\"token punctuation\">)</span> TRUE<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>INT_PTR<span class=\"token punctuation\">)</span> FALSE<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 189px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 10.052910052910052%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEALQAtAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAEACgDASIAAhEBAxEB/8QAGAABAQADAAAAAAAAAAAAAAAAAAMEBQf/xAAkEAACAQQABQUAAAAAAAAAAAABAgMABBEhBRIxQXETIlFh0f/EABYBAQEBAAAAAAAAAAAAAAAAAAEDAP/EABcRAQEBAQAAAAAAAAAAAAAAAAEAESH/2gAMAwEAAhEDEQA/AOo3onF6pW+u1EjZKrKQB7TofHSsuYzPZqBczpyENlZCCd9Ce4pSr4U6dg84VJGu7hyyZPO+R0H7Wu4kbkMsi310gkfaK4AGEI1rP35pShOSV+FvPGsLtdTyFkXPqPnsN+aUpSBa/9k='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report7\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/66tBmXlL3Iu8gVJiRVWrR2/3357cc099bc183e390272864835ca15f/LineDrawingApplication_Report7.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/66tBmXlL3Iu8gVJiRVWrR2/3357cc099bc183e390272864835ca15f/LineDrawingApplication_Report7.jpg?w=47 47w,\nhttps://images.ctfassets.net/e1rkozd9gki4/66tBmXlL3Iu8gVJiRVWrR2/3357cc099bc183e390272864835ca15f/LineDrawingApplication_Report7.jpg?w=95 95w,\nhttps://images.ctfassets.net/e1rkozd9gki4/66tBmXlL3Iu8gVJiRVWrR2/3357cc099bc183e390272864835ca15f/LineDrawingApplication_Report7.jpg?w=189 189w\"\n        sizes=\"(max-width: 189px) 100vw, 189px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span>\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 146px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 36.3013698630137%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAIwAkAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAPACgDASIAAhEBAxEB/8QAGQAAAwADAAAAAAAAAAAAAAAAAAMEBQYH/8QALRAAAQMDAgQCCwAAAAAAAAAAAQIDBAAREgVREyFBgTEyBhQiUlVhkqGi0dL/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAgH/xAAYEQEBAQEBAAAAAAAAAAAAAAAAARECEv/aAAwDAQACEQMRAD8A6HN0LUZRecZQsLcQQDik88r5Xz2+VJb9HtRDrwdDmCrFGKWyU+zY+Kt63BTshizYhvOWHmSpFvuoVipunCdJdedhTAXWg0oJU14BVxzJv03tV6k/TGpcSLwuE6nnewx2F+u96t4sv3Hvx/dQx4yo0lx9qHN4jnmJcbIPbKw7Vb63I+HyPqb/AKp6MBekptkHUgkC5x696KW+uTJQloQnkXWk5KUiwsoHoqisvRI//9k='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report8\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/5uzNruB0sV0RKyKywV8ze/1f56e9777bcdb0a74608c385ef706142/LineDrawingApplication_Report8.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/5uzNruB0sV0RKyKywV8ze/1f56e9777bcdb0a74608c385ef706142/LineDrawingApplication_Report8.jpg?w=37 37w,\nhttps://images.ctfassets.net/e1rkozd9gki4/5uzNruB0sV0RKyKywV8ze/1f56e9777bcdb0a74608c385ef706142/LineDrawingApplication_Report8.jpg?w=73 73w,\nhttps://images.ctfassets.net/e1rkozd9gki4/5uzNruB0sV0RKyKywV8ze/1f56e9777bcdb0a74608c385ef706142/LineDrawingApplication_Report8.jpg?w=146 146w\"\n        sizes=\"(max-width: 146px) 100vw, 146px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span>\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 475px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 38.94736842105263%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAdAB0AAD/2wBDAAwICQsJCAwLCgsODQwOEh4UEhEREiUbHBYeLCcuLisnKyoxN0Y7MTRCNCorPVM+QkhKTk9OLztWXFVMW0ZNTkv/2wBDAQ0ODhIQEiQUFCRLMisyS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0v/wAARCAAQACgDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAgf/xAAmEAACAQMBCAMBAAAAAAAAAAABAhEAAxIEEyEiMTJRweFBUpHR/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAL/xAAZEQACAwEAAAAAAAAAAAAAAAAAAQIREkH/2gAMAwEAAhEDEQA/AOjqkMqgHEiZk/zzSHu2xcKGZDR1eqrR1wXiHLvSyHykalYnliKq2TSE212k42yQDHX6qhLAxBOQMbxPKtW2CoA90Oe+4VrNPsv7TUhmJDqtILrlrlrJVXc2Xiiq7zrsX4h0n5oolYb4f//Z'); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report9\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/Bw3kvNkS2LXyI7q7IHl2a/d346409397a4d8457511324f1b8ff974/LineDrawingApplication_Report9.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/Bw3kvNkS2LXyI7q7IHl2a/d346409397a4d8457511324f1b8ff974/LineDrawingApplication_Report9.jpg?w=119 119w,\nhttps://images.ctfassets.net/e1rkozd9gki4/Bw3kvNkS2LXyI7q7IHl2a/d346409397a4d8457511324f1b8ff974/LineDrawingApplication_Report9.jpg?w=238 238w,\nhttps://images.ctfassets.net/e1rkozd9gki4/Bw3kvNkS2LXyI7q7IHl2a/d346409397a4d8457511324f1b8ff974/LineDrawingApplication_Report9.jpg?w=475 475w\"\n        sizes=\"(max-width: 475px) 100vw, 475px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<p>메뉴의 마지막으로 도움말의 정보를 누르게 되면 프로그램에 관한 정보를 볼 수 있다.</p>\n<h3 id=\"3-기본-선의-색은-파랑색\" style=\"position:relative;\"><a href=\"#3-%EA%B8%B0%EB%B3%B8-%EC%84%A0%EC%9D%98-%EC%83%89%EC%9D%80-%ED%8C%8C%EB%9E%91%EC%83%89\" aria-label=\"3 기본 선의 색은 파랑색 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 기본 선의 색은 파랑색</h3>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 550px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 56.72727272727273%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAXgBeAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAXACgDASIAAhEBAxEB/8QAGgABAAIDAQAAAAAAAAAAAAAAAAEGAgMEB//EADMQAAEDAgEHCQkAAAAAAAAAAAEAAgMEEQUGBxIVIVHREyIjQVNhcaLSFCU0QkNygZGx/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAC/8QAGhEBAQACAwAAAAAAAAAAAAAAAAEREgIhMf/aAAwDAQACEQMRAD8A9ZZkVhMkLS9shLrOPSO4riqc2GS1W4mronSsvcNdPIA39OVuicG08W8tFgOvYsw0k3d+B1BO1GIo7M0WRVj7lABFttRL61mzNJkZE7SZhOie6pm9au6J2qxFZfkPgTIHaNM/mtNrzyG2zvcisU/w8v2H+Is+tTlZ1K4KbFqAQRnl9pYL8x27wW7W1Cfr+R3BESynWlF23lPBRrah7fyO4IisJqqcXofZpen26B+R27wRETIn/9k='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report10\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/1MeLKz4bi16VhPciiOBcnQ/da7c5c7fe11f8115f14e252b18f93c07/LineDrawingApplication_Report10.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/1MeLKz4bi16VhPciiOBcnQ/da7c5c7fe11f8115f14e252b18f93c07/LineDrawingApplication_Report10.jpg?w=138 138w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1MeLKz4bi16VhPciiOBcnQ/da7c5c7fe11f8115f14e252b18f93c07/LineDrawingApplication_Report10.jpg?w=275 275w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1MeLKz4bi16VhPciiOBcnQ/da7c5c7fe11f8115f14e252b18f93c07/LineDrawingApplication_Report10.jpg?w=550 550w\"\n        sizes=\"(max-width: 550px) 100vw, 550px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<p>기본으로 생성되는 선은 색은 파랑색이다. 아래 currentColor 변수를 전역 변\n수로 사용하여 현재 사용되는 선의 색을 저장한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token comment\">// 현재 사용되고 있는 컬러 (현재 파란색으로 처음 시작)</span>\nCOLORREF currentColor <span class=\"token operator\">=</span> <span class=\"token number\">0xff0000</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"4-선은-10개까지만-그릴-수-있다\" style=\"position:relative;\"><a href=\"#4-%EC%84%A0%EC%9D%80-10%EA%B0%9C%EA%B9%8C%EC%A7%80%EB%A7%8C-%EA%B7%B8%EB%A6%B4-%EC%88%98-%EC%9E%88%EB%8B%A4\" aria-label=\"4 선은 10개까지만 그릴 수 있다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 선은 10개까지만 그릴 수 있다.</h3>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 650px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 39.33823529411765%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAiwCLAAD/2wBDAA8LDA0MCg8NDA0REA8SFyYZFxUVFy8iJBwmODE7OjcxNjU9RVhLPUFUQjU2TWlOVFteY2RjPEpsdGxgc1hhY1//2wBDARARERcUFy0ZGS1fPzY/X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1//wAARCAAQACgDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQCAwUG/8QAKxAAAQMCAwUJAQAAAAAAAAAAAQIDEQAFEhUhBBMxYpIUIiMzQVFS0eHx/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQD/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAwDAQACEQMRAD8A7LKbepIxbK2ZHrUchtMT2BjXlp5DreFPiI4fKpF1uPMR1VJnZFadZt7HRVOS2kicr2fX3itbetwRvEa81UBxwJAxMaDjvPykQkm1W0YkC3NIGEkEQQY/tFOBSu8p11qAhQASqeMfVFBf/9k='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report11\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/2UxbrxjxX7aB28o7v4VhvT/47559f1fc8d5c5915e8081783bfa584b/LineDrawingApplication_Report11.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/2UxbrxjxX7aB28o7v4VhvT/47559f1fc8d5c5915e8081783bfa584b/LineDrawingApplication_Report11.jpg?w=204 204w,\nhttps://images.ctfassets.net/e1rkozd9gki4/2UxbrxjxX7aB28o7v4VhvT/47559f1fc8d5c5915e8081783bfa584b/LineDrawingApplication_Report11.jpg?w=408 408w,\nhttps://images.ctfassets.net/e1rkozd9gki4/2UxbrxjxX7aB28o7v4VhvT/47559f1fc8d5c5915e8081783bfa584b/LineDrawingApplication_Report11.jpg?w=816 816w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\">LRESULT CALLBACK <span class=\"token function\">WndProc</span><span class=\"token punctuation\">(</span>HWND hWnd<span class=\"token punctuation\">,</span> UINT message<span class=\"token punctuation\">,</span> WPARAM wParam<span class=\"token punctuation\">,</span>\n    LPARAM lParam<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>message<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">case</span> WM_LBUTTONDOWN<span class=\"token operator\">:</span>\n      <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>lines<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">>=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token operator\">::</span><span class=\"token function\">MessageBox</span><span class=\"token punctuation\">(</span>hWnd<span class=\"token punctuation\">,</span> <span class=\"token function\">_T</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"직선을 더이상 입력할 수 없습니다!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">_T</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ERROR\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n            MB_OK<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n          currentLine<span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> currentLine<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> <span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          currentLine<span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>y <span class=\"token operator\">=</span> currentLine<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y <span class=\"token operator\">=</span> <span class=\"token function\">HIWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          currentLine<span class=\"token punctuation\">.</span>color <span class=\"token operator\">=</span> currentColor<span class=\"token punctuation\">;</span>\n          inputting <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span></code></pre></div>\n<p>선은 최대 10개까지만 그릴 수 있다. 사용자가 왼쪽 마우스 클릭하였을 때 (WM_LBUTTONDOWN), Vectoer lines의 크기를 체크해서 10개 이상이 되었으면 오류의 창을 알려준다. 그렇지 않을 경우에는 선분의 p0, p1의 x값에 현재 마우스 클릭한 좌표의 x를 넣어주고, 선분의 po, p2의 y값에는 현재 마우스 클릭한 좌표의 y를 넣어준다. 그리고 inputting를 true로 변경하여 마우스의 움직임을 통하여 선분을 그을 수 있도록 지정해준다. 사용자가 마우스를 땔 경우에 선분의 모든 좌표가 올바르게 적용된다.</p>\n<h3 id=\"5-디버그-출력창을-통해-선들과의-거리-체크\" style=\"position:relative;\"><a href=\"#5-%EB%94%94%EB%B2%84%EA%B7%B8-%EC%B6%9C%EB%A0%A5%EC%B0%BD%EC%9D%84-%ED%86%B5%ED%95%B4-%EC%84%A0%EB%93%A4%EA%B3%BC%EC%9D%98-%EA%B1%B0%EB%A6%AC-%EC%B2%B4%ED%81%AC\" aria-label=\"5 디버그 출력창을 통해 선들과의 거리 체크 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 디버그 출력창을 통해 선들과의 거리 체크</h3>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 523px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 69.02485659655832%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAbQBtAAD/2wBDAAsHCAoIBwsKCQoMDAsNEBsSEA8PECEYGRQbJyMpKScjJiUsMT81LC47LyUmNko3O0FDRkdGKjRNUkxEUj9FRkP/2wBDAQwMDBAOECASEiBDLSYtQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0P/wAARCAAcACgDASIAAhEBAxEB/8QAGwAAAgIDAQAAAAAAAAAAAAAAAAMBAgQFBgf/xAAwEAACAQIEAQgLAAAAAAAAAAABAgADEQQGEiEFEzJBUWFxkbEWMTM0UmJyocHR4f/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oADAMBAAIRAxEAPwD0QZcwToNesk7klpiVsn8JxLsr4blUHrVnOm/VN4rFlVEO+kam6v7HKoVQqiwEuo5f0Fy4OfwxE72a3jeOp5Fy+hDU8Ag7Q7fudHFmkt7rdT8sbVyNS+WOGLSa2HFwptdifzCbKozclVUkNZDva3RCRdsFJKlOmClmUi+k7HxjFrKTpa6N1NtJpezTuEsyhhZgCO2ETKOxvpXnH7RZXknQIzaWNtJNxGUxYE9JO5gVqqFw1QD4T5Qk4j3ep9B8oQP/2Q=='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report12\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/3chiqWmQMvh6RUT2HUhRMH/9149e8443ac269b53c18c729810287ab/LineDrawingApplication_Report12.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/3chiqWmQMvh6RUT2HUhRMH/9149e8443ac269b53c18c729810287ab/LineDrawingApplication_Report12.jpg?w=131 131w,\nhttps://images.ctfassets.net/e1rkozd9gki4/3chiqWmQMvh6RUT2HUhRMH/9149e8443ac269b53c18c729810287ab/LineDrawingApplication_Report12.jpg?w=262 262w,\nhttps://images.ctfassets.net/e1rkozd9gki4/3chiqWmQMvh6RUT2HUhRMH/9149e8443ac269b53c18c729810287ab/LineDrawingApplication_Report12.jpg?w=523 523w\"\n        sizes=\"(max-width: 523px) 100vw, 523px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span>\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 415px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 95.18072289156626%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAaABpAAD/2wBDAAoHBwkHBgoJCAkLCwoMDxkQDw4ODx4WFxIZJCAmJSMgIyIoLTkwKCo2KyIjMkQyNjs9QEBAJjBGS0U+Sjk/QD3/2wBDAQsLCw8NDx0QEB09KSMpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT3/wAARCAAmACgDASIAAhEBAxEB/8QAGgABAQADAQEAAAAAAAAAAAAAAAIBAwQFBv/EAC8QAAEDAgMFBQkAAAAAAAAAAAEAAhEDIQQSMQUTImHRMkFRkfAVI1JxgcHS4fH/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAwH/xAAaEQACAwEBAAAAAAAAAAAAAAAAAQNSkRMU/9oADAMBAAIRAxEAPwD5F20MXUDHkky2b1Beyk43FhjjBnUe8EieX0K00o3VPsTl8D4BUC0OkbsRB7J1Enp6lV7yWekuEVViDsdjWtzZiRycDzU+0cbMRVn5fpYpEClbJeAJBnVU1zcrBwWBN293VO8tno88VViJftPGU4zmo2dJEfZFr2gSxzWNc0tLRZo087oneWz0eeKqxHRQa51GnGeLNtzAVUxUrGRn0A8p/IKaGXcssw8TdSfhCYcNLHA7vLcGSfXipFTnbimMa9uapcEW7+l1QxlMFvFUtzXAdTCIC6z89QumZi8QihFoPRZimMotbL8wg9kRIA6LAxzaBcKed3EYmBY/wIiwHnm5PciItAREQH//2Q=='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report13\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/29uBYCm8dxUwWhjWma1H0D/43daa3d224be8fc3a466a8100b10c9a7/LineDrawingApplication_Report13.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/29uBYCm8dxUwWhjWma1H0D/43daa3d224be8fc3a466a8100b10c9a7/LineDrawingApplication_Report13.jpg?w=104 104w,\nhttps://images.ctfassets.net/e1rkozd9gki4/29uBYCm8dxUwWhjWma1H0D/43daa3d224be8fc3a466a8100b10c9a7/LineDrawingApplication_Report13.jpg?w=208 208w,\nhttps://images.ctfassets.net/e1rkozd9gki4/29uBYCm8dxUwWhjWma1H0D/43daa3d224be8fc3a466a8100b10c9a7/LineDrawingApplication_Report13.jpg?w=415 415w\"\n        sizes=\"(max-width: 415px) 100vw, 415px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<p>오른쪽 마우스를 클릭할 경우, 현재 마우스 버튼의 좌표를 확인할 수 있다고 위에서 설명했다. 만일 선분이 있을 경우에는 선분들의 위치와 색상, 현재 위치와 선분들과의 거리를 모두 확인할 수 있다. 선분과의 거리는 ‘distance‘라는 함수를 통해 구현하였다.</p>\n<p>오른쪽 마우스가 다운되었을 때 실행되는 소스이다. 오른쪽 마우스 클릭한 좌표와 선들과의 차이를 저장하는 배열 ‘distanceResult’, 현재 위치를 저장하는 지역 변수 ‘currentX’, ‘currentY’, 선분과의 거리와 우선순위를 통해 선을 선택하는 전역 변수 ‘lineSelect’, 현재 좌표와 선분들의 거리를 체크해주는 함수 ‘distance’ 호출 등이 주로 이용된다.</p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token comment\">// 오른쪽 마우스가 다운되었을 때(DOWN)</span>\n<span class=\"token keyword\">case</span> WM_RBUTTONDOWN<span class=\"token operator\">:</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">float</span> distanceResult<span class=\"token punctuation\">[</span><span class=\"token number\">10</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token number\">0.0</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 오른쪽 마우스 클릭한 좌표와 선들과의 거리차 저장하는 배열</span>\n    lineSelect <span class=\"token operator\">=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 선택한 라인 넘버 초기화</span>\n    <span class=\"token keyword\">double</span> currentX <span class=\"token operator\">=</span> <span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 현재 마우스 클릭한위치의 X를 currentX 변수에 저장</span>\n    <span class=\"token keyword\">double</span> currentY <span class=\"token operator\">=</span> <span class=\"token function\">HIWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 현재 마우스 클릭한 위치의 Y를 currentY 변수에 저장</span>\n    <span class=\"token comment\">// 오른쪽 마우스 클릭 좌표 표시</span>\n    <span class=\"token function\">TRACE</span><span class=\"token punctuation\">(</span><span class=\"token function\">_T</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\\n오른쪽 마우스 버튼 좌표 = (%d, %d)\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> currentX<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> currentY<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// 라인이 하나도 없을 경우 break문을 통해 탈출</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> lines<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token comment\">// 라인이 하나라도 있을 경우 드래그가 가능하도록 아래 else로 들어감</span>\n    <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// 현재 Vector Lines에 있는 모든 p0, p1의 x, y 좌표 표시</span>\n      <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> lines<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">TRACE</span><span class=\"token punctuation\">(</span><span class=\"token function\">_T</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"[line %d] p0.x=%d, p0.y=%d , \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> i <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n          lines<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">,</span> lines<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">TRACE</span><span class=\"token punctuation\">(</span><span class=\"token function\">_T</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"p1.x=%d, p1.y=%d, color=%d \\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n          lines<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">,</span> lines<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">,</span> lines<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>color<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n\n      <span class=\"token comment\">// 오른쪽 마우스 클릭 좌표와 라인과의 거리 차이를 distance 함수를 이용해 배열 distanceResult에 저장</span>\n      <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> j <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> j <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> lines<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> j<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        distanceResult<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">distance</span><span class=\"token punctuation\">(</span>lines<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> currentX<span class=\"token punctuation\">,</span>\n          currentY<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token comment\">// distanceResult 배열 값들의 출력을 통해 모든 선들의 최소 거리 체크</span>\n      <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> k <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> k <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> lines<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> k<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">TRACE</span><span class=\"token punctuation\">(</span><span class=\"token function\">_T</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"선 %d과의 거리 = %f \\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> k <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n          distanceResult<span class=\"token punctuation\">[</span>k<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token comment\">// distanceResult 배열 값들 중에 거리 차이가 1이하인 선들을 파악</span>\n      <span class=\"token comment\">// 거리 차이가 1 이하인 선들 중에 가장 나중에 만들어진 선을 선택</span>\n      <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> l <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> l <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> lines<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> l<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>distanceResult<span class=\"token punctuation\">[</span>l<span class=\"token punctuation\">]</span> <span class=\"token operator\">>=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span> <span class=\"token operator\">&amp;&amp;</span> distanceResult<span class=\"token punctuation\">[</span>l<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          lineSelect <span class=\"token operator\">=</span> l<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token comment\">// line이 하나라도 선택이 됬을 경우 bool형 lineMoving 변수를 true로 변경하여 드래그 가능하도록 변경</span>\n      <span class=\"token comment\">// lineMoving 변수는 WM_MOUSEMOVE에서 사용</span>\n      <span class=\"token comment\">// TRACE 함수를 통해 마우스 오른쪽 버튼으로 선택된 선의 번호를 알림</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>lineSelect <span class=\"token operator\">>=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        lineMoving <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">TRACE</span><span class=\"token punctuation\">(</span><span class=\"token function\">_T</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"선택된 라인 넘버-> %d!\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> lineSelect <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>‘distance’ 함수는 오른쪽 마우스 클릭하게 될 때, 선분이 존재해있으면 현재 좌표와 선분들과의 거리를 구해준다. return은 double 실수형으로 출력해주기 때문에 다양한 곳에서 받아서 사용할 수 있다. ‘distance’ 함수 이외에도\n두 구조체의 변수들(x, y)를 통해 거리 계산하는 함수 ‘GetDistance‘, 오른쪽 마우스 클릭했을 때 어디 위치를 기준으로 드래그할 것인지를 분별하는 ’GetDistance2‘, 두 실수형의 크기를 비교하여 작은 값을 출력하는 ’GetMin‘, 두 실수형의 크기를 비교하여 큰 값을 출력하는 ’GetMax‘ 함수 등 거리에 관련된 함수는 총 5개이다.</p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token comment\">// 오른쪽 마우스 클릭과 이미 그려진 선들과의 거리를 구하는 함수</span>\n<span class=\"token keyword\">double</span> <span class=\"token function\">distance</span><span class=\"token punctuation\">(</span>Line lines<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> currentX<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> currentY<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  POINT2 p<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 클릭한 오른쪽 마우스 좌표를 저장할 구조체 선언</span>\n  LINE2 l<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 이미 그려져 있는 라인(lines[.])을 잇는 선분</span>\n  POINT2 a<span class=\"token punctuation\">;</span> <span class=\"token comment\">// p와 p1,p2를 지나는 직선과의 교점</span>\n  <span class=\"token keyword\">double</span> m1<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 새롭게 생성될 l의 기울기</span>\n  <span class=\"token keyword\">double</span> k1<span class=\"token punctuation\">;</span> <span class=\"token comment\">// l의 방정식 y=mx+k1의 상수 k1</span>\n  <span class=\"token keyword\">double</span> m2<span class=\"token punctuation\">;</span> <span class=\"token comment\">// l과 수직인 직선의 기울기</span>\n  <span class=\"token keyword\">double</span> k2<span class=\"token punctuation\">;</span> <span class=\"token comment\">// l과 수직인 직선의 방정식 y=mx+k2의 상수 k2</span>\n  <span class=\"token comment\">// 클릭한 오른쪽 마우스 좌표의 x,y를 구조체 p에 대입</span>\n  p<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> currentX<span class=\"token punctuation\">;</span>\n  p<span class=\"token punctuation\">.</span>y <span class=\"token operator\">=</span> currentY<span class=\"token punctuation\">;</span>\n  <span class=\"token comment\">// line 구조체를 통해 p1, p2 구조체를 접근하여 기존에 존재한 라인들의 좌표를 대</span>\n  입\n  l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> lines<span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">;</span>\n  l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y <span class=\"token operator\">=</span> lines<span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">;</span>\n  l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> lines<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">;</span>\n  l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>y <span class=\"token operator\">=</span> lines<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x <span class=\"token operator\">==</span> l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 선분이 수직일 경우</span>\n  <span class=\"token punctuation\">{</span>\n    a<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">;</span>\n    a<span class=\"token punctuation\">.</span>y <span class=\"token operator\">=</span> p<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y <span class=\"token operator\">==</span> l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 선분이 수평일 경우</span>\n  <span class=\"token punctuation\">{</span>\n    a<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> p<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">;</span>\n    a<span class=\"token punctuation\">.</span>y <span class=\"token operator\">=</span> l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 그 외의 경우</span>\n    <span class=\"token comment\">// 기울기 m1</span>\n    m1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y <span class=\"token operator\">-</span> l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> <span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x <span class=\"token operator\">-</span> l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// 상수 k1</span>\n    k1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1</span> <span class=\"token operator\">*</span> m1<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// 이제 선분 l 을 포함하는 직선의 방정식은 y = m1x + k1를 구함</span>\n    <span class=\"token comment\">// 두 직선은 직교하기 때문에 m1 * m2 = -1</span>\n    <span class=\"token comment\">// 기울기 m2</span>\n    m2 <span class=\"token operator\">=</span> <span class=\"token operator\">-</span><span class=\"token number\">1.0</span> <span class=\"token operator\">/</span> m1<span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// p 를 지나기 때문에 yp = m2 * xp + k2 => k2 = yp - m2 * xp</span>\n    k2 <span class=\"token operator\">=</span> p<span class=\"token punctuation\">.</span>y <span class=\"token operator\">-</span> m2 <span class=\"token operator\">*</span> p<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// 두 직선 y = m1x + k1, y = m2x + k2 의 교점을 구함</span>\n    a<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>k2 <span class=\"token operator\">-</span> k1<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> <span class=\"token punctuation\">(</span>m1 <span class=\"token operator\">-</span> m2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    a<span class=\"token punctuation\">.</span>y <span class=\"token operator\">=</span> m1 <span class=\"token operator\">*</span> a<span class=\"token punctuation\">.</span>x <span class=\"token operator\">+</span> k1<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token comment\">// 구한 점이 선분 위에 있는 지 확인</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">.</span>x <span class=\"token operator\">>=</span> <span class=\"token function\">GetMin</span><span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">,</span> l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span> a<span class=\"token punctuation\">.</span>x <span class=\"token operator\">&lt;=</span> <span class=\"token function\">GetMax</span><span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">,</span> l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span>\n    a<span class=\"token punctuation\">.</span>y <span class=\"token operator\">>=</span> <span class=\"token function\">GetMin</span><span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">,</span> l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span> a<span class=\"token punctuation\">.</span>y <span class=\"token operator\">&lt;=</span> <span class=\"token function\">GetMax</span><span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">,</span> l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 구한 교점이 선분위에 있으면 p 와 a 와의 거리가 최소 거리</span>\n    <span class=\"token keyword\">return</span> <span class=\"token function\">GetDistance</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">,</span> a<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 구한 교점이 선분 위에 없으면 p~p1 또는 p~p2 중 작은 값이 최소 거리</span>\n    <span class=\"token keyword\">return</span> <span class=\"token function\">GetMin</span><span class=\"token punctuation\">(</span><span class=\"token function\">GetDistance</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">,</span> l<span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">GetDistance</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">,</span> l<span class=\"token punctuation\">.</span>p2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// 두 구조체의 변수들(x,y)를 통해 거리 계산하는 함수</span>\n<span class=\"token keyword\">double</span> <span class=\"token function\">GetDistance</span><span class=\"token punctuation\">(</span>POINT2 a<span class=\"token punctuation\">,</span> POINT2 b<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token function\">sqrt</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">.</span>x <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">.</span>x <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">.</span>y <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">.</span>y <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token comment\">// 오른쪽 마우스 클릭했을 때 어디 위치를 기준으로 드래그 할것인지를 분별하는 함수</span>\n<span class=\"token keyword\">double</span> <span class=\"token function\">GetDistance2</span><span class=\"token punctuation\">(</span>POINT a<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> bx<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> by<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token function\">sqrt</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>bx <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span>bx <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>by <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span>by <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token comment\">// 두 실수형의 크기를 비교하여 작은 값을 출력</span>\n<span class=\"token keyword\">double</span> <span class=\"token function\">GetMin</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> d1<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> d2<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>d1 <span class=\"token operator\">&lt;</span> d2<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> d1<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> d2<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token comment\">// 두 실수형의 크기를 비교하여 큰 값을 출력</span>\n<span class=\"token keyword\">double</span> <span class=\"token function\">GetMax</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> d1<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> d2<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>d1 <span class=\"token operator\">></span> d2<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> d1<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> d2<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"6-선의-드래그\" style=\"position:relative;\"><a href=\"#6-%EC%84%A0%EC%9D%98-%EB%93%9C%EB%9E%98%EA%B7%B8\" aria-label=\"6 선의 드래그 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. 선의 드래그</h3>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 650px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 34.99267935578331%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAOCAMAAABq1a50AAAKvmlDQ1BpY2MAAHjalZcHUFNZF8fvey+90AIRkBJ6E6QIBJASegAB6WAjJIGEEmNCELEriyu4FkSkqKzgooiCawFkLYgFC4tgAVR0gywq6rpYsKGyD/gIu9/MN9/sydy5v5w593/OvXPvzHkAUAkcsTgdVgEgQ5QpiQjwZsTFJzDwAwACMKADW6DH4UrFrPDwEIDa1PxPe9+NRqN223pcC/w7U+XxpVwAoHCUk3hSbgbKJ9HxiiuWZAKAHED9RsszxeN8FWV1CVogyn3jnDLJw+OcNMEYzERMVIQPypoAECgcjiQFAIox6mdkcVNQHYovyrYinlCEMvofeHAFHB7KaF4wKyNj6TjLUTZP+ptOyj80kxSaHE6Kgif3MmEEX6FUnM5Z8S+P4/9bRrpsKocpOigCSWAEOtPRM+tNWxqsYFFSaNgUC3kT8RMskAVGTzFX6pMwxTyOb7BibXpoyBQnC/3ZCp1MdtQU86V+kVMsWRqhyJUs8WFNMUcynVeWFq3wC/hshX6OICp2irOEMaFTLE2LDJ6O8VH4JbIIRf18UYD3dF5/xd4zpH/br5CtWJspiApU7J0zXT9fxJrWlMYpauPxff2mY6IV8eJMb0UucXq4Ip6fHqDwS7MiFWsz0Qs5vTZccYapnKDwKQa+wA+EoD8GiAb2wBHYASbqA5n87PE7CnyWildIhCmCTAYLfWV8BlvEtZnFsLe1cwFg/M1OXom3vRNvEaITpn1iVN8FVUKqpn1J2gA0ovdIizjtMz4IgHIcAA3ruDJJ1qRv/DkBLCABZaAOtIAeMALmwBqtzwm4AS+04iAQBqJAPFgMuEAAMoAELAerwHqQBwrAdrALlIEKUAUOgaPgOGgEZ8AFcAXcAJ3gLngA5GAQvADD4D0YhSAID1EhGqQF6UMmkBVkDzEhD8gPCoEioHgoEUqBRJAMWgVthAqgQqgM2g/VQD9Dp6EL0DWoC7oH9UND0BvoM4zAFFgd1oVN4dkwE2bBwXAUvAhOgZfBOXAuvBUugSvhI3ADfAG+Ad+F5fALeAQBCBmhIwaINcJEfJAwJAFJRiTIGiQfKUYqkTqkGWlDbiNy5CXyCYPD0DAMjDXGDROIicZwMcswazBbMGWYQ5gGzCXMbUw/ZhjzDUvF6mCtsK5YNjYOm4Jdjs3DFmOrsaewl7F3sYPY9zgcjo4zwznjAnHxuFTcStwW3F5cPa4F14UbwI3g8XgtvBXeHR+G5+Az8Xn4UvwR/Hn8Lfwg/iOBTNAn2BP8CQkEEWEDoZhwmHCOcIvwlDBKVCGaEF2JYUQecQVxG/EAsZl4kzhIHCWpksxI7qQoUippPamEVEe6TOojvSWTyYZkF/J8spC8jlxCPka+Su4nf6KoUSwpPpSFFBllK+UgpYVyj/KWSqWaUr2oCdRM6lZqDfUi9RH1oxJNyUaJrcRTWqtUrtSgdEvplTJR2USZpbxYOUe5WPmE8k3llypEFVMVHxWOyhqVcpXTKj0qI6o0VTvVMNUM1S2qh1WvqT5Tw6uZqvmp8dRy1arULqoN0BCaEc2HxqVtpB2gXaYNquPUzdTZ6qnqBepH1TvUhzXUNOZoxGhka5RrnNWQ0xG6KZ1NT6dvox+nd9M/z9CdwZrBn7F5Rt2MWzM+aM7U9NLka+Zr1mve1fysxdDy00rT2qHVqPVQG6NtqT1fe7n2Pu3L2i9nqs90m8mdmT/z+Mz7OrCOpU6EzkqdKp12nRFdPd0AXbFuqe5F3Zd6dD0vvVS9Ir1zekP6NH0PfaF+kf55/ecMDQaLkc4oYVxiDBvoGAQayAz2G3QYjBqaGUYbbjCsN3xoRDJiGiUbFRm1Gg0b6xvPM15lXGt834RowjQRmOw2aTP5YGpmGmu6ybTR9JmZphnbLMes1qzPnGruab7MvNL8jgXOgmmRZrHXotMStnS0FFiWW960gq2crIRWe626ZmFnucwSzaqc1WNNsWZZZ1nXWvfb0G1CbDbYNNq8mm08O2H2jtlts7/ZOtqm2x6wfWCnZhdkt8Gu2e6NvaU9177c/o4D1cHfYa1Dk8PrOVZz+HP2zel1pDnOc9zk2Or41cnZSeJU5zTkbOyc6LzHuYepzgxnbmFedcG6eLusdTnj8snVyTXT9bjrn27Wbmluh92ezTWby597YO6Au6E7x32/u9yD4ZHo8aOH3NPAk+NZ6fnYy8iL51Xt9ZRlwUplHWG98rb1lnif8v7g4+qz2qfFF/EN8M337fBT84v2K/N75G/on+Jf6z8c4BiwMqAlEBsYHLgjsIety+aya9jDQc5Bq4MuBVOCI4PLgh+HWIZIQprnwfOC5u2c1xdqEioKbQwDYeywnWEPw83Cl4X/Mh83P3x++fwnEXYRqyLaImmRSyIPR76P8o7aFvUg2jxaFt0aoxyzMKYm5kOsb2xhrDxudtzquBvx2vHC+KYEfEJMQnXCyAK/BbsWDC50XJi3sHuR2aLsRdcWay9OX3x2ifISzpITidjE2MTDiV84YZxKzkgSO2lP0jDXh7ub+4LnxSviDfHd+YX8p8nuyYXJz1LcU3amDAk8BcWCl0IfYZnwdWpgakXqh7SwtINpY+mx6fUZhIzEjNMiNVGa6NJSvaXZS7vEVuI8sXyZ67Jdy4YlwZJqKSRdJG3KVEebo3aZuew7WX+WR1Z51sflMctPZKtmi7LbV1iu2LziaY5/zk8rMSu5K1tXGaxav6p/NWv1/jXQmqQ1rWuN1uauHVwXsO7QetL6tPW/brDdULjh3cbYjc25urnrcge+C/iuNk8pT5LXs8ltU8X3mO+F33dsdthcuvlbPi//eoFtQXHBly3cLdd/sPuh5IexrclbO7Y5bdu3HbddtL17h+eOQ4WqhTmFAzvn7WwoYhTlF73btWTXteI5xRW7Sbtlu+UlISVNpcal20u/lAnK7pZ7l9fv0dmzec+Hvby9t/Z57aur0K0oqPj8o/DH3v0B+xsqTSuLq3BVWVVPDsQcaPuJ+VNNtXZ1QfXXg6KD8kMRhy7VONfUHNY5vK0WrpXVDh1ZeKTzqO/Rpjrruv319PqCY+CY7NjznxN/7j4efLz1BPNE3UmTk3tO0U7lN0ANKxqGGwWN8qb4pq7TQadbm92aT/1i88vBMwZnys9qnN12jnQu99zY+ZzzIy3ilpcXUi4MtC5pfXAx7uKdS/MvdVwOvnz1iv+Vi22stvNX3a+eueZ67fR15vXGG043Gtod20/96vjrqQ6njoabzjebOl06m7vmdp275Xnrwm3f21fusO/cuBt6t6s7uru3Z2GPvJfX++xe+r3X97Pujz5Y14fty3+o8rD4kc6jyt8sfquXO8nP9vv2tz+OfPxggDvw4nfp718Gc59QnxQ/1X9a88z+2Zkh/6HO5wueD74Qvxh9mfeH6h97Xpm/Ovmn15/tw3HDg68lr8febHmr9fbguznvWkfCRx69z3g/+iH/o9bHQ5+Yn9o+x35+Orr8C/5LyVeLr83fgr/1jWWMjYk5Es5EK4CgA05OBuAN2idQ4wGgdQJAWjDZU08YNPkdMEHgf/Fk3z1hTgBUtQAQtQ6AEHQuRWdTdCh7ARCOjigvADs4KMZ/TJrsYD+pRW5EW5PisbG3aP+ItwDga8/Y2Gjj2NjXarTY+wC0vJ/s5cdN5Qj69eLK8g8P6c5elP3fPfVfvWEQiN3NeocAAAGtUExURd3i5sLGysPFyMXHy77ByLO3vK2vtZGZnoSJkYSMkoOKkYaNlI2SmZqfpq6yt8LEycq/wNyvqeHEwcDHz7i5u73AxLa6wK+0u6apr5qepHV+hXF3gHF5gXF7gnF4gHV9hX+FjY2Tm6yvtbe6wMSrqdSknOXQzszQ1Kqus7e7w6uvtK+1wKittZKXnY+WoZGZpJGapZKapZKbppOcppmiraastrG3v7m6wcbHzKettLG1vLm+xbC0vLi+yZyhp5ebpJ2msJ+os6Cos5+ns6CptKKqtaivu7O4wrrAyb3DzL7EzdfZ3ebm6PDx9PX3+vLz9vP09/T19+7v8vX3+fb5++bo6ujp6/X2+Pj5+/b2+Pb3+ff6+/j6+/f6+uvs7e7u7/////f2+O/v7/Lx8f///vTy9vDx8ejo6P79/Orr6+3t7fb09/z7+uzt7d7e3vPx9OTk5Ofn5/Px9dvd3Pz8/eLi4uXm5vTz9v38/Nrc2/Ty9eHi4uTl5ubm5vv7+/b1+P79/vLx9P7+/vr5+vj2+fPy9f/+//Hx9P7+/dna29TX2NTW2MXHydHU1dvd36OXwOgAAAAJcEhZcwAAFxEAABcRAcom8z8AAAAHdElNRQfkAxMPFTvJ7zmYAAAApUlEQVQYGX3BQUsCQRjH4d9/fHffRUSSgm4ejEj8/h/GDkHQNboYKK0yzuKyzXiY5xEaobo3TWJQclhqgib2qhETDWJAYqQY7FEkivwLulAw9W3oSDoj407JHQ9O4pGMOyX/5c8a4Ol4JtOIwrNgbi3QfpNrRc76H1gEYN1QoyWJAbMvKjanTxKDF52pmC0YGNg7FduPnoGBqNlzYw8rdpSkFfd0BcJgGLh+i8zWAAAAKHRFWHRpY2M6Y29weXJpZ2h0AENvcHlyaWdodCBBcHBsZSBJbmMuLCAyMDE5WEs11wAAABd0RVh0aWNjOmRlc2NyaXB0aW9uAERpc3BsYXkXG5W4AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"Screen Shot 2019-03-10 at 10.20.07 PM\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/2H4NhSYNEKBHlcVRsIjUIp/111ccb4c60b90ab26e35d595d5dde2dc/Screen_Shot_2019-03-10_at_10.20.07_PM.png\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/2H4NhSYNEKBHlcVRsIjUIp/111ccb4c60b90ab26e35d595d5dde2dc/Screen_Shot_2019-03-10_at_10.20.07_PM.png?w=342 342w,\nhttps://images.ctfassets.net/e1rkozd9gki4/2H4NhSYNEKBHlcVRsIjUIp/111ccb4c60b90ab26e35d595d5dde2dc/Screen_Shot_2019-03-10_at_10.20.07_PM.png?w=683 683w,\nhttps://images.ctfassets.net/e1rkozd9gki4/2H4NhSYNEKBHlcVRsIjUIp/111ccb4c60b90ab26e35d595d5dde2dc/Screen_Shot_2019-03-10_at_10.20.07_PM.png?w=1366 1366w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span>\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 413px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 31.719128329297824%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEATABMAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAANACgDASIAAhEBAxEB/8QAGQAAAwADAAAAAAAAAAAAAAAAAAIFAQQG/8QAKhAAAgEDAgQEBwAAAAAAAAAAAQIDABEhBDEFElGSFBVB0SIjM1JTYbH/xAAVAQEBAAAAAAAAAAAAAAAAAAAABP/EABoRAAEFAQAAAAAAAAAAAAAAAAEAAxRSkQT/2gAMAwEAAhEDEQA/AOGfi+rkKyESWK831I8jtxSHiurERazZsQedDYHAxbrU9eIBIkURNdRuX9bAbW2xtQ/EpLMIgy3wCzcxG/rYdaolP3OlTxGKDAto8Y1ygkvgb4Wk891f5D2r7VOE8yiwlcD9Met/7WfEz4+dJgWHxHApKfudKROegwKh55q/vPavtRU555pE5HldlvezMSL0UlP3OlInPQYF/9k='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report14\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/kq2qySvSvTLYY7sji9H5Y/d7c4708a7e82fb39541cba9566675b26/LineDrawingApplication_Report14.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/kq2qySvSvTLYY7sji9H5Y/d7c4708a7e82fb39541cba9566675b26/LineDrawingApplication_Report14.jpg?w=103 103w,\nhttps://images.ctfassets.net/e1rkozd9gki4/kq2qySvSvTLYY7sji9H5Y/d7c4708a7e82fb39541cba9566675b26/LineDrawingApplication_Report14.jpg?w=207 207w,\nhttps://images.ctfassets.net/e1rkozd9gki4/kq2qySvSvTLYY7sji9H5Y/d7c4708a7e82fb39541cba9566675b26/LineDrawingApplication_Report14.jpg?w=413 413w\"\n        sizes=\"(max-width: 413px) 100vw, 413px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span>\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 413px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 63.43825665859565%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASwBLAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAZACgDASIAAhEBAxEB/8QAGgAAAwADAQAAAAAAAAAAAAAAAAIEAQMFBv/EAC4QAAEDAgQCCAcAAAAAAAAAAAEAAhEDIQQFEjEiIxMVQVFhcYHRQlJjcpGh4f/EABgBAQADAQAAAAAAAAAAAAAAAAQAAQMF/8QAIxEAAQMEAQQDAAAAAAAAAAAAAgABEQMEElEhBSOBoUJhcf/aAAwDAQACEQMRAD8A8Oc0x9YtqaXGW6jzKcx+LLBx+YaDy3Sbt42G3lC09DmdBgpHL3McGxdt9gO3ySvbmpJ0YVzB9gMJLnffF3jysgDpcdxmn6xSuzjHNLgXGW2MNafDuS9d40xxOvtwD2Wg5fmRJPQ1hJkwY8UdXZkI5Ne1hfZNIyx4epKM4Wc8MMeFQc6xzRLi4DvLB7IU5y7MnN0uoViN4KEbO82XtXhZaH0rqYxFZjHh/wAMmKAiYFt77ymNDE6CBV3ueVt6z4Lhnf0Cwgu5u/BLp0yoCMFTl/2FY+tVa57RXbw/M6J/aUV65I51O/1P6pEJpV6TjDBzuXR3BpllY6vXawu6ZhjsD5KFGhFyLamI6X//2Q=='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report15\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/1qy1Bh6rdxkTRLlNMzBw5w/71d2bd2a91960f64d6c2604b0280e333/LineDrawingApplication_Report15.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/1qy1Bh6rdxkTRLlNMzBw5w/71d2bd2a91960f64d6c2604b0280e333/LineDrawingApplication_Report15.jpg?w=103 103w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1qy1Bh6rdxkTRLlNMzBw5w/71d2bd2a91960f64d6c2604b0280e333/LineDrawingApplication_Report15.jpg?w=207 207w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1qy1Bh6rdxkTRLlNMzBw5w/71d2bd2a91960f64d6c2604b0280e333/LineDrawingApplication_Report15.jpg?w=413 413w\"\n        sizes=\"(max-width: 413px) 100vw, 413px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<p>오른쪽 마우스가 다운되었을 경우 모든 선분들의 거리를 체크한다. 그중에 선과의 거리가 픽셀 –1이상, +1이하이 되는 선분들의 우선순위(가장 최신에 생성된 선분)를 체크한 후에 최종적으로 하나의 선을 선택한다. 하나의 선의 번호가 결정이 되면 마우스 드래그가 가능하게 전역 변수 lineMoving가 true로 변경이 되고 드래그가 가능하다.</p>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 650px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 38.561484918793504%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,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'); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"Screen Shot 2019-03-10 at 10.39.22 PM\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/6k154xxXQFUyzHqOi5vnX9/61f6f8e5cf3cdefdf89dd5f90ccc3b38/Screen_Shot_2019-03-10_at_10.39.22_PM.png\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/6k154xxXQFUyzHqOi5vnX9/61f6f8e5cf3cdefdf89dd5f90ccc3b38/Screen_Shot_2019-03-10_at_10.39.22_PM.png?w=539 539w,\nhttps://images.ctfassets.net/e1rkozd9gki4/6k154xxXQFUyzHqOi5vnX9/61f6f8e5cf3cdefdf89dd5f90ccc3b38/Screen_Shot_2019-03-10_at_10.39.22_PM.png?w=1078 1078w,\nhttps://images.ctfassets.net/e1rkozd9gki4/6k154xxXQFUyzHqOi5vnX9/61f6f8e5cf3cdefdf89dd5f90ccc3b38/Screen_Shot_2019-03-10_at_10.39.22_PM.png?w=2155 2155w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span>\n<span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 414px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 52.17391304347826%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEARwBHAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAVACgDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAIDBAEG/8QAKhAAAgEDAgQFBQEAAAAAAAAAAQIRAAMhBRIEIjFBEyNhcaEVUYGRwfD/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAwH/xAAZEQACAwEAAAAAAAAAAAAAAAAAAQMUUpH/2gAMAwEAAhEDEQA/APDtqXHXdl0kncu7NzJx7VFuN1BbbSrboDAb8gHpiPQ1mtKps258IHC5nuoqSum173lcgB2lT2n/AH6q1ibT6yNaHC4jrcfqIVm3swXrtM/yofU9Rxy3s9OXr8Vjt8VbW2ylMlYmOnzVg421yeUOWZMfHWtsTbfWZWgwuIvbVNRRNzC8q/ciBn8UrBxPEC+RFpUgRImT75ilLM231itBhcRpTU9lpEVHBWDPidwAAYj0qDagwt3LdkOiPggvOO/YUpUS5ipSlAKUpQH/2Q=='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report16\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/01B1EQ6nAaDzgTCtFrfa6j/1d7ed7c53150528e9ead8ad9c60ab522/LineDrawingApplication_Report16.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/01B1EQ6nAaDzgTCtFrfa6j/1d7ed7c53150528e9ead8ad9c60ab522/LineDrawingApplication_Report16.jpg?w=104 104w,\nhttps://images.ctfassets.net/e1rkozd9gki4/01B1EQ6nAaDzgTCtFrfa6j/1d7ed7c53150528e9ead8ad9c60ab522/LineDrawingApplication_Report16.jpg?w=207 207w,\nhttps://images.ctfassets.net/e1rkozd9gki4/01B1EQ6nAaDzgTCtFrfa6j/1d7ed7c53150528e9ead8ad9c60ab522/LineDrawingApplication_Report16.jpg?w=414 414w\"\n        sizes=\"(max-width: 414px) 100vw, 414px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<p>선분들의 거리를 비교하여 distanceResult[10]에 저장하고, 거리 차이가 1 이하인 선들 중에 가장 나중에 만들어진 선을 lineSelect 변수에 저장한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> l <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> l <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> lines<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> l<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>distanceResult<span class=\"token punctuation\">[</span>l<span class=\"token punctuation\">]</span> <span class=\"token operator\">>=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span> <span class=\"token operator\">&amp;&amp;</span> distanceResult<span class=\"token punctuation\">[</span>l<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    lineSelect <span class=\"token operator\">=</span> l<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>위 디버그 출력을 보게 되면, 현재 좌표와 line 1과 line 4의 거리가 픽셀 1 이하인 것을 확인할 수 있다. 그러나 line 4가 나중에 생성되었기 때문에 line 4번이 선택되었다. 결국 드래그를 시도할 경우 line4번만 움직이게 된다.</p>\n<p>마우스가 움직일 때 작동되는 소스</p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token keyword\">case</span> WM_MOUSEMOVE<span class=\"token operator\">:</span>\n  <span class=\"token comment\">// 마우스가 왼쪽 클릭된 상태에서 움직일 경우(선 그리기)</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>inputting<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token comment\">// 잠시 생략</span>\n  <span class=\"token comment\">// 마우스가 왼쪽 클릭된 상태에서 움직일 경우(선 드래그)</span>\n  <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>lineMoving<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 실수형 intervalX, intervalY를 통해 선택된 라인의 X와 Y의 변경을 통해 드래그 효과</span>\n    를 만듬\n    <span class=\"token keyword\">double</span> intervalX <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">double</span> intervalY <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n    HDC hdc <span class=\"token operator\">=</span> <span class=\"token operator\">::</span><span class=\"token function\">GetDC</span><span class=\"token punctuation\">(</span>hWnd<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span><span class=\"token operator\">::</span><span class=\"token function\">SetROP2</span><span class=\"token punctuation\">(</span>hdc<span class=\"token punctuation\">,</span> R2_NOTXORPEN<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// 이전 라인을 지움</span>\n    <span class=\"token function\">drawLine</span><span class=\"token punctuation\">(</span>hdc<span class=\"token punctuation\">,</span> lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// 현재 클릭된 오른쪽 마우스와 line 구조체의 p0과 p1의 거리를 비교해 어디를 기준으로</span>\n    드래그 할 것인지 분별\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">GetDistance2</span><span class=\"token punctuation\">(</span>lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">,</span> <span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">HIWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">>=</span>\n      <span class=\"token function\">GetDistance2</span><span class=\"token punctuation\">(</span>lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">,</span> <span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">HIWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      intervalX <span class=\"token operator\">=</span> <span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">;</span>\n      intervalY <span class=\"token operator\">=</span> <span class=\"token function\">HIWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      intervalX <span class=\"token operator\">=</span> <span class=\"token function\">LOWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">;</span>\n      intervalY <span class=\"token operator\">=</span> <span class=\"token function\">HIWORD</span><span class=\"token punctuation\">(</span>lParam<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token comment\">// intervalX를 통해 p0과 p1의 x값을 동일하게 증감</span>\n    <span class=\"token comment\">// intervalY를 통해 p0과 p1의 y값을 동일하게 증감</span>\n    lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>x <span class=\"token operator\">+=</span> intervalX<span class=\"token punctuation\">;</span>\n    lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p0<span class=\"token punctuation\">.</span>y <span class=\"token operator\">+=</span> intervalY<span class=\"token punctuation\">;</span>\n    lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>x <span class=\"token operator\">+=</span> intervalX<span class=\"token punctuation\">;</span>\n    lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>p1<span class=\"token punctuation\">.</span>y <span class=\"token operator\">+=</span> intervalY<span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// 이후 라인을 그림</span>\n    <span class=\"token function\">drawLine</span><span class=\"token punctuation\">(</span>hdc<span class=\"token punctuation\">,</span> lines<span class=\"token punctuation\">[</span>lineSelect<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span><span class=\"token operator\">::</span><span class=\"token function\">ReleaseDC</span><span class=\"token punctuation\">(</span>hWnd<span class=\"token punctuation\">,</span> hdc<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>위 소스를 보면 'GetDistance2' 함수를 이용해 현재 위치와 라인의 p0, p1의 거리를 비교하여서 어디를 눌러서 드래그할 것인지를 분별하여 드래그하게 된다. 만일 p0의 위치가 현재 오른쪽 마우스 다운한 위치와 더 가깝다면 p0의 위치를 선택하여 선의 드래그가 시작되고, 반대로 p1의 위치가 더 가깝다면 p1의 위치를 선택하여 선의 드래그가 시작되고 마우스를 움직이면 된다. 'GetDistance2' 함수를 이용하여 p0 또는 p1를 정하게 되면 그것을 기분으로 현재 움직이는 마우스의 좌표의 X, Y 차이를 통해 line의 모든 변수를 이동시킨다.</p>\n<h3 id=\"7-창의-변화\" style=\"position:relative;\"><a href=\"#7-%EC%B0%BD%EC%9D%98-%EB%B3%80%ED%99%94\" aria-label=\"7 창의 변화 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. 창의 변화</h3>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 650px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 31.40681003584229%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,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'); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"Screen Shot 2019-03-10 at 10.43.52 PM\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/1Joy17qwiwu2ZTEwqhUYYc/04af3e099d3073671737c30b1cc11253/Screen_Shot_2019-03-10_at_10.43.52_PM.png\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/1Joy17qwiwu2ZTEwqhUYYc/04af3e099d3073671737c30b1cc11253/Screen_Shot_2019-03-10_at_10.43.52_PM.png?w=558 558w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1Joy17qwiwu2ZTEwqhUYYc/04af3e099d3073671737c30b1cc11253/Screen_Shot_2019-03-10_at_10.43.52_PM.png?w=1116 1116w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1Joy17qwiwu2ZTEwqhUYYc/04af3e099d3073671737c30b1cc11253/Screen_Shot_2019-03-10_at_10.43.52_PM.png?w=2232 2232w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span></p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token comment\">// 라인 구조체</span>\n<span class=\"token keyword\">typedef</span> <span class=\"token keyword\">struct</span> <span class=\"token class-name\">Line</span> <span class=\"token punctuation\">{</span>\n  POINT p0<span class=\"token punctuation\">;</span>\n  POINT p1<span class=\"token punctuation\">;</span>\n  COLORREF color<span class=\"token punctuation\">;</span> <span class=\"token comment\">//0x00bbggrr</span>\n<span class=\"token punctuation\">}</span> Line<span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 입력된 모든 라인들을 가지는 벡터</span>\nstd<span class=\"token operator\">::</span>vector <span class=\"token operator\">&lt;</span> Line <span class=\"token operator\">></span> lines<span class=\"token punctuation\">;</span></code></pre></div>\n<p>모든 선들은 전역으로 선언된 구조체 line, 벡터 lines를 사용하기 때문에 창의 변화가 있더라도 올바르게 잘 그려주고 드래그도 잘 된다.</p>\n<h3 id=\"8-과제-소감\" style=\"position:relative;\"><a href=\"#8-%EA%B3%BC%EC%A0%9C-%EC%86%8C%EA%B0%90\" aria-label=\"8 과제 소감 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. 과제 소감</h3>\n<p><span\n        class=\"gatsby-resp-image-wrapper\"\n        style=\"position: relative; display: block; ; max-width: 650px; margin-left: auto; margin-right: auto;\"\n      >\n        <span\n          class=\"gatsby-resp-image-background-image\"\n          style=\"padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAjACMAAD/2wBDABALDA4MChAODQ4SERATGCcZGBYWGDAiJBwnOTI8OzgyNzY/R1pMP0NVRDY3TmtPVV1gZWZlPUtvd25idlpjZWH/2wBDARESEhgVGC4ZGS5hQTdBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWH/wAARCAAeACgDASIAAhEBAxEB/8QAGwAAAgMAAwAAAAAAAAAAAAAABQYAAgMBBAf/xAAtEAACAQMCBQEHBQAAAAAAAAABAgMABBEFIRITMWGBBhQjQVFScaEyQ7HB0v/EABYBAAMAAAAAAAAAAAAAAAAAAAEDBP/EAB0RAAICAgMBAAAAAAAAAAAAAAABAhEDEhNBUSH/2gAMAwEAAhEDEQA/AH1pFQZZgo+ZOKxS4JeRUhkcK2Mgrg7A/E96Tbn1BfOrQySR42JzCR0365rCH1heWvEqJbMC2TlG22A+rtR1dgTTHsyyE49nlHclf9VhPcvEOI2s3DkDiymNzj6s/iq6HqJ1TS4rpwquxIYL0GDVtZmFvpc87fpjAc+CDQaCJ3qezaeeS4XJ4Aq4LfP4AVK4fW4Z2nPKkJThmCnYErjbftUqe34UqqBLBo2DS2zwqQcBsLnya64t1kJKRk9w/F/ANGk9P865ZhOIkPRUQAjzRi19M2Knjn5s5G/vHP8AWKoc0S6sXLbT9RaPEM1wtvn9ksyg/YDY+KyuNO1Ro5UHtXDjJD8SgjzjNOVpqVtFIbPTbNVddiXIQfjJNEisq2shuBEXPTlrgAeaXLI+higu0ebREJcNzEdQVGcRkDZcHqalGdX0VZ2aWOTl9gPx9qlLWXG/tjuOfh//2Q=='); background-size: cover; display: block;\"\n        >\n          <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"LineDrawingApplication Report17\"\n        title=\"\"\n        src=\"https://images.ctfassets.net/e1rkozd9gki4/1yS51WGAMXSNhpUixJs7ez/d8de0d060f2172966e3bc903a936abd0/LineDrawingApplication_Report17.jpg\"\n        srcset=\"https://images.ctfassets.net/e1rkozd9gki4/1yS51WGAMXSNhpUixJs7ez/d8de0d060f2172966e3bc903a936abd0/LineDrawingApplication_Report17.jpg?w=200 200w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1yS51WGAMXSNhpUixJs7ez/d8de0d060f2172966e3bc903a936abd0/LineDrawingApplication_Report17.jpg?w=400 400w,\nhttps://images.ctfassets.net/e1rkozd9gki4/1yS51WGAMXSNhpUixJs7ez/d8de0d060f2172966e3bc903a936abd0/LineDrawingApplication_Report17.jpg?w=800 800w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        loading=\"lazy\"\n      />\n        </span>\n      </span>\n이번 과제를 통해서 GDI, Win32 API, Visual Studio의 확장자 등을 공부하게 되었다. 과제를 해보기 전에는 선 그리기, 움직임을 구현한다는 것이 쉽고 단순할 거라고 생각했는데, 직접 구현하려고 하니 다양한 변수, 메서드, 함수들이 필요하다는 것을 느꼈다. 그리고 사용자가 생각하지 못한 방법으로 프로그램을 사용할 수 있기에 여러 상황들을 미리 예측해볼 수 있는 시간도 가질 수 있어서 프로그래밍 공부에도 도움이 되었다. 특히 TRACE 함수를 이용해 디버그 용도로 다양한 값들을 출력해보면서 내가 구현하고 있는 프로그램 변수의 값들과 진행 상황들을 볼 수 있어서 좋았다. TRACE 함수로 문자열을 출력하려고 했을 때 계속 오류가 나서 30분 동안 혹시 내가 코딩을 잘못했나 싶었는데, 문자열 앞에 ‘_T’를 표시하지 않아서였다. 이러한 작은 글자에도 프로그램은 예민하게 받아들이는 모습에 더 기계적인 관점에서 코딩하게 된 것 같다. 이 과제가 ‘게임 프로그래밍’ 수업의 첫 과제이지만 앞으로 진행될 수업과 과제가 더욱 기대가 되고 개발자로서 더 열정을 다해 개발해보고 싶다.</p>","excerpt":"선분 그리기 응용프로그램 실행 화면 및 소스 설명 1. 처음 실행한 모습   처음 실행한 상태에서 오른쪽 버튼을 클릭하게 되면 , WndProc…"}}}]}},"pageContext":{"slug":"direct2d","limit":6,"skip":0,"numPages":1,"currentPage":1}}}