SetText를 이용한 SPREAD CELL의 체크박스 설정하기
Visual Studio를 사용하여 MFC 다이얼로그에 Far point Spread ActiveX 컨트롤 배치하기
Far point Spread는 마이크로소프트 엑셀과 비슷한 스프레드시트 컨트롤입니다. MFC 다이얼로그에서 Far point Spread를 사용하기 위해서는 다음과 같은 단계를 따르면 됩니다.
- Far point Spread ActiveX 컨트롤을 다운로드하여 설치합니다.
- MFC 다이얼로그를 생성하고, 다이얼로그에 Far point Spread ActiveX 컨트롤을 추가합니다.
- ClassWizard를 사용하여 다이얼로그 클래스에 멤버 변수를 추가합니다.
- 다이얼로그 클래스의 OnInitDialog 함수에서, 멤버 변수를 초기화하고 Far point Spread를 초기화합니다.
- 데이터를 Far point Spread에 표시합니다.
Visual Studio의 도구상자에 ActiveX 컨트롤 도구가 표시되는데, 이를 선택하여 다이얼로그에 위치시킨다.
도구상자에서 SPREAD 선택 |
SPREAD 컨트롤을 다이알로그에 배치하면 초기상태의 SPREAD가 표시되는데, 더블클릭하여 SPREAD 편집 화면으로 들어간다.
다이알로그에 SPREAD 배치 |
SPREAD 편집화면에서 각 CELL의 속성을 체크박스로 선택하여 CELL안에 체크박스가 표시되도록 한다.
SPREAD를 편집 |
DoDataExchange()코드에서 DDX_Control()에 SPREAD 컨트롤과 클래스 멥버변수와 연결하여 준다.
컨트롤 연결 |
SEPREAD ActiveX 컨트롤 다운로드부터 다이얼로그에 삽입까지 과정
1. Far point Spread ActiveX 컨트롤을 다운로드하여 설치합니다.
- Far point Spread ActiveX 컨트롤은 Farpoint Spread(SPREAD.NET) 에서 다운로드할 수 있습니다.
- 다이얼로그의 Resource View에서 컨트롤 추가를 선택합니다.
- 추가할 컨트롤의 종류로 "FarPoint Spread Control"을 선택하고, 다이얼로그에 추가합니다.
3. ClassWizard를 사용하여 다이얼로그 클래스에 멤버 변수를 추가합니다.
- ClassWizard에서 다이얼로그 클래스를 선택합니다.
- 멤버 변수 탭에서 "Add Variable" 버튼을 선택합니다.
- "Variable Type"으로 "Control"을 선택하고, "Variable Category"로 "Value"를 선택합니다.
- "Variable Name"에 변수명을 입력하고, "OK"를 선택합니다.
4. 다이얼로그 클래스의 OnInitDialog 함수에서, 멤버 변수를 초기화하고 Far point Spread를 초기화합니다.
- OnInitDialog 함수에서 멤버 변수를 초기화합니다.
체크박스 자동 체크 기능 구현을 위한 SPREAD 코드 예시
체크박스가 설정된 SPREAD에 일괄적으로 체크를 하도록하는 코드이다. Cell 안에 위치한 체크 박스의 값을 설정할 때는 SetText()를 사용한다. 다음은 코드의 순서를 나열한 것이다.
- Column과 Row의 기본 값을 설정한다.
- UI에서 체크가 설정되면 다음 동작을 하고, 체크가 되지 않으면 이 루틴을 빠져나간다.
- SPREAD의 Cell만큼 반복 동작을 한다. 여기서는 17번까지만 수행한다.
- SPREAD의 Column과 Row를 설정한다.
- STRING 속성를 가진 VARIANT 변수를 선언한다.
- 속성의 값을 1로 설정하도록 한다.
- VARIANT 에 저장된 값을 SPREAD에 적용한다.
SPREAD에 CheckBox 표시한 예제 |
void CMasterDispDlg::OnBnClickedCheckAll()
{
int Col = 2; ///< 2번째 컬럼을 설정하기 위한 값을 변수에 넣는다.
int Row = 1; ///< 1번째 ROW를 설정한다.
if(m_btnCheckAll.GetCheck()) ///< 체크박스를 선택하였다면, 다음을 수행한다.
{
for(int i = 1; i < 17; i++) ///< SPREAD의 17 ROW 까지만 수행한다.
{
m_spreadSimTelegram.SetCol(Col); ///< 2 컬럼에 위치한다.
m_spreadSimTelegram.SetRow(i); ///< 1 ~ 17 Row를 반복하도록 한다.
VARIANT Var; ///< VARIANT 변수를 선언한다.
Var.vt = VT_BSTR; ///< STRING 형으로 설정한다.
Var.bstrVal = _T("1"); ///< TRUE가 되도록 값을 정하는 것이다.
m_spreadSimTelegram.SetText(Col, i, Var); ///< CELL에 값을 적용한다.
}
}
{
int Col = 2; ///< 2번째 컬럼을 설정하기 위한 값을 변수에 넣는다.
int Row = 1; ///< 1번째 ROW를 설정한다.
if(m_btnCheckAll.GetCheck()) ///< 체크박스를 선택하였다면, 다음을 수행한다.
{
for(int i = 1; i < 17; i++) ///< SPREAD의 17 ROW 까지만 수행한다.
{
m_spreadSimTelegram.SetCol(Col); ///< 2 컬럼에 위치한다.
m_spreadSimTelegram.SetRow(i); ///< 1 ~ 17 Row를 반복하도록 한다.
VARIANT Var; ///< VARIANT 변수를 선언한다.
Var.vt = VT_BSTR; ///< STRING 형으로 설정한다.
Var.bstrVal = _T("1"); ///< TRUE가 되도록 값을 정하는 것이다.
m_spreadSimTelegram.SetText(Col, i, Var); ///< CELL에 값을 적용한다.
}
}
}
반대의 경우를 설정할 때는 else문을 만들고, VARIANT 설정값을 1에서 0을 바꾸어주면, 체크박스의 체크표시가 언체크로 바뀌어 표시된다.
ActiveX COM 프로젝트에서 사용되는 VARIANT 형식에 대해 알아보기
위 코드에서 VARIANT형이 많이 사용되었는데, 이는 ActiveX COM 프로젝트를 사용하였기 때문이다. VARIANT 형에 대하여 자세히 알아 보면 다음과 같다.
VARIANT는 COM(Component Object Model)에서 정의된 형식으로, 다양한 데이터 형식을 표현할 수 있습니다. 예를 들어, VARIANT는 문자열, 숫자, 날짜 및 불리언 값 등 다양한 데이터 형식을 저장할 수 있다. VARIANT 형식은 주로 다음과 같은 상황에서 사용된다.
- Automation: VARIANT는 자동화 기술에서 매개변수 전달 및 반환 값으로 사용된다. 자동화는 다른 언어나 애플리케이션과의 상호 운용성을 제공하기 위해 사용된다.
- 데이터베이스: 데이터베이스에서 NULL 값을 포함하는 필드를 다룰 때 VARIANT를 사용할 수 있다.
- 유연성: VARIANT는 다른 데이터 형식으로 쉽게 변환될 수 있으므로, 데이터 처리 중에 형식 변환이 필요한 경우에도 사용된다.
- OLE(Control Container): OLE 컨트롤 컨테이너에서 VARIANT는 OLE 컨트롤과의 상호 작용에 사용된다.