반응형

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

 

무료 인증서가 존재하는걸 알게 되고 난 후 검색해 보았더니 많은 사이트가 존재하더군요

그 중에서 눈에 들어온 곳이 ZeroSSL 이었는데 다른곳을 하나더 소개할까 합니다.

 

SSL For Free - Free SSL Certificates in Minutes

 

SSL For Free - Free SSL Certificates in Minutes

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

www.sslforfree.com

이 인증서도 ZeroSSL과 마찮가지로 90일 마다 갱신해야 하는 상품인듯 합니다.

 

해당 인증서도 발급하기 위해서는 회원 가입이 필수 입니다.

 

해당 인증서 발급 사이트에서는 Youtube로 발급 받는 방법도 제공하고 있으니 한층 발급 받기위해 수고를 덜 수 있을것 같습니다.

기본적인 인증서나 WAS에대한 기본지식은 필요하겠지만요.

그래서 조금만 노력한다면 누구나 발급 받는 수 있을 것 같습니다.

 

와일드카드 인증서를 제공해 여러 도메인을 추가 할 수 있는것으로 보입니다.

 

사용방법도 메인에 기록되어 있으니 확인하고 자신에게 맞는 방법을 찾아 볼 수 있을듯 합니다.

 

관련 툴도 많이 제공하고 있으니 관리에도 도움되지 않을까 싶네요.

 

유로인증서 사용이 편리하긴 하지만 비용이 부담스럽진 않겠지만 아깝다고 생각하신다면 도전해 보셔도 좋을것 같습니다.

 

이상으로 포스팅을 마치도록 하겠습니다.

 

 

감사합니다.

반응형
반응형

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

 

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 선택이 중요합니다.

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

 

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

 

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

 

 

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

 

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

 

 

반응형

+ Recent posts