반응형

안녕하세요. 애드소프트 입니다.

 

SSL 인증서를 유료로 구매하여 사용하였습니다.

혹시 무료 인증서가 있을까 싶어 검색해 보았더니 ZeroSSL인 무료 인증서가 존재 한다는걸 알았습니다.

인증서의 갱신 기간이 3개월 정도로 짧아 자주 갱신해야 하지만 자동갱신기능이 존재하는듯 합니다.

 

이번 포스팅에서는 ZeroSSL의 사용법을 검색하고 다음 포스팅에 사용법을 공유 해 보도록 하겠습니다.

 

ZeroSSL 홈페이지를 열어보니 SSL을 사용하기 위한 3단계 방법이 메인에 표시됩니다.

왠지 사용이 편리 할 것 같아  소개합니다.

출저: ZeroSSL

인증서 발급을 위해서는 회원 가입이 필요하며, 등록 방법은 절차를 제공하는데로 따라 하시면 어렵지 않을것으로 생각됩니다.

무료 인증서 발급을 원하신다면 ZeroSSL 사용하셔도 괜찮을것 같습니다.

 

발급 방법을 다음을 참고 하시면 될것 같습니다.

Creating an SSL Certificate – ZeroSSL

 

Creating an SSL Certificate

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...

help.zerossl.com

 

 

반응형
반응형

안녕하세요. 애드소프트 입니다.

 

오늘은 MFC를 이용해 리스트를 생성 후 목록을 표시할 수 있는 간단한 프로그램을 작성해 볼까 합니다.

List Box 컨트롤을 추가 하여 전체 화면으로 늘렸습니다.

List Box만을 추가하고 실행해 보았습니다.

제목이 없네요. 제목 추가는 다음과 같이 하시면 됩니다.

// CHelloWorldApp 초기화

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

	CWinAppEx::InitInstance();


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

	AfxEnableControlContainer();

	EnableTaskbarInteraction(FALSE);

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

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


	InitContextMenuManager();

	InitKeyboardManager();

	InitTooltipManager();
	CMFCToolTipInfo ttParams;
	ttParams.m_bVislManagerTheme = TRUE;
	theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
		RUNTIME_CLASS(CMFCToolTipCtrl), &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->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();

	// 타이틀 수정
	m_pMainWnd->SetWindowTextW(L"Hello World");

	return TRUE;
}

 

InitInstance 함수에서  m_pMainWnd->SetWindowTextW() 함수를 통해 수정가능합니다.

유니코드 베이스라 L 메크로를 사용하여 유니코드로 변경하였습니다.

 

컬럼을 추가하기 위해서 속성 창에서 다음 항목을 변경하였습니다.

 

위 에서 추가한 리스트 박스에 데이터를 추가하기 위해 컨트롤을 추가해 보겠습니다.

리소스 뷰에서 리스트 박스를 선택 후 마우스 오른쪽 버튼을 누른 후 변수 추가를 선택합니다.

 

변수 추가시 다음 컨트롤변수가 추가 된 것을 확인 할 수 있습니다.

해더파일

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<CHelloWorldDoc*>(m_pDocument); }
#endif

 

Cpp 파일

void CHelloWorldView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST_SAMPLE, mCtrlListBoxSample);
}

 

클레스 마법사를 실행합니다.

단축키는 CTRL + SHIFT + X 입니다

클레스 이름을 CHellowWorldView를 선택하고 메시지 탭을 선택합니다.

가상 함수 탭에서 OnInitializeUpdate 함수를 선택하시고 코드 편집을 누릅니다.

 

해당 함수에 다음 코드를 추가 합니다.

void CHelloWorldView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();


	mCtrlListBoxSample.SetColumnWidth(500);
}

 

다시 알게된 사실이지만 MFC의 CListBox는 컬럼 추가가 쉽지 않습니다.

어떻게든 추가해서 설명드리고 싶었지만 MSDN에서 공부를 하다보니 CListView 라는 클래스를 제공합니다.

 

 

리스트 박스에 내용을 추가하기 위해서는 다음과 같이 AddString 함수를 이용하시면 됩니다.

 

void CHelloWorldView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();


	mCtrlListBoxSample.SetColumnWidth(100);

	mCtrlListBoxSample.AddString(L"테스트 리스트 1");
	mCtrlListBoxSample.AddString(L"테스트 리스트 2");
	mCtrlListBoxSample.AddString(L"테스트 리스트 3");
	mCtrlListBoxSample.AddString(L"테스트 리스트 4");
	mCtrlListBoxSample.AddString(L"테스트 리스트 5");
	mCtrlListBoxSample.AddString(L"테스트 리스트 6");
	mCtrlListBoxSample.AddString(L"테스트 리스트 7");
}

 

 

다른 함수들은 다음 MSDN을 활용해 추가해 보세요.

 

docs.microsoft.com/ko-kr/cpp/mfc/reference/clistbox-class?view=msvc-160

 

CListBox 클래스

MFC CListBox 클래스 및 해당 멤버 함수에 대 한 설명입니다.

docs.microsoft.com

 

다음 포스팅에서 CListView를 다뤄 볼까 합니다.

컬럼 추가 및 사용법을 알아보도록 할께요.

 

읽어 주셔서 감사합니다.

반응형
반응형

안녕하세요. 애드소프트입니다.

 

이전 포스팅에서는 Windows 데이크톱 마법사를 통하여 프로젝트를 생성해 보았습니다.

 

이번 포스팅에서는 생성된 프로젝트에 화면 구성하는 방법을 찾아 포스팅 해볼까 합니다.

오랜만에 해보다 보니 어디서 추가해야 되나 한참 고민하다가 다이얼로그에 폼뷰를 추가 했던 기억이 되살아나

다이얼로그에 추가를 눌러보니 희망이 보이기 시작했습니다 ㅎㅎ (따라하시면 첨음부터 다시 생성해야 합니다. 밑에 내용부터 확인하셔도 좋습니다.)

일단 폼뷰부터 넣어보겠습니다.

연결하는건 다음에 생각하기로~ 

IDD_FORMVIEW_MAIN이라는 이름으로 폼뷰를 하나 추가했습니다.

메인 화면과 연결하는 방법을 찾아볼께요.

 

생각해보니 예전엔 Dialog 베이스와 SDI또는 MDI 베이스로 구분해서 생성했던거 같은데 바뀐건지 옵션을 건너 뛴것인지 모르겠네요. 

프로그래밍으로 화면 구성하기는 시간이 오래 걸릴거 같아 리소스와 연결하는 방법을 찾아보는게 좋겠습니다.

 

화면창을 구성하는 소스는 다음인거 같습니다.

//
//   함수: 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;
}

코드를 보니 예전에 WinAPI로 화면을 생성하는것으로 확인됩니다.

이전 포스팅에 MFC로 만들어졌다고 했는데 사기꾼이 되었군요 ㅎㅎ

 

 

흐흐 이걸 미리 봤어야하는데... 멘탈이 오락가락 했습니다.

프로젝트를 다시 만들기로 결정했습니다.

찾아보니 MFC 관련 SDK가 설치가 안된것을 다시 확인했습니다.

설치 후 프로젝트를 다시 생성해 보겠습니다.

한참을 찾으면서 어리둥절했네요. ㅎㅎ

너무 오랜시간 윈도우 프로그래밍을 접할 일이 없어서 거의 초기화 상태 입니다.

 

하아~ MFC가 바뀐게 아니네요 ㅋㅋ

설치하고 나니 추가 되어 있습니다 OTL

 

이전 포스팅 내용도 수정해야 겠네요

일단 프로젝트부터 다시 생성하겠습니다.

 

위 설정으로 프로젝트를 생성하였습니다.

생성된 클래스 단계에서 Formview 선택이 중요합니다.

이제 좀 익숙해진 분위기네요.

 

리소스를 보니 폼뷰가 존재하네요.

 

실행해보니 코딩할 필요도없었네요.

 

 

좌절감과 함께 시간을 너무 많이 보냈습니다.

 

다음 포스팅에 개발 관련 내용을 담아 보겠습니다.

 

 

반응형
반응형

안녕하세요. 애드소프트 입니다.

 

오랜기간 윈도우 프로그램을 개발해보지 못해서 바뀐게 있는지 확인하고 공부해 보고자

데이크톱용 개발을 해 볼까해서 프로젝트를 만들고 있는데 MFC항목이 보이지 않습니다. ㅎㅎ

SDK를 설치 해야하는건지 설치할때 빼먹었나봐요.

그래서 찾다보니 Windows 데이크톱 마법사라고 있어 궁금함을 참지 못하고 사용해보면서 기록을 남겨볼까 합니다.

 

프로젝트를 생성하기 위해 다은 Windows 데이크톱 마법사를 선택하니 다음과 같은 화면이 보입니다.

데스크톱 어플리케이션을 만들어 볼까 했으니 선택하고 확인을 눌러볼께요.

MFC해더가 여기에서 추가 가능하도록 바뀌었나봅니다.

데스크톱 어플리케이션을 선택하니 MFC가 비활성화 되는것을 보니 SDK를 따로 설치해야할 듯 합니다.

아니면 MFC 프로젝트로 생성되는것일지 모르겠습니다.

빈프로젝트는 말그대로 빈프로젝트 일거라 생각이 됩니다.

미리 컴파일된 헤더는 Visual Studio 2017 이하의 버전에서 MFC를 사용할 경우 stdafx.h 해드파일을 include 하여 사용했던 기억이 납니다.

여기에 포함되는 내용은 vector, map 등 std::를 붙여쓰는 함수들이 었던것으로 생각합니다.

미리 컴파일된 해더만 선택해서 만들어 보았습니다.

 

프로젝트가 생성된 코드를 보니 stdafx.h 파일이 pch.h파일로 바뀐듯합니다.

솔루션 탐색기과 해더 파일을 보니 MFC 프로젝트가 자동으로 생성되는것을 보니 MFC라는 이름이 바뀐것으로 생각되네요.

 

 

예전엔 stdafx.h 포함되었던 내용이 framework.h 파일로 변경된 것 같습니다.

리소스도 같단히 확인해 본 후 실행해 보도록 하겠습니다.

기본적으로 만들어 지는 내용을 확인해 볼까 합니다.

Accelerator는 단축키 정보인듯 합니다.

나머지는 이름과 같이 생성되는것 같습니다.

메뉴와 다른 항목들도 눌러봤는데 별건 없습니다.

 

Dialog의 IDD_ABOUTBOX를 눌러봤는데 생각보다 무거워졌나봅니다.

열리는데 상당한 시간이 소요되었습니다.

MFC의 문법은 많이 변하지 않았습니다.

 

오랜만에 보니 윈도우창 디자인을 어디에 구성했는지 기억이 안납니다 ㅎㅎ

실행해보니 화면은 구성되지 않은채 실행되는것을 보니 따로 추가해야할 것으로 생각됩니다.

 

공부를 조금한 후 다음 포스팅에서 화면 추가 방법을 다뤄보겠습니다.

(다음 포스팅에서 폼뷰를 넣기 위해 여러 좌절 후 프로젝트를 다시 생성했습니다. ㅎㅎ)

 

Windows 데트크톱 마법사는 무엇일까에 대한 답은 MFC의 변경된 이름인듯 합니다.

 

MFC에서 변경된 것인줄 알았는데 다음 포스팅을 작성하면서

알게되었는데 이 프로젝트는 WinAPI 프로젝트 입니다. ㅠ.ㅠ

 

감사합니다.

 

반응형

+ Recent posts