MFC VC++ ツリ-コントロ-ル制御方法

// LeftFormVew.cpp : LeftFormVew クラスの実装
//

include “stdafx.h”

include “ControlPractice.h”

include “ControlPracticeDoc.h”

include “LeftFormVew.h”

ifdef _DEBUG

define new DEBUG_NEW

endif

// LeftFormVew

IMPLEMENT_DYNCREATE(LeftFormVew, CFormView)

BEGIN_MESSAGE_MAP(LeftFormVew, CFormView)
ON_WM_SIZE()
ON_WM_DRAWITEM()
ON_WM_MEASUREITEM()
ON_BN_CLICKED(IDOK, &LeftFormVew::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &LeftFormVew::OnBnClickedCancel)
END_MESSAGE_MAP()

// LeftFormVew コンストラクション/デストラクション

LeftFormVew::LeftFormVew()
: CFormView(LeftFormVew::IDD)
{
// TODO: 構築コードをここに追加します。

}

LeftFormVew::~LeftFormVew()
{
}

void LeftFormVew::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, CtlistControl1);
DDX_Control(pDX, IDOK, cfITOK);
DDX_Control(pDX, IDCANCEL, cfITCANCEL);
}

BOOL LeftFormVew::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。

return CFormView::PreCreateWindow(cs);

}

//============================================================
//============================================================
//============================================================
void LeftFormVew::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();

//============================================================
//============================================================
//============================================================
LV_COLUMN  lvc;
lvc.mask = LVCF_FMT  | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
//============================================================
for (int i=0;i<3;i++){
        lvc.iSubItem= i;
        lvc.pszText=LeftFormColumnLabel[i];
        lvc.cx     =(int)(LeftFormWidth[i]);
        lvc.fmt    =LeftFormFmt[i];
        CtlistControl1.InsertColumn(i,&lvc);
        }

//============================================================
//============================================================
//============================================================
LV_ITEM     lvi;
lvi.mask = LVIF_TEXT | LVIF_IMAGE |LVIF_PARAM ; 
lvi.iSubItem =0;

for(int i=0;i<5;i++){
       lvi.iItem    =i;
       lvi.pszText =LeftFormVew_buffDim[i][0];
       CtlistControl1.InsertItem(&lvi);
       }

// CtlistControl1.ShowWindow(SW_SHOW) ;
}

// LeftFormVew 診断

ifdef _DEBUG

void LeftFormVew::AssertValid() const
{
CFormView::AssertValid();
}

void LeftFormVew::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}

CControlPracticeDoc* LeftFormVew::GetDocument() const // デバッグ以外のバージョンはインラインです。
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CControlPracticeDoc)));
return (CControlPracticeDoc*)m_pDocument;
}

endif //_DEBUG

// LeftFormVew メッセージ ハンドラ

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
BOOL LeftFormVew::PreTranslateMessage(MSG* pMsg)
{
CControlPracticeDoc* pDoc = GetDocument();

//=========================================================
CString sval=_T("");
//=========================================================
if(pMsg->message==WM_KEYDOWN){
        //===============================
        switch(pMsg->wParam){
               case VK_RETURN  :break;
               case VK_CONTROL :break;
               case VK_ESCAPE  :break;
               case VK_F1      :break;
               case VK_F2      :break;
               case VK_F3      :break;
               case VK_F4      :break;
               case VK_F5      :break;
               case VK_F6      :break;
               case VK_F7      :break;
               case VK_F8      :break;
               case VK_F9      :break;
               case VK_F10     :break;
               case VK_UP      :break;
               case VK_LEFT    :break;
               case VK_DOWN    :break;
               case VK_RIGHT   :break;
               case VK_DELETE  :break;
               case VK_INSERT  :break; 
               }
        }
return CFormView::PreTranslateMessage(pMsg);

}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// MeikingDish メッセージ ハンドラ
void LeftFormVew::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CControlPracticeDoc* pDoc = GetDocument();
int code=0;
//========================================================
switch(lHint){
case ID_FORM_LEFT_UPDATE_ID_OK_DIS:
code=0;
break;
case ID_FORM_LEFT_UPDATE_ID_CANCEL_DIS:
code=0;
break; //==================ビューが切り替わりが強要されました====================
case 0:
code=0;
break;
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void LeftFormVew::CStringDataMoveToStaticEriyaReset()
{
CString vs=_T(” “);
try{
for(int item=0;item<100;item++){
for(int isub=0;isub<8;isub++){
_tcsncpy_s(LeftFormVew_buffDim[item][isub],MAX_PATH,(LPCTSTR)vs,_TRUNCATE);
}
}
}catch(CMemoryException e){
e.ReportError();
e.Delete() ;
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void LeftFormVew::CStringDataMoveToStaticEriya(CString vs,int item,int isub)
{
try{
_tcsncpy_s(LeftFormVew_buffDim[item][isub],MAX_PATH,(LPCTSTR)vs,_TRUNCATE);
}catch(CMemoryException e){
e.ReportError();
e.Delete() ;
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void LeftFormVew::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CControlPracticeDoc* pDoc = GetDocument();

//========================================================

CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rcItem(lpDrawItemStruct->rcItem);
int nItem = lpDrawItemStruct->itemID  ;

//=============================================
LV_ITEM     lvi;
switch(lpDrawItemStruct->CtlID) {
        case IDC_LIST1:
                        lvi.mask = LVIF_TEXT | LVIF_IMAGE |LVIF_PARAM ; 
                        lvi.iSubItem =0;
                        //=========================================
                        lvi.iItem    =nItem;
                        lvi.pszText =LeftFormVew_buffDim[nItem][0];
                        CtlistControl1.SetItem(&lvi);
                        for(int sub=0;sub<7;sub++){
                                    CString sb=CtlistControl1.GetItemText(nItem,sub);
                                    if(sb!=(CString)LeftFormVew_buffDim[nItem][sub]){
                                                CtlistControl1.SetItemText(nItem,sub,LeftFormVew_buffDim[nItem][sub]);
                                                }
                                    }
                        //=========================================
                        List1RowListControl(pDC,nItem);
                        break;
        }

}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void LeftFormVew::List1RowListControl(CDC* pDC,int nItem)
{
CControlPracticeDoc* pDoc = GetDocument();

//=========================================================
COLORREF clrTextSave =pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
COLORREF clrBkSave = pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
//==================ブラシの初期化=========================    
CBrush cbrA,cbrB;
//RGB(255,241,0)  RGB(243,152,0) RGB(233,83,131) 
//RGB(143,195,31) RGB(0,153,217) RGB(237,109,70) 
cbrA.CreateSolidBrush(RGB(233, 83,131));
cbrB.CreateSolidBrush(RGB(255,255,255));
//=========================================================
CPen      pen;
CPen* pOldPen;
pen.CreatePen(PS_SOLID,1,LINE_COLOR);
pOldPen=pDC->SelectObject(&pen);
//=========================================================
CRect rcAllLabels;
CtlistControl1.GetItemRect(nItem, rcAllLabels, LVIR_BOUNDS);
//=========================================================
CRect lRect,rc;
pDC->SetTextColor(RGB(0,0,0));
//=========================================================
int topIndex=CtlistControl1.GetTopIndex();            //表示の先頭nItem
int nLast = topIndex+CtlistControl1.GetCountPerPage();//表示の後端nItem

}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void LeftFormVew::OnBnClickedOk()
{
CControlPracticeDoc* pDoc = GetDocument();
pDoc->FormVewNmcer|=0x11 ;
CWnd* pWnd=AfxGetMainWnd() ;
pWnd->SendMessage(ID_VEW_CHENGER);
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void LeftFormVew::OnBnClickedCancel()
{
CControlPracticeDoc* pDoc = GetDocument();
pDoc->FormVewNmcer|=0x12 ;
CWnd* pWnd=AfxGetMainWnd() ;
pWnd->SendMessage(ID_VEW_CHENGER);
}