반응형

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

 

이전 포스팅을 해보셨다면 약간 생소한 데이터 형을 많이 보셨을 것입니다.

LPCTSTR, LPTSTR와 같이 비슷하지만 다른 데이터형들이 많이 존재하는데 이렇게 나눠진 이유가 있습니다.

눈으로 봐서는 어떤 데이터형인지 잘 알 수 없는 형들이 존재합니다.

 

#ifdef UNICODE
 typedef LPCWSTR LPCTSTR; 
#else
 typedef LPCSTR LPCTSTR;
#endif

선언을 따라가 보면 LPCWSTR 이나 LPCSTR을 애칭을 만들어 주는것을 볼 수 있습니다.

이는 MBCS(멀티 바이트 문자 집합)이라고 하여 DBCS(더블 바이트 문자 집합)라고도 합니다. 이는 1또는 2바이트로 구성되며, 2바이트 보다 큰 문자 집합은 지원되지 않습니다.

 

현재 Windows는 유니코드를 표준으로 사용되고 있습니다.

 

유니코드는 16비트문자 인코딩입니다. 모든 언어에 대해 충분 한 인코딩을 제공 합니다. 모든 ASCII 문자는 유니코드에 확장 문자로 포함됩니다.

 

본론으로 돌아가서 LPCWSTR와 LPCSTR의 차이는 유니코드와 멀티바이트의 차이로 볼 수 있습니다.

LPCWSTR을 따라가보면 다음과 같이 선언되어 있습니다.

typedef const wchar_t* LPCWSTR;

LPCSTR을 따라가보면 다음과 같이 선언되어 있습니다.

typedef const char* LPCSTR;

위와 같이 같은 LPCTSTR 이라도 MBCS를 호환으로 생성했냐에 따라 유니코드 또는 멀티바이트로 동적으로 선언되어 사용됩니다. 두가지는 혼용될 수 없습니다만 Convert 함수를 통해 변환 사용은 가능합니다.

 

MFC에서 많이 사용되는 데이터 형에 대해 알아보겠습니다.

 

BOOL - Boolean 값을 나타내는 정수 값습니다. 0 또는 1 값을 사용하지만 선언은 int 형으로 선언됩니다.

BSTR - 32비트 character 마지막에 NULL로 끝나는 포인터 값을 의미합니다. 

BYTE - 부호없는 8비트 값을 의미 합니다. 네트워크 프로토콜의 단일 octet에 해당하는 8비트 부호없는 값입니다.

LONG - 부호없는 32비트 정수값입니다.

DWORD - 부호없는 32비트 정수이며, MFC에서 상당히 많이 사용하는 데이터형 입니다.

LPARAM - 윈도우 프로시져에서 사용되는 데이터형 중 하나입니다.

WPARAM - LPARAM과 동일합니다.

LPVOID - 32비트 void 포인터입니다.

LRESULT - 윈도우 프로시져나 볼백 할수가 리턴하는 32비트 값입니다.

UINT - 부호없는 32비트 int형입니다.

WNDPROC - 윈도우 프로시저 함수를 포인트하는 32비트 포인트 값입니다.

WORD - 16비트 unsigned int 값입니다.

POSITION - MFC에서 위치를 나타낼때 쓰는 포인터 값입니다.

LPCRECT -  RECT 구조체의 포인트 값입니다.

 

다음 정도의 데이터 형들이 MFC에서 많이 사용됩니다.

다른 데이터형도 많이 쓰이지만 윈도우에 있는 데이터형만 추려보았습니다.

 

포스팅을 이만 마치도록 하겠습니다.

 

감사합니다.

반응형
반응형

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

 

저번 포스팅에서는 ListBox를 다뤄 보았는데 우여 곡절이 많았습니다.

ListBox를 보다보니 여러 컬럼을 추가하는게 쉬운일 아니었습니다.

불가능하진 않더라도 꼭 ListBox만 고집해야 하는 상황이 아니라면 구지 사용할 이유가 없을듯 합니다.

멀티 컬럼을 위해서는 ListView를 사용하는게 정신건강에도 좋을듯 합니다.

 

이번 포스팅에서는 ListView를 사용하는 법을 같이 진행해 봅시다.

 

ListView를 사용하기 위한 CFormview를 기본클래스로 클래스를 하나 생성하도록 하겠습니다.

InitInstance 함수의 항목 중 RUNTIME_CLASS를 추가한 클래스로 변경합니다.

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

ListViewSample에 빨간 줄이 들어 온다면 다음 항목에 추가한 해더 파일을 추가해 줍니다.

// HelloWorld.cpp: 애플리케이션에 대한 클래스 동작을 정의합니다.
//

#include "pch.h"
#include "framework.h"
#include "afxwinappex.h"
#include "afxdialogex.h"
#include "HelloWorld.h"
#include "MainFrm.h"

#include "HelloWorldDoc.h"
#include "HelloWorldView.h"
#include "ListViewSample.h" // 해당 부분 추가

해당 파일을 수정하는 이유를 알기 위해서는 MFC의 구조를 조금 이해 하셔야 편리한거 같습니다.

SDI(좌) MDI(우) 애플리케이션의 구조(출저 : MSDN)

 

CWinApp -> CDocument -> CFrameWnd -> CView, CToolBar, CStatusBar 형식으로 포함 하도록 되어 있습니다.

 

프로그램이 실행되면 전체적인 것을 포함하는 것은 CWinApp 이라고 생각하시면됩니다.

한 응용프로그램을 관장하며, 초기화, 실행, 종료를 캡슐화 합니다. 

CWinApp 아래에 도큐먼트가 포함되고 토큐먼트에 툴바, 뷰, 스테이터스 등이 포함된다고 이해 하고 있습니다.

 

툴바나 스테이스터스바, 메뉴 등의 위치는 다들 알고 있으실 테니 표시는 생략했습니다.

 

 

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

처음 수정한 코드입니다. 해당 코드를 수정한 다음 리소스 뷰를 통해 추가한 뷰를 열어 봅니다.

위와 같은 폼이 생성되었을 것입니다.

 

해당 폼에 리스트 뷰를 추가 하고 컨트롤 변수를 추가 해 줍니다.

m_ctrlListView라는 컨트롤 변수를 추가 했습니다.

그리드 형식으로 표시하길 원하기 때문에 리스트 컨트롤의 속성에서 리포트 방식으로 변경합니다.

 

솔루션 탐색기를 통해 ListViewSample.cpp 로 돌아 온 후 데이터를 입력하기 위한 코딩을 삽입합니다.

코드를 봤더니 추가할 적당한 함수를 찾지 못해 추가해 주기로 하겠습니다.

CTRL + SHIFT + X 단축키를 눌러 클래스 위자드를 실행 한 후 가상함수 탭에서 OnInitialUpdate 함수를 찾아 추가해 줍니다.

추가 하신 후 코드편집을 누르시면 해당 위치로 이동하니 이용하시면 편리합니다.

CListCtrl의 함수는 컬럼 해더 부분과 데이터 부분으로 나뉘어 집니다.

그래서 컬럼 해더를 따로 추가 해 주셔야 됩니다.

void ListViewSample::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

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


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

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

	m_ctrlListView.InsertItem(1, L"데이터 1");
	m_ctrlListView.SetItem(1, 1, LVIF_TEXT, L"데이터 2", 0, 0, 0, NULL);
}

 

위 와 같이 코딩 후 실행 결과입니다. 

 

 

추가 방법은 많은 방법은 많은 방법을 제공하고 있으니 MSDN을 참고하시면 편리합니다.

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

 

CListCtrl 클래스

자세히 알아보기: CListCtrl 클래스

docs.microsoft.com

 

반응형
반응형

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

 

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

그 중에서 눈에 들어온 곳이 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

 

 

반응형

+ Recent posts