티스토리 뷰
이번에 하고자 하는 것은 ListControl에 특정한 칸을 더블 클릭하면
특정한 다이얼로그를 띄우는 것이다.
다이얼로그에는 이전에 만들었던 동적으로 그려지는 데이터이고..
이 다이얼로그에도 따로 timer가 들어가서 센서 데이터를 가져와서 뿌려주는 역할을 할 것이다.
ListControl의 property 창에서 메세지 명이 조금 독특하다..
HDN_ITEM_DBL_cLICK 메세지인줄 알았는데...
테스트해보니 이거는 리스트 컨트롤의 헤더에 해당하는 더블 클릭 이벤트를 캐치하는거고..
NM_DBL_CLICK 뭐 대충 이런 이름의 이벤트를 선택하면 된다..
함수를 생성하면 다음과 같은 프로토 타입이 생긴다..
{
//TODO : 어쩌고
*pResult = 0;
}
그럼 여기서 어떠한 아이템이 선택 되었는지 어떻게 알아낼까...
방법은 두가지이다..
이란 함수와
int row = pNMIA->iitem;
int col = pNMIA->iSubItem;
이란 방법이 있다..뭐, 더블클릭 이벤트 함수 안에서 아래쪽에 있는 것이 더 편할 것 같다..
그럼 새로운 창 띄우는거는 어떻게 할까...
그냥 local variable로 선언하면 창이 그 함수를 빠져 나오면서 닫히게 된다...
그러므로 동적 할당으로 배열에 추가해 놓고 필요할 때 수정하는 방식으로 하자...
CArray<CGraphDialog*> m_arrpGraphDlg 변수를 추가하고
::OnDestroy에서 메모리 해제하는 부분도 미리 추가하자..생성하면서 메모리 해제도 미리 짜는건 나중에 귀차니즘을 방지할 수 있는 좋은 습관이다..
{
this->m_arrpGraphDialog.GetAt(loop)->DestroyWindow();
delete this->m_arrpGraphDialog.GetAt(loop);
}
그럼 이제 더블클릭 이벤트로 생성된 함수 안에서 다이얼로그를 생성하자..
void CSensorMonitoringDlg::OnNMDblclkSensorlist(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pnmia = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
if(pnmia->iItem >= 0)
{
CGraphDialog* pGraphDlg = new CGraphDialog();
pGraphDlg->m_nSensorDataIndex = pnmia->iItem;
pGraphDlg->Create(CGraphDialog::IDD , this);
pGraphDlg->ShowWindow(SW_SHOW);
this->m_arrpGraphDialog.Add(pGraphDlg);
}
*pResult = 0;
}
결과적으로는 이렇게 되었다..
pnmia->iItem가 -1이 될 경우에는 어떠한 선택된 아이템 없이 더블클릭 된 것이니까 특정한 리스트가 클릭 되었을 때에만 추가하면 된다.
Create함수의 경우는 첫번째가 참조할 resource id로 resource에서 생성한 IDD_???를 넣어도 되고 위와 같이 다이얼로그에 해당하는 클래스를 생성한 경우 Dlg::IDD 로 얻어올 수 있다. IDD로 얻어오는 것이 좀더 멋져 보이기도 하고;; ID가 수정 될 경우를 대비해서 매번 수정안해줘도 된다는 편리함이 있다. 두번째 인자는 parent를 설정하는 것으로 일단은 parent가 닫히면 같이 닫히는 정도로 이해해도 될 것이다.
그리고 ShowWindow함수를 통해서 윈도우를 보여주게 되는 것이고, 아까 생성한 배열에 이 다이얼로그의 포인터를 추가해서 메모리 해제도 편리하게 해줄 수 있도록 하는 것이다. 그럼 테스트를 해보자!
더블클릭하니 잘 뜬다! 이제 할거는 자식창과 부모창 사이의 통신을 통해서 그래프 등의 정보를 넣는것! 뭐, 그런거는 포인터의 함수를 통해서 쉽게 할 수 있을 거라 생각한다..
- Total
- Today
- Yesterday
- 자바스크립트
- K100D
- 탐론 17-50
- 팁
- 안드로이드
- 속깊은 자바스크립트 강좌
- php
- 안드로이드 앱 개발 기초
- mini project
- HTML5
- 뽐뿌
- 삼식이
- 사진
- c++
- gae
- 서울
- GX-10
- Writing
- google app engine
- Javascript
- java
- HTML5 튜토리얼
- lecture
- TIP
- gre
- Android
- 강좌
- ny-school
- 샷
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |