<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>애드소프트</title>
    <link>https://addsoft.tistory.com/</link>
    <description>* 시간없이 꿈꾸는 여행자
* 야구지식 없는 야구사랑
* 입짧은 대식가
* 쇼핑을 좋아하는 블로거
* 결론없는 프로그래머</description>
    <language>ko</language>
    <pubDate>Wed, 8 Jul 2026 03:07:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>애드소프트(Addsoft)</managingEditor>
    <image>
      <title>애드소프트</title>
      <url>https://tistory1.daumcdn.net/tistory/4352316/attach/34401e7c38a14d01b062be04f13c3e98</url>
      <link>https://addsoft.tistory.com</link>
    </image>
    <item>
      <title>ASDSvc.exe 프로세스는 무엇인가?</title>
      <link>https://addsoft.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;ASDSvc.exe 는 무슨 프로세스?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;오늘은 작업관리자에 실행되고 있는 ASDSvc.exe 에 대해 알아보겠습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;19&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7nLcx/btrsLSg2D7U/ukOx8enCJG77jKMLscmsZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7nLcx/btrsLSg2D7U/ukOx8enCJG77jKMLscmsZ1/img.png&quot; data-alt=&quot;ASDSvc 프로세스 세부정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7nLcx/btrsLSg2D7U/ukOx8enCJG77jKMLscmsZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7nLcx%2FbtrsLSg2D7U%2FukOx8enCJG77jKMLscmsZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;712&quot; height=&quot;19&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;19&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ASDSvc 프로세스 세부정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ASDSvc.exe 프로세스의 상세 정보를 확인해보니 ASDF Service Application이라고 설명되어 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 정보를 보고는 아무것도 알 수 없어 알아보려 합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ASDSvc.exe 파일 속성을 찾아보니 다음 서비스(SafeTransactionSVC)와 연관되어 있는 것을 알 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u0LUO/btrsSuZ6hBZ/uXc0WhC5rTOvzKsFkGPN3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u0LUO/btrsSuZ6hBZ/uXc0WhC5rTOvzKsFkGPN3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u0LUO/btrsSuZ6hBZ/uXc0WhC5rTOvzKsFkGPN3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu0LUO%2FbtrsSuZ6hBZ%2FuXc0WhC5rTOvzKsFkGPN3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;469&quot; height=&quot;304&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DoQs4/btrsO2wLgwi/J7QxkFiTPqX5ApiZOjF9V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DoQs4/btrsO2wLgwi/J7QxkFiTPqX5ApiZOjF9V1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DoQs4/btrsO2wLgwi/J7QxkFiTPqX5ApiZOjF9V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDoQs4%2FbtrsO2wLgwi%2FJ7QxkFiTPqX5ApiZOjF9V1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683&quot; height=&quot;21&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;일단 서비스 정보를 찾아보니 AhnLab Safe Transaction Service 라고 표시된걸 보니&amp;nbsp; 백신 프로그램의 서비스로 예상됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;안랩을 통해 알아본 결과 ASD는 Ahnlab Smart Defense 란 약칭이라는 것을 알 수 있었습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ASD에 대해 찾아 보니 다음과 같이 설명 되어 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #707070;&quot;&gt;AhnLab Smart Defense(이하 ASD) 는 기존에 악성코드에 대한 모든 데이터를 PC로 다운로드 한 후 PC에서 처리하던 방식과 달리 Cloud Computing* 개념을 이용한 새로운 기술이다. 즉, 대규모 파일 DB를 중앙서버에서 관리하며, PC에 설치되어 있는 AhnLab Smart Defense 엔진에서 파일의 악성여부에 대해 문의하면 이에 대해 응답을 해주는 방식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #707070;&quot;&gt;ASDF Service Application에 대한 설명은 아닌 ASD 제품에 대한 설명으로 판단됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;간단히 요약해 보자면,&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;ASDF Service Application은 안랩 ASD 제품군의 실행 프로세스가 외부의 공격을 받아 종료되거나 변경 되는 문제를 보호하기 위한 서비스로 확인됩니다. 해당 프로세스는 악성 프로세스가 아니며, 은행을 이용할 경우 설치되는 프로세스로 지워도 은행을 이용할 때 마다 설치가 되므로 시스템의 문제나 성능저하의 원인이 아니라면 굳지 삭제하지 않아도 될 것 같습니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로세스정보</category>
      <category>프로세스정보</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/53</guid>
      <comments>https://addsoft.tistory.com/53#entry53comment</comments>
      <pubDate>Tue, 8 Feb 2022 18:57:37 +0900</pubDate>
    </item>
    <item>
      <title>MFC에서 사용되는 윈도우 데이터 형에 대해서 알아 보겠습니다.</title>
      <link>https://addsoft.tistory.com/52</link>
      <description>&lt;p&gt;안녕하세요. 애드소프트 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이전 포스팅을 해보셨다면 약간 생소한 데이터 형을 많이 보셨을 것입니다.&lt;/p&gt;
&lt;p&gt;LPCTSTR, LPTSTR와 같이 비슷하지만 다른 데이터형들이 많이 존재하는데 이렇게 나눠진 이유가 있습니다.&lt;/p&gt;
&lt;p&gt;눈으로 봐서는 어떤 데이터형인지 잘 알 수 없는 형들이 존재합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617351695975&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#ifdef UNICODE
 typedef LPCWSTR LPCTSTR; 
#else
 typedef LPCSTR LPCTSTR;
#endif&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;선언을 따라가 보면 LPCWSTR 이나 LPCSTR을 애칭을 만들어 주는것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;이는 MBCS(멀티 바이트 문자 집합)이라고 하여 DBCS(더블 바이트 문자 집합)라고도 합니다. 이는 1또는 2바이트로 구성되며, 2바이트 보다 큰 문자 집합은 지원되지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재 Windows는 유니코드를 표준으로 사용되고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유니코드는 16비트문자 인코딩입니다. 모든 언어에 대해 충분 한 인코딩을 제공 합니다. 모든 ASCII 문자는 유니코드에 확장 문자로 포함됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;본론으로 돌아가서 LPCWSTR와 LPCSTR의 차이는 유니코드와 멀티바이트의 차이로 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;LPCWSTR을 따라가보면 다음과 같이 선언되어 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617352355257&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;typedef const wchar_t* LPCWSTR;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;LPCSTR을 따라가보면 다음과 같이 선언되어 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617352391052&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;typedef const char* LPCSTR;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같이 같은 LPCTSTR 이라도 MBCS를 호환으로 생성했냐에 따라 유니코드 또는 멀티바이트로 동적으로 선언되어 사용됩니다. 두가지는 혼용될 수 없습니다만 Convert 함수를 통해 변환 사용은 가능합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MFC에서 많이 사용되는 데이터 형에 대해 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;BOOL - Boolean 값을 나타내는 정수 값습니다. 0 또는 1 값을 사용하지만 선언은 int 형으로 선언됩니다.&lt;/p&gt;
&lt;p&gt;BSTR - 32비트 character 마지막에 NULL로 끝나는 포인터 값을 의미합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;BYTE - 부호없는 8비트 값을 의미 합니다. 네트워크 프로토콜의 단일 octet에 해당하는 8비트 부호없는 값입니다.&lt;/p&gt;
&lt;p&gt;LONG - 부호없는 32비트 정수값입니다.&lt;/p&gt;
&lt;p&gt;DWORD - 부호없는 32비트 정수이며, MFC에서 상당히 많이 사용하는 데이터형 입니다.&lt;/p&gt;
&lt;p&gt;LPARAM - 윈도우 프로시져에서 사용되는 데이터형 중 하나입니다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;WPARAM - LPARAM과 동일합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;LPVOID - 32비트 void 포인터입니다.&lt;/p&gt;
&lt;p&gt;LRESULT - 윈도우 프로시져나 볼백 할수가 리턴하는 32비트 값입니다.&lt;/p&gt;
&lt;p&gt;UINT - 부호없는 32비트 int형입니다.&lt;/p&gt;
&lt;p&gt;WNDPROC - 윈도우 프로시저 함수를 포인트하는 32비트 포인트 값입니다.&lt;/p&gt;
&lt;p&gt;WORD - 16비트 unsigned int 값입니다.&lt;/p&gt;
&lt;p&gt;POSITION - MFC에서 위치를 나타낼때 쓰는 포인터 값입니다.&lt;/p&gt;
&lt;p&gt;LPCRECT -&amp;nbsp; RECT 구조체의 포인트 값입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 정도의 데이터 형들이 MFC에서 많이 사용됩니다.&lt;/p&gt;
&lt;p&gt;다른 데이터형도 많이 쓰이지만 윈도우에 있는 데이터형만 추려보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;포스팅을 이만 마치도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;</description>
      <category>개발기록/윈도우즈개발</category>
      <category>MFC</category>
      <category>데이터형</category>
      <category>애드소프트</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/52</guid>
      <comments>https://addsoft.tistory.com/52#entry52comment</comments>
      <pubDate>Fri, 2 Apr 2021 17:57:47 +0900</pubDate>
    </item>
    <item>
      <title>MFC의 기본적인 클레스에 대해서 알아보자.</title>
      <link>https://addsoft.tistory.com/51</link>
      <description>&lt;p&gt;안녕하세요. 애드소프트 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저번 포스팅에서 갑자스럽게 윈도우 프로그래밍에 꽂혀서 코딩을 해보았는데 개념이 생각이 나지 않아&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다시 되세김 하고자 포스팅을 시작해 볼까 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MFC의 기본적인 클레스대한 이해를 돕고자한 포스팅이며 개인적인 지식이며, 잘 못된 내용이 포함되어 있을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본적인 클레스&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;CWinApp - 앱 자체를 의미 합니다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1617348816637&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;resource.h&quot;       // 주 기호입니다.


// CHelloWorldApp:
// 이 클래스의 구현에 대해서는 HelloWorld.cpp을(를) 참조하세요.
//

class CHelloWorldApp : public CWinAppEx
{
	public:
		CHelloWorldApp() noexcept;
    
    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;해더 파일을 살펴 보면 CWinApp 이라는 클레스를 상속 받아 만들어졌음을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;자제적으로 UI/UX를 표시하는 기능은 없으며, 프로그램의 초기화, 종료, 실행 등의 기능이 캡슐화 되어 있습니다.&lt;/p&gt;
&lt;p&gt;모든 앱에는 하나의 WinApp만을 상속 받아 작성되어야 합니다.&lt;/p&gt;
&lt;p&gt;주요적인 코드를 보면 메인프레임을 생성하고 Document Template를 통해 Document, MainFrame 및 뷰 사이를 연결하는 역활을 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617349464837&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    InitContextMenuManager();

	InitKeyboardManager();

	InitTooltipManager();
	CMFCToolTipInfo ttParams;
	ttParams.m_bVislManagerTheme = TRUE;
	theApp.GetTooltipManager()-&amp;gt;SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
		RUNTIME_CLASS(CMFCToolTipCtrl), &amp;amp;ttParams);

	// 애플리케이션의 문서 템플릿을 등록합니다.  문서 템플릿은
	//  문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다.
	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CHelloWorldDoc),
		RUNTIME_CLASS(CMainFrame),       // 주 SDI 프레임 창입니다.
		RUNTIME_CLASS(ListViewSample));
		
	if (!pDocTemplate)
		return FALSE;
	AddDocTemplate(pDocTemplate);


	// 표준 셸 명령, DDE, 파일 열기에 대한 명령줄을 구문 분석합니다.
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);



	// 명령줄에 지정된 명령을 디스패치합니다.
	// 응용 프로그램이 /RegServer, /Register, /Unregserver 또는 /Unregister로 시작된 경우 FALSE를 반환합니다.
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;

	// 창 하나만 초기화되었으므로 이를 표시하고 업데이트합니다.
	m_pMainWnd-&amp;gt;ShowWindow(SW_SHOW);
	m_pMainWnd-&amp;gt;UpdateWindow();

	// 타이틀 수정
	m_pMainWnd-&amp;gt;SetWindowTextW(L&quot;Hello World&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;CFrameWnd - CMainFrame&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MFC를 이용하여 작성한 코드는 기본적으로 프레임 윈도우를 두고 거기에 차일드 윈도우들을 붙이는 형식입니다.&lt;/p&gt;
&lt;p&gt;화면상에 보이는 부분은 대부분 프레임 윈도상에 구현된다고 보면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617349703478&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MainFrm.h: CMainFrame 클래스의 인터페이스
//

#pragma once

class CMainFrame : public CFrameWndEx
{
	
	protected: // serialization에서만 만들어집니다.
		CMainFrame() noexcept;
		DECLARE_DYNCREATE(CMainFrame)
    
    ...

}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CMainFrame의 클레스의 선언부를 보면 CFrameWnd를 상속 받아 구현된것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;클레스 위자드에서 메서드를 보시면 OnCreate, OnToolbarCreateNew, OnViewCustomize 등과 같이 메시지 핸들러 함수가 등록되어 있는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;대표적인 메시지로 WM_CREATE라는 함수가 발생하였을때 OnCreate가 실행되는 것입니다.&lt;/p&gt;
&lt;p&gt;이 메시지는 생성될때 발생하는 메시지 입니다.&lt;/p&gt;
&lt;p&gt;이 외에도 키보드 이벤트가 발생할때 WM_COMMAND, 뷰나 프로그램이 종료할때 WM_DESTROY, 화면에 무엇인가 그려질째 WM_PAINT등의 다양한 메시지가 존재합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;메시지 처리는 Win32API의 메시지 처리를 보시면 좀더 수월하게 이해 할 수 있으리라 생각합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617350119883&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HINSTANCE hinst; 
HWND hwndMain; 
 
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpszCmdLine, int nCmdShow) 
{ 
    MSG msg;
    BOOL bRet; 
    WNDCLASS wc; 
    UNREFERENCED_PARAMETER(lpszCmdLine); 
 
    // Register the window class for the main window. 
 
    if (!hPrevInstance) 
    { 
        wc.style = 0; 
        wc.lpfnWndProc = (WNDPROC) WndProc; 
        wc.cbClsExtra = 0; 
        wc.cbWndExtra = 0; 
        wc.hInstance = hInstance; 
        wc.hIcon = LoadIcon((HINSTANCE) NULL, 
            IDI_APPLICATION); 
        wc.hCursor = LoadCursor((HINSTANCE) NULL, 
            IDC_ARROW); 
        wc.hbrBackground = GetStockObject(WHITE_BRUSH); 
        wc.lpszMenuName =  &quot;MainMenu&quot;; 
        wc.lpszClassName = &quot;MainWndClass&quot;; 
 
        if (!RegisterClass(&amp;amp;wc)) 
            return FALSE; 
    } 
 
    hinst = hInstance;  // save instance handle 
 
    // Create the main window. 
 
    hwndMain = CreateWindow(&quot;MainWndClass&quot;, &quot;Sample&quot;, 
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 
        CW_USEDEFAULT, CW_USEDEFAULT, (HWND) NULL, 
        (HMENU) NULL, hinst, (LPVOID) NULL); 
 
    // If the main window cannot be created, terminate 
    // the application. 
 
    if (!hwndMain) 
        return FALSE; 
 
    // Show the window and paint its contents. 
 
    ShowWindow(hwndMain, nCmdShow); 
    UpdateWindow(hwndMain); 
 
    // Start the message loop. 
 
    while( (bRet = GetMessage( &amp;amp;msg, NULL, 0, 0 )) != 0)
    { 
        if (bRet == -1)
        {
            // handle the error and possibly exit
        }
        else
        {
            TranslateMessage(&amp;amp;msg); 
            DispatchMessage(&amp;amp;msg); 
        }
    } 
 
    // Return the exit code to the system. 
 
    return msg.wParam; 
} &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위 코드는 Win32API를 사용하여 앱을 생성할때 사용되는 코드입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 코드 중에서 다음 코드가 메시지를 처리할때 사용하는 코드로 보시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617350245483&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    while( (bRet = GetMessage( &amp;amp;msg, NULL, 0, 0 )) != 0)
    { 
        if (bRet == -1)
        {
            // handle the error and possibly exit
        }
        else
        {
            TranslateMessage(&amp;amp;msg); 
            DispatchMessage(&amp;amp;msg); 
        }
    } &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;윈도우 메시지 큐에 메시지가 쌓으면 하나씩 빼내어 처리하는 FIFO 방식입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MFC에서는 메시지가 발생할때 특정 기능을 추가하기 위해서는 가상함수 중 PreTranslateMessage를 통해 메시지를 후킹할 수 있으며, 다른 방법으로는 가상함수 중 WindowProc을 통해서도 가능합니다.&lt;/p&gt;
&lt;p&gt;프레임 윈도우가 하는 역활은 툴바, 스테이터스바, 메뉴, 뷰 등과 같이 메시지가 발생할때 처리하는 역활을 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;CWnd - 모든 윈도우는 CWnd상속 받아 생성된다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CMainFrame도 CFrameWnd를 상속받아 생성된거 같지만 끝까지 따라가보면 CWnd를 상속 받아 생성 된것을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Pd0O/btq1G8DuO2y/Zv4dFay7NcQy10cftfBZpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Pd0O/btq1G8DuO2y/Zv4dFay7NcQy10cftfBZpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Pd0O/btq1G8DuO2y/Zv4dFay7NcQy10cftfBZpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Pd0O%2Fbtq1G8DuO2y%2FZv4dFay7NcQy10cftfBZpk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;따라서 CWnd 객체에 대해서 자세히 이해할 필요가 있습니다. 물론 더 상위에 대한 클레스에 대해 이해를 한다면 좋겠지만 현재 수준에서 상위 클래스를 이해하기도 어려울 뿐더라 아직은 윈도우에 대한 이해가 더 중요하므로 이부분을 중점적으로 이해 하는게 좋을 것으로 생각됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위에서 설명했듯이 Win32API 또한 윈도우 프로그래밍이기 때문에 둘 다 다뤄보면 일맥 상통하는 부분을 많이 찾을 수 있을 것입니다. 두개의 공통된 부분을 보면 많은 이해력이 생길 수 있으며, Win32코드로 MFC를 채울때도 존재합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 포스팅은 MFC의 기본 클래스에 대해 알아보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발기록/윈도우즈개발</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/51</guid>
      <comments>https://addsoft.tistory.com/51#entry51comment</comments>
      <pubDate>Fri, 2 Apr 2021 17:14:44 +0900</pubDate>
    </item>
    <item>
      <title>오랜만에 다시 해보는 MFC개발...List Control 사용하기</title>
      <link>https://addsoft.tistory.com/50</link>
      <description>&lt;p&gt;안녕하세요. 애드 소프트입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저번 포스팅에서는 ListBox를 다뤄 보았는데 우여 곡절이 많았습니다.&lt;/p&gt;
&lt;p&gt;ListBox를 보다보니 여러 컬럼을 추가하는게 쉬운일 아니었습니다.&lt;/p&gt;
&lt;p&gt;불가능하진 않더라도 꼭 ListBox만 고집해야 하는 상황이 아니라면 구지 사용할 이유가 없을듯 합니다.&lt;/p&gt;
&lt;p&gt;멀티 컬럼을 위해서는 ListView를 사용하는게 정신건강에도 좋을듯 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 포스팅에서는 ListView를 사용하는 법을 같이 진행해 봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ListView를 사용하기 위한 CFormview를 기본클래스로 클래스를 하나 생성하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/edf8wm/btq1z34f8BE/Y1lFRURNkEWlzDqoDSP2A1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/edf8wm/btq1z34f8BE/Y1lFRURNkEWlzDqoDSP2A1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/edf8wm/btq1z34f8BE/Y1lFRURNkEWlzDqoDSP2A1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fedf8wm%2Fbtq1z34f8BE%2FY1lFRURNkEWlzDqoDSP2A1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;InitInstance 함수의 항목 중 RUNTIME_CLASS를 추가한 클래스로 변경합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617322541508&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 애플리케이션의 문서 템플릿을 등록합니다.  문서 템플릿은
	//  문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다.
	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CHelloWorldDoc),
		RUNTIME_CLASS(CMainFrame),       // 주 SDI 프레임 창입니다.
		RUNTIME_CLASS(ListViewSample)); // 해당 CHelloWorldView =&amp;gt; ListViewSample&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ListViewSample에 빨간 줄이 들어 온다면 다음 항목에 추가한 해더 파일을 추가해 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617322637117&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// HelloWorld.cpp: 애플리케이션에 대한 클래스 동작을 정의합니다.
//

#include &quot;pch.h&quot;
#include &quot;framework.h&quot;
#include &quot;afxwinappex.h&quot;
#include &quot;afxdialogex.h&quot;
#include &quot;HelloWorld.h&quot;
#include &quot;MainFrm.h&quot;

#include &quot;HelloWorldDoc.h&quot;
#include &quot;HelloWorldView.h&quot;
#include &quot;ListViewSample.h&quot; // 해당 부분 추가&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;해당 파일을 수정하는 이유를 알기 위해서는 MFC의 구조를 조금 이해 하셔야 편리한거 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYMwt0/btq1D0S0Eqi/HV9JfSb3DDpw9xK3EQ9gRK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYMwt0/btq1D0S0Eqi/HV9JfSb3DDpw9xK3EQ9gRK/img.gif&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 30.7253%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYMwt0/btq1D0S0Eqi/HV9JfSb3DDpw9xK3EQ9gRK/img.gif&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYMwt0%2Fbtq1D0S0Eqi%2FHV9JfSb3DDpw9xK3EQ9gRK%2Fimg.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QQdBB/btq1BxRlArT/J891uPqXcK8TFoRkowjRu0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QQdBB/btq1BxRlArT/J891uPqXcK8TFoRkowjRu0/img.gif&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 68.1119%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QQdBB/btq1BxRlArT/J891uPqXcK8TFoRkowjRu0/img.gif&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQQdBB%2Fbtq1BxRlArT%2FJ891uPqXcK8TFoRkowjRu0%2Fimg.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;SDI(좌) MDI(우) 애플리케이션의 구조(출저 : MSDN)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CWinApp -&amp;gt; CDocument -&amp;gt; &lt;span style=&quot;color: #333333;&quot;&gt;CFrameWnd&lt;span&gt; -&amp;gt; &lt;/span&gt;&lt;/span&gt;CView, CToolBar, CStatusBar 형식으로 포함 하도록 되어 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로그램이 실행되면 전체적인 것을 포함하는 것은 CWinApp 이라고 생각하시면됩니다.&lt;/p&gt;
&lt;p&gt;한 응용프로그램을 관장하며, 초기화, 실행, 종료를 캡슐화 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CWinApp 아래에 도큐먼트가 포함되고 토큐먼트에 툴바, 뷰, 스테이터스 등이 포함된다고 이해 하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nNzY3/btq1G8C5q85/K1Baz0YDdRiltqh2U3RMjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nNzY3/btq1G8C5q85/K1Baz0YDdRiltqh2U3RMjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nNzY3/btq1G8C5q85/K1Baz0YDdRiltqh2U3RMjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnNzY3%2Fbtq1G8C5q85%2FK1Baz0YDdRiltqh2U3RMjk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;툴바나 스테이스터스바, 메뉴 등의 위치는 다들 알고 있으실 테니 표시는 생략했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617342838764&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 애플리케이션의 문서 템플릿을 등록합니다.  문서 템플릿은
	//  문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다.
	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CHelloWorldDoc),
		RUNTIME_CLASS(CMainFrame),       // 주 SDI 프레임 창입니다.
		RUNTIME_CLASS(ListViewSample)); // 해당 CHelloWorldView =&amp;gt; ListViewSample&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;처음 수정한 코드입니다. 해당 코드를 수정한 다음 리소스 뷰를 통해 추가한 뷰를 열어 봅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A7MpX/btq1E9bBsCp/j4SsyEXLWBHm9Q5hpgINdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A7MpX/btq1E9bBsCp/j4SsyEXLWBHm9Q5hpgINdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A7MpX/btq1E9bBsCp/j4SsyEXLWBHm9Q5hpgINdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA7MpX%2Fbtq1E9bBsCp%2Fj4SsyEXLWBHm9Q5hpgINdK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같은 폼이 생성되었을 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 폼에 리스트 뷰를 추가 하고 컨트롤 변수를 추가 해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A2QHr/btq1EoAadwG/rpk2ZUPW3BlNaIEi3ev0Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A2QHr/btq1EoAadwG/rpk2ZUPW3BlNaIEi3ev0Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A2QHr/btq1EoAadwG/rpk2ZUPW3BlNaIEi3ev0Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA2QHr%2Fbtq1EoAadwG%2Frpk2ZUPW3BlNaIEi3ev0Jk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;m_ctrlListView라는 컨트롤 변수를 추가 했습니다.&lt;/p&gt;
&lt;p&gt;그리드 형식으로 표시하길 원하기 때문에 리스트 컨트롤의 속성에서 리포트 방식으로 변경합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IxBft/btq1IGTFJ7o/KdQWCaq6A2Tq11CnnaYY6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IxBft/btq1IGTFJ7o/KdQWCaq6A2Tq11CnnaYY6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IxBft/btq1IGTFJ7o/KdQWCaq6A2Tq11CnnaYY6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIxBft%2Fbtq1IGTFJ7o%2FKdQWCaq6A2Tq11CnnaYY6K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;솔루션 탐색기를 통해 ListViewSample.cpp 로 돌아 온 후 데이터를 입력하기 위한 코딩을 삽입합니다.&lt;/p&gt;
&lt;p&gt;코드를 봤더니 추가할 적당한 함수를 찾지 못해 추가해 주기로 하겠습니다.&lt;/p&gt;
&lt;p&gt;CTRL + SHIFT + X 단축키를 눌러 클래스 위자드를 실행 한 후 가상함수 탭에서 OnInitialUpdate 함수를 찾아 추가해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVXXgI/btq1G9vftrk/vBZSkJCzSOczXC7lwt7jI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVXXgI/btq1G9vftrk/vBZSkJCzSOczXC7lwt7jI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVXXgI/btq1G9vftrk/vBZSkJCzSOczXC7lwt7jI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVXXgI%2Fbtq1G9vftrk%2FvBZSkJCzSOczXC7lwt7jI0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;추가 하신 후 코드편집을 누르시면 해당 위치로 이동하니 이용하시면 편리합니다.&lt;/p&gt;
&lt;p&gt;CListCtrl의 함수는 컬럼 해더 부분과 데이터 부분으로 나뉘어 집니다.&lt;/p&gt;
&lt;p&gt;그래서 컬럼 해더를 따로 추가 해 주셔야 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617347782174&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void ListViewSample::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
	
	// 컬럼 추가
	m_ctrlListView.InsertColumn(0, L&quot;컬럼1&quot;, LVCFMT_LEFT, 100, -1);
	m_ctrlListView.InsertColumn(1, L&quot;컬럼2&quot;, LVCFMT_LEFT, 100, -1);
	m_ctrlListView.InsertColumn(2, L&quot;컬럼3&quot;, LVCFMT_LEFT, 100, -1);


	// 컬럼 삭제
	m_ctrlListView.DeleteColumn(2);

	// 데이터 추가
	m_ctrlListView.InsertItem(0, L&quot;데이터 1&quot;);
	m_ctrlListView.SetItem(0, 1, LVIF_TEXT, L&quot;데이터 2&quot;, 0, 0, 0, NULL);

	m_ctrlListView.InsertItem(1, L&quot;데이터 1&quot;);
	m_ctrlListView.SetItem(1, 1, LVIF_TEXT, L&quot;데이터 2&quot;, 0, 0, 0, NULL);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 와 같이 코딩 후 실행 결과입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baWsme/btq1IqRfAS6/qcAA5JV5lHVCTlztbJ8pi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baWsme/btq1IqRfAS6/qcAA5JV5lHVCTlztbJ8pi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baWsme/btq1IqRfAS6/qcAA5JV5lHVCTlztbJ8pi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaWsme%2Fbtq1IqRfAS6%2FqcAA5JV5lHVCTlztbJ8pi1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;추가 방법은 많은 방법은 많은 방법을 제공하고 있으니 &lt;/span&gt;MSDN을 참고하시면 편리합니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistctrl-class?view=msvc-160&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docs.microsoft.com/ko-kr/cpp/mfc/reference/clistctrl-class?view=msvc-160&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617343488093&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CListCtrl 클래스&quot; data-og-description=&quot;자세히 알아보기: CListCtrl 클래스&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistctrl-class?view=msvc-160&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistctrl-class&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rqsGT/hyJJOIAov3/oAJvvMAKxAcfquz14cTyf1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bYTqhH/hyJK4JMiby/tXiKR9MGrKKTOWqRFqdzGK/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420,https://scrap.kakaocdn.net/dn/421rr/hyJLdmp0xv/bqmkOyAk8INdgGehSur4ck/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistctrl-class?view=msvc-160&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistctrl-class?view=msvc-160&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rqsGT/hyJJOIAov3/oAJvvMAKxAcfquz14cTyf1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bYTqhH/hyJK4JMiby/tXiKR9MGrKKTOWqRFqdzGK/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420,https://scrap.kakaocdn.net/dn/421rr/hyJLdmp0xv/bqmkOyAk8INdgGehSur4ck/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;CListCtrl 클래스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;자세히 알아보기: CListCtrl 클래스&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발기록/윈도우즈개발</category>
      <category>CListCtrl</category>
      <category>list control</category>
      <category>애드소프트</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/50</guid>
      <comments>https://addsoft.tistory.com/50#entry50comment</comments>
      <pubDate>Fri, 2 Apr 2021 16:20:35 +0900</pubDate>
    </item>
    <item>
      <title>무료 인증서 소개 ( sslforfree )</title>
      <link>https://addsoft.tistory.com/49</link>
      <description>&lt;p&gt;안녕하세요. 애드소프트 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;무료 인증서가 존재하는걸 알게 되고 난 후 검색해 보았더니 많은 사이트가 존재하더군요&lt;/p&gt;
&lt;p&gt;그 중에서 눈에 들어온 곳이 ZeroSSL 이었는데 다른곳을 하나더 소개할까 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.sslforfree.com/&quot;&gt;SSL For Free - Free SSL Certificates in Minutes&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617278450639&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SSL For Free - Free SSL Certificates in Minutes&quot; data-og-description=&quot;Wildcard SSL Certificates Wildcard certificates allow you to secure any sub-domains under a domain. If you want to secure any sub-domains of example.org that you have now or in the future you can make a wildcard certificate. To generate wildcard certificat&quot; data-og-host=&quot;www.sslforfree.com&quot; data-og-source-url=&quot;https://www.sslforfree.com/&quot; data-og-url=&quot;https://www.sslforfree.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.sslforfree.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.sslforfree.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;SSL For Free - Free SSL Certificates in Minutes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Wildcard SSL Certificates Wildcard certificates allow you to secure any sub-domains under a domain. If you want to secure any sub-domains of example.org that you have now or in the future you can make a wildcard certificate. To generate wildcard certificat&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.sslforfree.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;이 인증서도 ZeroSSL과 마찮가지로 90일 마다 갱신해야 하는 상품인듯 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zE6UF/btq1GeJb8v5/rjJZbTeDx4iVoauC4Elqjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zE6UF/btq1GeJb8v5/rjJZbTeDx4iVoauC4Elqjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zE6UF/btq1GeJb8v5/rjJZbTeDx4iVoauC4Elqjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzE6UF%2Fbtq1GeJb8v5%2FrjJZbTeDx4iVoauC4Elqjk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 인증서도 발급하기 위해서는 회원 가입이 필수 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 인증서 발급 사이트에서는 Youtube로 발급 받는 방법도 제공하고 있으니 한층 발급 받기위해 수고를 덜 수 있을것 같습니다.&lt;/p&gt;
&lt;p&gt;기본적인 인증서나 WAS에대한 기본지식은 필요하겠지만요.&lt;/p&gt;
&lt;p&gt;그래서 조금만 노력한다면 누구나 발급 받는 수 있을 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;와일드카드 인증서를 제공해 여러 도메인을 추가 할 수 있는것으로 보입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfNNBE/btq1GeJcupe/DrKj1I9q6fUK1nv3D1LGIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfNNBE/btq1GeJcupe/DrKj1I9q6fUK1nv3D1LGIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfNNBE/btq1GeJcupe/DrKj1I9q6fUK1nv3D1LGIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfNNBE%2Fbtq1GeJcupe%2FDrKj1I9q6fUK1nv3D1LGIK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용방법도 메인에 기록되어 있으니 확인하고 자신에게 맞는 방법을 찾아 볼 수 있을듯 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PtKel/btq1FBSbLFH/vICkl3ZJ21LlOQJlK8oaS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PtKel/btq1FBSbLFH/vICkl3ZJ21LlOQJlK8oaS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PtKel/btq1FBSbLFH/vICkl3ZJ21LlOQJlK8oaS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPtKel%2Fbtq1FBSbLFH%2FvICkl3ZJ21LlOQJlK8oaS1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;관련 툴도 많이 제공하고 있으니 관리에도 도움되지 않을까 싶네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JxWWd/btq1AGm8jZ5/F5vfkxtHhE2yDlHqPwk8OK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JxWWd/btq1AGm8jZ5/F5vfkxtHhE2yDlHqPwk8OK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JxWWd/btq1AGm8jZ5/F5vfkxtHhE2yDlHqPwk8OK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJxWWd%2Fbtq1AGm8jZ5%2FF5vfkxtHhE2yDlHqPwk8OK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유로인증서 사용이 편리하긴 하지만 비용이 부담스럽진 않겠지만 아깝다고 생각하신다면 도전해 보셔도 좋을것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이상으로 포스팅을 마치도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;</description>
      <category>개발기록/기타개발기록</category>
      <category>Free For SSL</category>
      <category>FreeForSSL</category>
      <category>애드소프트</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/49</guid>
      <comments>https://addsoft.tistory.com/49#entry49comment</comments>
      <pubDate>Thu, 1 Apr 2021 21:08:45 +0900</pubDate>
    </item>
    <item>
      <title>무료 SSL ( ZeroSSL )이 있었네요.</title>
      <link>https://addsoft.tistory.com/48</link>
      <description>&lt;p&gt;안녕하세요. 애드소프트 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SSL 인증서를 유료로 구매하여 사용하였습니다.&lt;/p&gt;
&lt;p&gt;혹시 무료 인증서가 있을까 싶어 검색해 보았더니 ZeroSSL인 무료 인증서가 존재 한다는걸 알았습니다.&lt;/p&gt;
&lt;p&gt;인증서의 갱신 기간이 3개월 정도로 짧아 자주 갱신해야 하지만 자동갱신기능이 존재하는듯 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 포스팅에서는 ZeroSSL의 사용법을 검색하고 다음 포스팅에 사용법을 공유 해 보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://zerossl.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ZeroSSL 홈페이지&lt;/a&gt;를 열어보니 SSL을 사용하기 위한 3단계 방법이 메인에 표시됩니다.&lt;/p&gt;
&lt;p&gt;왠지 사용이 편리 할 것 같아&amp;nbsp; 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v9k9Q/btq1DZ0uDl6/BGjNIGSio2Xy2Z3KBe0SW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v9k9Q/btq1DZ0uDl6/BGjNIGSio2Xy2Z3KBe0SW1/img.png&quot; data-alt=&quot;출저: ZeroSSL&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v9k9Q/btq1DZ0uDl6/BGjNIGSio2Xy2Z3KBe0SW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv9k9Q%2Fbtq1DZ0uDl6%2FBGjNIGSio2Xy2Z3KBe0SW1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출저: ZeroSSL&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;인증서 발급을 위해서는 회원 가입이 필요하며, 등록 방법은 절차를 제공하는데로 따라 하시면 어렵지 않을것으로 생각됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;무료 인증서 발급을 원하신다면 ZeroSSL 사용하셔도 괜찮을것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;발급 방법을 다음을 참고 하시면 될것 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://help.zerossl.com/hc/en-us/articles/360060119373-Creating-an-SSL-Certificate&quot;&gt;Creating an SSL Certificate &amp;ndash; ZeroSSL&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617278242591&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Creating an SSL Certificate&quot; data-og-description=&quot;Please follow the steps below to create a new SSL certificate on ZeroSSL. Before you start, please note that you can choose from single-domain, multi-domain and wildcard certificates with a both 90...&quot; data-og-host=&quot;help.zerossl.com&quot; data-og-source-url=&quot;https://help.zerossl.com/hc/en-us/articles/360060119373-Creating-an-SSL-Certificate&quot; data-og-url=&quot;https://help.zerossl.com/hc/en-us/articles/360060119373-Creating-an-SSL-Certificate&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wMoRq/hyJK6tGIYy/s4ZEQQS2UEt2KpTkGbrxpk/img.png?width=280&amp;amp;height=280&amp;amp;face=0_0_280_280,https://scrap.kakaocdn.net/dn/bdnMVG/hyJLeL1V9m/rGEC6UQS8PZdTqcQSDKVg1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/yiHz1/hyJLdfhcOB/ukec8Q5x7iJwXrKEvJIbHK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://help.zerossl.com/hc/en-us/articles/360060119373-Creating-an-SSL-Certificate&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://help.zerossl.com/hc/en-us/articles/360060119373-Creating-an-SSL-Certificate&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wMoRq/hyJK6tGIYy/s4ZEQQS2UEt2KpTkGbrxpk/img.png?width=280&amp;amp;height=280&amp;amp;face=0_0_280_280,https://scrap.kakaocdn.net/dn/bdnMVG/hyJLeL1V9m/rGEC6UQS8PZdTqcQSDKVg1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/yiHz1/hyJLdfhcOB/ukec8Q5x7iJwXrKEvJIbHK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Creating an SSL Certificate&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Please follow the steps below to create a new SSL certificate on ZeroSSL. Before you start, please note that you can choose from single-domain, multi-domain and wildcard certificates with a both 90...&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;help.zerossl.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발기록/기타개발기록</category>
      <category>ZeroSSL</category>
      <category>애드소프트</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/48</guid>
      <comments>https://addsoft.tistory.com/48#entry48comment</comments>
      <pubDate>Thu, 1 Apr 2021 20:58:11 +0900</pubDate>
    </item>
    <item>
      <title>오랜만에 다시 해보는 MFC 개발... ListBox 사용하기</title>
      <link>https://addsoft.tistory.com/47</link>
      <description>&lt;p&gt;안녕하세요. 애드소프트 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 MFC를 이용해 리스트를 생성 후 목록을 표시할 수 있는 간단한 프로그램을 작성해 볼까 합니다.&lt;/p&gt;
&lt;p&gt;List Box 컨트롤을 추가 하여 전체 화면으로 늘렸습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfC4uZ/btq1C1qCeq3/pxnUojO9RzJG1G15s1nT9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfC4uZ/btq1C1qCeq3/pxnUojO9RzJG1G15s1nT9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfC4uZ/btq1C1qCeq3/pxnUojO9RzJG1G15s1nT9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfC4uZ%2Fbtq1C1qCeq3%2FpxnUojO9RzJG1G15s1nT9k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;List Box만을 추가하고 실행해 보았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biunkk/btq1E8JjWiJ/MVZ80nr7rRZdYXipu5dMY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biunkk/btq1E8JjWiJ/MVZ80nr7rRZdYXipu5dMY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biunkk/btq1E8JjWiJ/MVZ80nr7rRZdYXipu5dMY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbiunkk%2Fbtq1E8JjWiJ%2FMVZ80nr7rRZdYXipu5dMY0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;제목이 없네요. 제목 추가는 다음과 같이 하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617272555847&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// CHelloWorldApp 초기화

BOOL CHelloWorldApp::InitInstance()
{
	// 애플리케이션 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
	// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControlsEx()가 필요합니다. 
	// InitCommonControlsEx()를 사용하지 않으면 창을 만들 수 없습니다.
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 응용 프로그램에서 사용할 모든 공용 컨트롤 클래스를 포함하도록
	// 이 항목을 설정하십시오.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&amp;amp;InitCtrls);

	CWinAppEx::InitInstance();


	// OLE 라이브러리를 초기화합니다.
	if (!AfxOleInit())
	{
		AfxMessageBox(IDP_OLE_INIT_FAILED);
		return FALSE;
	}

	AfxEnableControlContainer();

	EnableTaskbarInteraction(FALSE);

	// RichEdit 컨트롤을 사용하려면 AfxInitRichEdit2()가 있어야 합니다.
	// AfxInitRichEdit2();

	// 표준 초기화
	// 이들 기능을 사용하지 않고 최종 실행 파일의 크기를 줄이려면
	// 아래에서 필요 없는 특정 초기화
	// 루틴을 제거해야 합니다.
	// 해당 설정이 저장된 레지스트리 키를 변경하십시오.
	// TODO: 이 문자열을 회사 또는 조직의 이름과 같은
	// 적절한 내용으로 수정해야 합니다.
	SetRegistryKey(_T(&quot;로컬 애플리케이션 마법사에서 생성된 애플리케이션&quot;));
	LoadStdProfileSettings(4);  // MRU를 포함하여 표준 INI 파일 옵션을 로드합니다.


	InitContextMenuManager();

	InitKeyboardManager();

	InitTooltipManager();
	CMFCToolTipInfo ttParams;
	ttParams.m_bVislManagerTheme = TRUE;
	theApp.GetTooltipManager()-&amp;gt;SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
		RUNTIME_CLASS(CMFCToolTipCtrl), &amp;amp;ttParams);

	// 애플리케이션의 문서 템플릿을 등록합니다.  문서 템플릿은
	//  문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다.
	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CHelloWorldDoc),
		RUNTIME_CLASS(CMainFrame),       // 주 SDI 프레임 창입니다.
		RUNTIME_CLASS(CHelloWorldView));
	if (!pDocTemplate)
		return FALSE;
	AddDocTemplate(pDocTemplate);


	// 표준 셸 명령, DDE, 파일 열기에 대한 명령줄을 구문 분석합니다.
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);



	// 명령줄에 지정된 명령을 디스패치합니다.
	// 응용 프로그램이 /RegServer, /Register, /Unregserver 또는 /Unregister로 시작된 경우 FALSE를 반환합니다.
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;

	// 창 하나만 초기화되었으므로 이를 표시하고 업데이트합니다.
	m_pMainWnd-&amp;gt;ShowWindow(SW_SHOW);
	m_pMainWnd-&amp;gt;UpdateWindow();

	// 타이틀 수정
	m_pMainWnd-&amp;gt;SetWindowTextW(L&quot;Hello World&quot;);

	return TRUE;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;InitInstance 함수에서&amp;nbsp; m_pMainWnd-&amp;gt;SetWindowTextW() 함수를 통해 수정가능합니다.&lt;/p&gt;
&lt;p&gt;유니코드 베이스라 L 메크로를 사용하여 유니코드로 변경하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컬럼을 추가하기 위해서 속성 창에서 다음 항목을 변경하였습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tv75x/btq1D0ZkpFh/CSi1OVmkBby8csD7hjXc81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tv75x/btq1D0ZkpFh/CSi1OVmkBby8csD7hjXc81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tv75x/btq1D0ZkpFh/CSi1OVmkBby8csD7hjXc81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftv75x%2Fbtq1D0ZkpFh%2FCSi1OVmkBby8csD7hjXc81%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 에서 추가한 리스트 박스에 데이터를 추가하기 위해 컨트롤을 추가해 보겠습니다.&lt;/p&gt;
&lt;p&gt;리소스 뷰에서 리스트 박스를 선택 후 마우스 오른쪽 버튼을 누른 후 변수 추가를 선택합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xJOL1/btq1E8P6EaW/PkG6TNlJEs6etCO6VWaaS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xJOL1/btq1E8P6EaW/PkG6TNlJEs6etCO6VWaaS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xJOL1/btq1E8P6EaW/PkG6TNlJEs6etCO6VWaaS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxJOL1%2Fbtq1E8P6EaW%2FPkG6TNlJEs6etCO6VWaaS0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byGUk2/btq1D0dWLIY/iJDbHN63HWHdNlqvxKkdu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byGUk2/btq1D0dWLIY/iJDbHN63HWHdNlqvxKkdu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byGUk2/btq1D0dWLIY/iJDbHN63HWHdNlqvxKkdu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyGUk2%2Fbtq1D0dWLIY%2FiJDbHN63HWHdNlqvxKkdu1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;변수 추가시 다음 컨트롤변수가 추가 된 것을 확인 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;해더파일&lt;/p&gt;
&lt;pre id=&quot;code_1617273370030&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class CHelloWorldView : public CFormView
{
protected: // serialization에서만 만들어집니다.
	CHelloWorldView() noexcept;
	DECLARE_DYNCREATE(CHelloWorldView)

public:
#ifdef AFX_DESIGN_TIME
	enum{ IDD = IDD_HELLOWORLD_FORM };
#endif

...

// 생성된 메시지 맵 함수
protected:
	afx_msg void OnFilePrintPreview();
	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
	DECLARE_MESSAGE_MAP()
public:
	CListBox mCtrlListBoxSample;
};

#ifndef _DEBUG  // HelloWorldView.cpp의 디버그 버전
inline CHelloWorldDoc* CHelloWorldView::GetDocument() const
   { return reinterpret_cast&amp;lt;CHelloWorldDoc*&amp;gt;(m_pDocument); }
#endif&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cpp 파일&lt;/p&gt;
&lt;pre id=&quot;code_1617273290774&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void CHelloWorldView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST_SAMPLE, mCtrlListBoxSample);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;클레스 마법사를 실행합니다.&lt;/p&gt;
&lt;p&gt;단축키는 CTRL + SHIFT + X 입니다&lt;/p&gt;
&lt;p&gt;클레스 이름을 CHellowWorldView를 선택하고 메시지 탭을 선택합니다.&lt;/p&gt;
&lt;p&gt;가상 함수 탭에서 OnInitializeUpdate 함수를 선택하시고 코드 편집을 누릅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCxoNV/btq1D0kNiv4/AKE8M58qaa7kSV87be6TdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCxoNV/btq1D0kNiv4/AKE8M58qaa7kSV87be6TdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCxoNV/btq1D0kNiv4/AKE8M58qaa7kSV87be6TdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCxoNV%2Fbtq1D0kNiv4%2FAKE8M58qaa7kSV87be6TdK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 함수에 다음 코드를 추가 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617274918922&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void CHelloWorldView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()-&amp;gt;RecalcLayout();
	ResizeParentToFit();


	mCtrlListBoxSample.SetColumnWidth(500);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다시 알게된 사실이지만 MFC의 CListBox는 컬럼 추가가 쉽지 않습니다.&lt;/p&gt;
&lt;p&gt;어떻게든 추가해서 설명드리고 싶었지만 MSDN에서 공부를 하다보니 CListView 라는 클래스를 제공합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;리스트 박스에 내용을 추가하기 위해서는 다음과 같이 AddString 함수를 이용하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617275427062&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void CHelloWorldView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()-&amp;gt;RecalcLayout();
	ResizeParentToFit();


	mCtrlListBoxSample.SetColumnWidth(100);

	mCtrlListBoxSample.AddString(L&quot;테스트 리스트 1&quot;);
	mCtrlListBoxSample.AddString(L&quot;테스트 리스트 2&quot;);
	mCtrlListBoxSample.AddString(L&quot;테스트 리스트 3&quot;);
	mCtrlListBoxSample.AddString(L&quot;테스트 리스트 4&quot;);
	mCtrlListBoxSample.AddString(L&quot;테스트 리스트 5&quot;);
	mCtrlListBoxSample.AddString(L&quot;테스트 리스트 6&quot;);
	mCtrlListBoxSample.AddString(L&quot;테스트 리스트 7&quot;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다른 함수들은 다음 MSDN을 활용해 추가해 보세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistbox-class?view=msvc-160&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docs.microsoft.com/ko-kr/cpp/mfc/reference/clistbox-class?view=msvc-160&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617275544898&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CListBox 클래스&quot; data-og-description=&quot;MFC CListBox 클래스 및 해당 멤버 함수에 대 한 설명입니다.&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistbox-class?view=msvc-160&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistbox-class&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hPiJC/hyJJJtkZzg/YvUcqd6Mh0o5dtCZPk9dQ0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/eAC8i/hyJK7szJ22/BvpuUb6SXk5TjxbNyWakF1/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420,https://scrap.kakaocdn.net/dn/bbHLhf/hyJLc8tWz7/gHmQ6744fX2ulazbVl6crK/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistbox-class?view=msvc-160&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/cpp/mfc/reference/clistbox-class?view=msvc-160&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hPiJC/hyJJJtkZzg/YvUcqd6Mh0o5dtCZPk9dQ0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/eAC8i/hyJK7szJ22/BvpuUb6SXk5TjxbNyWakF1/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420,https://scrap.kakaocdn.net/dn/bbHLhf/hyJLc8tWz7/gHmQ6744fX2ulazbVl6crK/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;CListBox 클래스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;MFC CListBox 클래스 및 해당 멤버 함수에 대 한 설명입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 포스팅에서 CListView를 다뤄 볼까 합니다.&lt;/p&gt;
&lt;p&gt;컬럼 추가 및 사용법을 알아보도록 할께요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;읽어 주셔서 감사합니다.&lt;/p&gt;</description>
      <category>개발기록/윈도우즈개발</category>
      <category>Addsoft</category>
      <category>CListBox</category>
      <category>listbox</category>
      <category>MFC</category>
      <category>애드소프트</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/47</guid>
      <comments>https://addsoft.tistory.com/47#entry47comment</comments>
      <pubDate>Thu, 1 Apr 2021 20:07:22 +0900</pubDate>
    </item>
    <item>
      <title>Windows 데이크톱 마법사 무엇일까? (2) 화면구성 방법</title>
      <link>https://addsoft.tistory.com/46</link>
      <description>&lt;p&gt;안녕하세요. 애드소프트입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이전 포스팅에서는 Windows 데이크톱 마법사를 통하여 프로젝트를 생성해 보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 포스팅에서는 생성된 프로젝트에 화면 구성하는 방법을 찾아 포스팅 해볼까 합니다.&lt;/p&gt;
&lt;p&gt;오랜만에 해보다 보니 어디서 추가해야 되나 한참 고민하다가 다이얼로그에 폼뷰를 추가 했던 기억이 되살아나&lt;/p&gt;
&lt;p&gt;다이얼로그에 추가를 눌러보니 희망이 보이기 시작했습니다 ㅎㅎ &lt;span style=&quot;color: #ee2323;&quot;&gt;(따라하시면 첨음부터 다시 생성해야 합니다. 밑에 내용부터 확인하셔도 좋습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bslSHf/btq1C2CQQOZ/kdvlZ9xKCPKlHkvv46Xld0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bslSHf/btq1C2CQQOZ/kdvlZ9xKCPKlHkvv46Xld0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bslSHf/btq1C2CQQOZ/kdvlZ9xKCPKlHkvv46Xld0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbslSHf%2Fbtq1C2CQQOZ%2FkdvlZ9xKCPKlHkvv46Xld0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;일단 폼뷰부터 넣어보겠습니다.&lt;/p&gt;
&lt;p&gt;연결하는건 다음에 생각하기로~&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x6nMU/btq1D1Ksnqd/MbCpLKQKxu7kmUdw5wnxwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x6nMU/btq1D1Ksnqd/MbCpLKQKxu7kmUdw5wnxwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x6nMU/btq1D1Ksnqd/MbCpLKQKxu7kmUdw5wnxwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx6nMU%2Fbtq1D1Ksnqd%2FMbCpLKQKxu7kmUdw5wnxwK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;IDD_FORMVIEW_MAIN이라는 이름으로 폼뷰를 하나 추가했습니다.&lt;/p&gt;
&lt;p&gt;메인 화면과 연결하는 방법을 찾아볼께요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;생각해보니 예전엔 Dialog 베이스와 SDI또는 MDI 베이스로 구분해서 생성했던거 같은데 바뀐건지 옵션을 건너 뛴것인지 모르겠네요.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로그래밍으로 화면 구성하기는 시간이 오래 걸릴거 같아 리소스와 연결하는 방법을 찾아보는게 좋겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;화면창을 구성하는 소스는 다음인거 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617266574892&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//
//   함수: InitInstance(HINSTANCE, int)
//
//   용도: 인스턴스 핸들을 저장하고 주 창을 만듭니다.
//
//   주석:
//
//        이 함수를 통해 인스턴스 핸들을 전역 변수에 저장하고
//        주 프로그램 창을 만든 다음 표시합니다.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   hInst = hInstance; // 인스턴스 핸들을 전역 변수에 저장합니다.

   HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;코드를 보니 예전에 WinAPI로 화면을 생성하는것으로 확인됩니다.&lt;/p&gt;
&lt;p&gt;이전 포스팅에 MFC로 만들어졌다고 했는데 사기꾼이 되었군요 ㅎㅎ&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;흐흐 이걸 미리 봤어야하는데... 멘탈이 오락가락 했습니다.&lt;/p&gt;
&lt;p&gt;프로젝트를 다시 만들기로 결정했습니다.&lt;/p&gt;
&lt;p&gt;찾아보니 MFC 관련 SDK가 설치가 안된것을 다시 확인했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJKbqB/btq1EpxCO4J/2mrZpaVdaWKtbJUIrk7MQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJKbqB/btq1EpxCO4J/2mrZpaVdaWKtbJUIrk7MQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJKbqB/btq1EpxCO4J/2mrZpaVdaWKtbJUIrk7MQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJKbqB%2Fbtq1EpxCO4J%2F2mrZpaVdaWKtbJUIrk7MQK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;설치 후 프로젝트를 다시 생성해 보겠습니다.&lt;/p&gt;
&lt;p&gt;한참을 찾으면서 어리둥절했네요. ㅎㅎ&lt;/p&gt;
&lt;p&gt;너무 오랜시간 윈도우 프로그래밍을 접할 일이 없어서 거의 초기화 상태 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD3tFT/btq1BxJXI09/V3O7tjR3jYDgCjS3KgivuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD3tFT/btq1BxJXI09/V3O7tjR3jYDgCjS3KgivuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD3tFT/btq1BxJXI09/V3O7tjR3jYDgCjS3KgivuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD3tFT%2Fbtq1BxJXI09%2FV3O7tjR3jYDgCjS3KgivuK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;하아~ MFC가 바뀐게 아니네요 ㅋㅋ&lt;/p&gt;
&lt;p&gt;설치하고 나니 추가 되어 있습니다 OTL&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이전 포스팅 내용도 수정해야 겠네요&lt;/p&gt;
&lt;p&gt;일단 프로젝트부터 다시 생성하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cadiCX/btq1yZtXSzn/MKc3W2WVQeHKLGImeLKOtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cadiCX/btq1yZtXSzn/MKc3W2WVQeHKLGImeLKOtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cadiCX/btq1yZtXSzn/MKc3W2WVQeHKLGImeLKOtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcadiCX%2Fbtq1yZtXSzn%2FMKc3W2WVQeHKLGImeLKOtK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwFefQ/btq1BxpLRku/QZN00oDijBP1m5o3e8ZL1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwFefQ/btq1BxpLRku/QZN00oDijBP1m5o3e8ZL1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwFefQ/btq1BxpLRku/QZN00oDijBP1m5o3e8ZL1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwFefQ%2Fbtq1BxpLRku%2FQZN00oDijBP1m5o3e8ZL1K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rn3sp/btq1yYWcIbo/HVzuquKYXrxiTKZnBYSzWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rn3sp/btq1yYWcIbo/HVzuquKYXrxiTKZnBYSzWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rn3sp/btq1yYWcIbo/HVzuquKYXrxiTKZnBYSzWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frn3sp%2Fbtq1yYWcIbo%2FHVzuquKYXrxiTKZnBYSzWk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 설정으로 프로젝트를 생성하였습니다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;생성된 클래스 단계에서 Formview 선택이 중요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGVw35/btq1z4PbWMX/jNV242HQlCiwr4tFrBs5UK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGVw35/btq1z4PbWMX/jNV242HQlCiwr4tFrBs5UK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGVw35/btq1z4PbWMX/jNV242HQlCiwr4tFrBs5UK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGVw35%2Fbtq1z4PbWMX%2FjNV242HQlCiwr4tFrBs5UK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이제 좀 익숙해진 분위기네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boiZE7/btq1E8o2ZX0/UR2DoPgXDaM1uvvG42lerk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boiZE7/btq1E8o2ZX0/UR2DoPgXDaM1uvvG42lerk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boiZE7/btq1E8o2ZX0/UR2DoPgXDaM1uvvG42lerk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboiZE7%2Fbtq1E8o2ZX0%2FUR2DoPgXDaM1uvvG42lerk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;리소스를 보니 폼뷰가 존재하네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3Ntvo/btq1z33KeQi/GJ77knjSjqnl2gq6itD2jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3Ntvo/btq1z33KeQi/GJ77knjSjqnl2gq6itD2jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3Ntvo/btq1z33KeQi/GJ77knjSjqnl2gq6itD2jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3Ntvo%2Fbtq1z33KeQi%2FGJ77knjSjqnl2gq6itD2jK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행해보니 코딩할 필요도없었네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;좌절감과 함께 시간을 너무 많이 보냈습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 포스팅에 개발 관련 내용을 담아 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발기록/윈도우즈개발</category>
      <category>Formview</category>
      <category>애드소프트</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/46</guid>
      <comments>https://addsoft.tistory.com/46#entry46comment</comments>
      <pubDate>Thu, 1 Apr 2021 19:05:04 +0900</pubDate>
    </item>
    <item>
      <title>Windows 데이크톱 마법사 무엇일까? (1)</title>
      <link>https://addsoft.tistory.com/45</link>
      <description>&lt;p&gt;안녕하세요. 애드소프트 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오랜기간 윈도우 프로그램을 개발해보지 못해서 바뀐게 있는지 확인하고 공부해 보고자&lt;/p&gt;
&lt;p&gt;데이크톱용 개발을 해 볼까해서 프로젝트를 만들고 있는데 &lt;span style=&quot;color: #333333;&quot;&gt;MFC항목이 보이지 않습니다. ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;SDK를 설치 해야하는건지 설치할때 빼먹었나봐요.&lt;/p&gt;
&lt;p&gt;그래서 찾다보니 Windows 데이크톱 마법사라고 있어 궁금함을 참지 못하고 사용해보면서 기록을 남겨볼까 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7jyPx/btq1D1Q8gYW/w3Vhyrh7QZQRebgdUvVdfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7jyPx/btq1D1Q8gYW/w3Vhyrh7QZQRebgdUvVdfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7jyPx/btq1D1Q8gYW/w3Vhyrh7QZQRebgdUvVdfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7jyPx%2Fbtq1D1Q8gYW%2Fw3Vhyrh7QZQRebgdUvVdfk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;프로젝트를 생성하기 위해 다은 Windows 데이크톱 마법사를 선택하니 다음과 같은 화면이 보입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qGfXR/btq1C2JvEyz/gA0Lo3F2LCbptUIPFU1XSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qGfXR/btq1C2JvEyz/gA0Lo3F2LCbptUIPFU1XSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qGfXR/btq1C2JvEyz/gA0Lo3F2LCbptUIPFU1XSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqGfXR%2Fbtq1C2JvEyz%2FgA0Lo3F2LCbptUIPFU1XSK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;데스크톱 어플리케이션을 만들어 볼까 했으니 선택하고 확인을 눌러볼께요.&lt;/p&gt;
&lt;p&gt;MFC해더가 여기에서 추가 가능하도록 바뀌었나봅니다.&lt;/p&gt;
&lt;p&gt;데스크톱 어플리케이션을 선택하니 MFC가 비활성화 되는것을 보니 SDK를 따로 설치해야할 듯 합니다.&lt;/p&gt;
&lt;p&gt;아니면 MFC 프로젝트로 생성되는것일지 모르겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9Es7C/btq1ByvcvtO/XjbToAbVSZ9jCIsJoBnsU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9Es7C/btq1ByvcvtO/XjbToAbVSZ9jCIsJoBnsU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9Es7C/btq1ByvcvtO/XjbToAbVSZ9jCIsJoBnsU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9Es7C%2Fbtq1ByvcvtO%2FXjbToAbVSZ9jCIsJoBnsU1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;빈프로젝트는 말그대로 빈프로젝트 일거라 생각이 됩니다.&lt;/p&gt;
&lt;p&gt;미리 컴파일된 헤더는 Visual Studio 2017 이하의 버전에서 MFC를 사용할 경우 stdafx.h 해드파일을 include 하여 사용했던 기억이 납니다.&lt;/p&gt;
&lt;p&gt;여기에 포함되는 내용은 vector, map 등 std::를 붙여쓰는 함수들이 었던것으로 생각합니다.&lt;/p&gt;
&lt;p&gt;미리 컴파일된 해더만 선택해서 만들어 보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로젝트가 생성된 코드를 보니 stdafx.h 파일이 pch.h파일로 바뀐듯합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcxjMh/btq1E8ChIh4/jX1hC65jwKHjGZ9O1pyUS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcxjMh/btq1E8ChIh4/jX1hC65jwKHjGZ9O1pyUS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcxjMh/btq1E8ChIh4/jX1hC65jwKHjGZ9O1pyUS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcxjMh%2Fbtq1E8ChIh4%2FjX1hC65jwKHjGZ9O1pyUS1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;솔루션 탐색기과 해더 파일을 보니 MFC 프로젝트가 자동으로 생성되는것을 보니 MFC라는 이름이 바뀐것으로 생각되네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XfP7t/btq1ztnRZJ7/R0DEOFCCqHLauoXuWFKJY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XfP7t/btq1ztnRZJ7/R0DEOFCCqHLauoXuWFKJY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XfP7t/btq1ztnRZJ7/R0DEOFCCqHLauoXuWFKJY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXfP7t%2Fbtq1ztnRZJ7%2FR0DEOFCCqHLauoXuWFKJY1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예전엔 stdafx.h 포함되었던 내용이 framework.h 파일로 변경된 것 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFv360/btq1Bx37NUk/QQuMc6KswKGxvw4YppYElK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFv360/btq1Bx37NUk/QQuMc6KswKGxvw4YppYElK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFv360/btq1Bx37NUk/QQuMc6KswKGxvw4YppYElK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFv360%2Fbtq1Bx37NUk%2FQQuMc6KswKGxvw4YppYElK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;리소스도 같단히 확인해 본 후 실행해 보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;기본적으로 만들어 지는 내용을 확인해 볼까 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7qfrA/btq1AF9bMtA/wDmDwEXRFm8ewUmKP5cNlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7qfrA/btq1AF9bMtA/wDmDwEXRFm8ewUmKP5cNlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7qfrA/btq1AF9bMtA/wDmDwEXRFm8ewUmKP5cNlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7qfrA%2Fbtq1AF9bMtA%2FwDmDwEXRFm8ewUmKP5cNlk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Accelerator는 단축키 정보인듯 합니다.&lt;/p&gt;
&lt;p&gt;나머지는 이름과 같이 생성되는것 같습니다.&lt;/p&gt;
&lt;p&gt;메뉴와 다른 항목들도 눌러봤는데 별건 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dialog의 IDD_ABOUTBOX를 눌러봤는데 생각보다 무거워졌나봅니다.&lt;/p&gt;
&lt;p&gt;열리는데 상당한 시간이 소요되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cl167f/btq1BxC9Ftj/ttogTty7B3dDKZid8XJKKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cl167f/btq1BxC9Ftj/ttogTty7B3dDKZid8XJKKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cl167f/btq1BxC9Ftj/ttogTty7B3dDKZid8XJKKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcl167f%2Fbtq1BxC9Ftj%2FttogTty7B3dDKZid8XJKKk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;MFC의 문법은 많이 변하지 않았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k4081/btq1z4g9A5R/xeDYg0QaJQNTk8jPuB6r7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k4081/btq1z4g9A5R/xeDYg0QaJQNTk8jPuB6r7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k4081/btq1z4g9A5R/xeDYg0QaJQNTk8jPuB6r7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk4081%2Fbtq1z4g9A5R%2FxeDYg0QaJQNTk8jPuB6r7K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오랜만에 보니 윈도우창 디자인을 어디에 구성했는지 기억이 안납니다 ㅎㅎ&lt;/p&gt;
&lt;p&gt;실행해보니 화면은 구성되지 않은채 실행되는것을 보니 따로 추가해야할 것으로 생각됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qzfl6/btq1AEJfsYm/pkaL2pmPs2bxFmzWX2iV2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qzfl6/btq1AEJfsYm/pkaL2pmPs2bxFmzWX2iV2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qzfl6/btq1AEJfsYm/pkaL2pmPs2bxFmzWX2iV2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQzfl6%2Fbtq1AEJfsYm%2FpkaL2pmPs2bxFmzWX2iV2k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;공부를 조금한 후 다음 포스팅에서 화면 추가 방법을 다뤄보겠습니다.&lt;/p&gt;
&lt;p&gt;(다음 포스팅에서 폼뷰를 넣기 위해 여러 좌절 후 프로젝트를 다시 생성했습니다. ㅎㅎ)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Windows 데트크톱 마법사는 무엇일까에 대한 답은 MFC의 변경된 이름인듯 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;MFC에서 변경된 것인줄 알았는데 다음 포스팅을 작성하면서 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;알게되었는데 이 프로젝트는 WinAPI 프로젝트 입니다. ㅠ.ㅠ&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발기록/윈도우즈개발</category>
      <category>desktop</category>
      <category>MFC</category>
      <category>Windows개발</category>
      <category>Wizard</category>
      <category>애드소프트</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/45</guid>
      <comments>https://addsoft.tistory.com/45#entry45comment</comments>
      <pubDate>Thu, 1 Apr 2021 17:23:21 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 새로운창(Activity) 실행하기</title>
      <link>https://addsoft.tistory.com/44</link>
      <description>&lt;p&gt;안녕하세요. 애드소프트입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 안드로이드 개발을 하다보면 많은 액티비티(Activity)를 새롭게 호출할때가 많습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;액티비티에 대해 간단히 알아 보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;액티비티의 개념은 화면에 표시되는 UI구성을 위해 가장 기본이 되는 요소입니다. 안드로이드 앱은&lt;/p&gt;
&lt;p&gt;화면에 UI를 표시하기 위해 최소하나 이상의 Activity를 가져야합니다.&lt;/p&gt;
&lt;p&gt;앱 실행시 AndroidManifest.xml을 통해 최초 실행될 Activity를 지정할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;간단히 설정하자면 현재 화면상에 표시되는 활성화된 창이라고 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;액티비티의 상태 변화 라이프 사이클은 다음과 같이 표시됩니다.&lt;/p&gt;
&lt;p&gt;타원은 상태를 표시하며, 직사각형은 상태를 변경하기 위한 콜백 함수를 표시합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tLE8T/btq1s4UEfGw/aHmmwuB1xgTnNgmK8fwp7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tLE8T/btq1s4UEfGw/aHmmwuB1xgTnNgmK8fwp7k/img.png&quot; data-alt=&quot;출저 : 구글 Developer&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tLE8T/btq1s4UEfGw/aHmmwuB1xgTnNgmK8fwp7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtLE8T%2Fbtq1s4UEfGw%2FaHmmwuB1xgTnNgmK8fwp7k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출저 : 구글 Developer&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 이 Activity를 표시하거나 종료하는 방법을 알아볼까 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Activity를 호출하기 위해서는 다음 두 함수를 이용합니다.&lt;/p&gt;
&lt;p&gt;1. startActivity - 액티비티를 호출 할때 사용합니다.&lt;/p&gt;
&lt;p&gt;2. startActivityForResult - 액티비티가 시작 될때 코드값를 전송합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 함수는 Intent를 통해 제공됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Activity를 활성화 하기 위한 간단한 코드를 작성해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617090011212&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Intent newIntent = new Intent(context, JavaActivityClass.class);

//key = 문자열키, value = 문자열 값 입력
intent.puExtra(key, value);

startActivity(intent);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;파라미터를 받는 쪽에서는 다음과 같이 구현됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617149331965&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Intent intent = getIntent();
String value = intent.getExtras().getString(&quot;key&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;startActivityForResult를 사용하여 새로운 Activity를 사용한다면 다음과 같이 사용하시면 됩니다.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1617090369639&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Intent newIntent = new Intent(context, JavaActivityClass.class);
startActivityForResult(intent, newIntent, requestCode.LOGIN_RESULT);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;코드를 사용하기위해서는 다음 함수를 구현 하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1617150002758&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	super.onActivity(requestCode, resultCode, data);
    case RequestCode.LOGIN_RESULT:
    	if(resultCode == RESULT_OK &amp;amp;&amp;amp; !data) {
        	//로그인 성공시
        }else if(requestCode == RESULT_CANCELED) {
        	// 로그인 결과가 CANCEL 할 때 할일
        }
        break;
      default:
        break;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;본 예제들은 가상으로 코딩한 내용입니다. 오타와 문법이 조금씩 다를 수 있는점 가만해 주세요 ^^;&lt;/p&gt;
&lt;p&gt;본 예제는 새로운 Activity를 실행하면서 두가지 방법으로 간단한 결과나 파라미터를 전송하는 방법을 구현한 내용입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발기록/안드로이드개발</category>
      <author>애드소프트(Addsoft)</author>
      <guid isPermaLink="true">https://addsoft.tistory.com/44</guid>
      <comments>https://addsoft.tistory.com/44#entry44comment</comments>
      <pubDate>Wed, 31 Mar 2021 09:24:35 +0900</pubDate>
    </item>
  </channel>
</rss>