// 스타일 변경
m_ctrlList.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
// 체크박스 영역 클릭 여부
if ( pNMItemActivate->ptAction.x >= 5 &&pNMItemActivate->ptAction.x <= 20 )
{
....
}
// 체크박스 체크 여부
UINT uState = m_ctrlListFiles.GetItemState(i-1, LVIS_STATEIMAGEMASK);
if(BOOL((int)(uState)-1)>>12)
{
// 체크가 되어 있을 경우
....
}
else
{
// 체크가 안되어 있을 경우
....
}
// 아이템 선택된 상태로 변경
m_ctrlList.SetItemState(nIndex/*아이템 Index*/, LVIS_SELECTED, LVIS_SELECTED);
MFC/MFC Controls
- 리스트콘트롤 체크박스 구현 2011.03.10
- 기본적인 DHTML 컨트롤 2009.02.16
- 멀티라인헤더 및 배경색 추가 리스트콘트롤 - CListCtrlEx 2008.11.26
리스트콘트롤 체크박스 구현
2011. 3. 10. 10:38
기본적인 DHTML 컨트롤
2009. 2. 16. 14:29
HTML 컨트롤을 선택하여 기본적으로 제공되는 소스를 수정한 DHTML컨트롤.
기존의 IDHTCtrlUI을 삭제(이때, 컴파일 에러는 전부 주석처리)하고 외부로 노출될 UIObj Object를 추가했다.(ATL Object Wizard)
IDHTCtrl 인터페이스 생성부분에서 아래와 같이 수정 및 멤버변수를 추가했다.
// 웹 브라우저 생성, 인터페이스 교환
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CAxWindow wnd(m_hWnd);
// 1. Web Browser 컨트롤 생성
HRESULT hr = wnd.CreateControl(IDH_DHTCTRL);
if(SUCCEEDED(hr)) {
hr = CComObject<CUIObj>::CreateInstance(&m_pUI);
if(SUCCEEDED(hr)) {
// 2. Web Browser에게 연동되는 UIDisp 전달
CComQIPtr<IDispatch> pDisp(m_pUI);
hr = wnd.SetExternalDispatch(pDisp);
}
if(SUCCEEDED(hr)) {
// 3. Web Browser가 노출하고 있는 Interface 포인터 획득
hr = wnd.QueryControl(IID_IWebBrowser2, (void**)&m_spBrowser);
// 4. Web Browser와 실제 연동할 m_pUI인터페이스에게 Web Interface 전달
m_pUI->put_Web(m_spBrowser);
}
}
return SUCCEEDED(hr)?0:-1;
}
CComObject<CUIObj> *m_pUI;
//////////////////////////////////////////////////////////////////////////////
IUIObj 인터페이스에 Web property를 추가.
STDMETHODIMP CUIObj::get_Web(IUnknown **pVal)
{
m_spBrowser->Navigate(m_urlPath,NULL,NULL,NULL,NULL);
return S_OK;
}
STDMETHODIMP CUIObj::put_Web(IUnknown *newVal)
{
m_spBrowser = (IWebBrowser2*)newVal;
return S_OK;
}
GoToURL()이란 메소드도 추가하여 메소드 안에서 m_spBrowser->Navigate(m_urlPath,NULL,NULL,NULL,NULL)을 호출.
멤버변수
CComPtr<IWebBrowser2> m_spBrowser; //IDHCtrl 에서 전달되는 인터페이스 저장
CComBSTR m_urlPath; //URL 저장공간
OnClick()메소드도 옮겨오기....소스복사, IDL수정....뭐 대충 이정도밖에 기억안나네ㅡ.,ㅡ
기존의 IDHTCtrlUI을 삭제(이때, 컴파일 에러는 전부 주석처리)하고 외부로 노출될 UIObj Object를 추가했다.(ATL Object Wizard)
IDHTCtrl 인터페이스 생성부분에서 아래와 같이 수정 및 멤버변수를 추가했다.
// 웹 브라우저 생성, 인터페이스 교환
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CAxWindow wnd(m_hWnd);
// 1. Web Browser 컨트롤 생성
HRESULT hr = wnd.CreateControl(IDH_DHTCTRL);
if(SUCCEEDED(hr)) {
hr = CComObject<CUIObj>::CreateInstance(&m_pUI);
if(SUCCEEDED(hr)) {
// 2. Web Browser에게 연동되는 UIDisp 전달
CComQIPtr<IDispatch> pDisp(m_pUI);
hr = wnd.SetExternalDispatch(pDisp);
}
if(SUCCEEDED(hr)) {
// 3. Web Browser가 노출하고 있는 Interface 포인터 획득
hr = wnd.QueryControl(IID_IWebBrowser2, (void**)&m_spBrowser);
// 4. Web Browser와 실제 연동할 m_pUI인터페이스에게 Web Interface 전달
m_pUI->put_Web(m_spBrowser);
}
}
return SUCCEEDED(hr)?0:-1;
}
CComObject<CUIObj> *m_pUI;
//////////////////////////////////////////////////////////////////////////////
IUIObj 인터페이스에 Web property를 추가.
STDMETHODIMP CUIObj::get_Web(IUnknown **pVal)
{
m_spBrowser->Navigate(m_urlPath,NULL,NULL,NULL,NULL);
return S_OK;
}
STDMETHODIMP CUIObj::put_Web(IUnknown *newVal)
{
m_spBrowser = (IWebBrowser2*)newVal;
return S_OK;
}
GoToURL()이란 메소드도 추가하여 메소드 안에서 m_spBrowser->Navigate(m_urlPath,NULL,NULL,NULL,NULL)을 호출.
멤버변수
CComPtr<IWebBrowser2> m_spBrowser; //IDHCtrl 에서 전달되는 인터페이스 저장
CComBSTR m_urlPath; //URL 저장공간
OnClick()메소드도 옮겨오기....소스복사, IDL수정....뭐 대충 이정도밖에 기억안나네ㅡ.,ㅡ
멀티라인헤더 및 배경색 추가 리스트콘트롤 - CListCtrlEx
2008. 11. 26. 14:40
리스트콘트롤의 헤더에서 멀티라인 지원하는 클래스.
http://www.codeproject.com 에 있는 자료를 필요에 의해 짜집기 및 수정해서 만들었다.
사용법은 간단하다.
http://www.codeproject.com 에 있는 자료를 필요에 의해 짜집기 및 수정해서 만들었다.
사용법은 간단하다.
// 헤더파일 추가
#include "ListCtrlEx.h"
CListCtrl 멤버변수를 CListCtrlEx로 바꿔주고...
// 헤더 추가
LV_COLUMN lvcolumn;
lvcolumn.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
lvcolumn.fmt = LVCFMT_CENTER;
lvcolumn.cx = 0;
lvcolumn.pszText = " ";
m_ctrlList.InsertColumn(nIdx++, &lvcolumn);
lvcolumn.fmt = LVCFMT_RIGHT;
lvcolumn.cx = 100;
lvcolumn.pszText = "공사비용\n(만원)";
m_ctrlList.InsertColumn(nIdx++, &lvcolumn);
lvcolumn.fmt = LVCFMT_RIGHT;
lvcolumn.cx = 80;
lvcolumn.pszText = "공정률\n(%)";
m_ctrlList.InsertColumn(nIdx++, &lvcolumn);
// 모든 헤더가 추가된 후 마지막에 한줄 추가
m_ctrlList.Initializing(320, "견명조");
위와 같이 하면 헤더에 멀티라인 적용되며, 데이터는 한줄 번갈아가며 배경색이 적용된다.