⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treectrlenhanced.cpp

📁 mtk simulator v2 new source code
💻 CPP
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
// TreeCtrlEnhanced.cpp : implementation file
//

#include "stdafx.h"
#include "QMMINWSimulator.h"
#include "TreeCtrlEnhanced.h"
#include "GlobalConstants.h"


// CTreeCtrlEnhanced

IMPLEMENT_DYNAMIC(CTreeCtrlEnhanced, CTreeCtrl)
CTreeCtrlEnhanced::CTreeCtrlEnhanced()
{
	m_CheckBoxOperationStatus=1;
}

CTreeCtrlEnhanced::~CTreeCtrlEnhanced()
{
}


BEGIN_MESSAGE_MAP(CTreeCtrlEnhanced, CTreeCtrl)
	ON_WM_LBUTTONDOWN()
	ON_MESSAGE(WM_CHECKUNCHECK,RouterFunction)
	ON_MESSAGE(HANDLE_DOWN_ARROW_KEY,HandleDownArrowKey)
	ON_MESSAGE(HANDLE_UP_ARROW_KEY,HandleUpArrowKey)
	ON_MESSAGE(HANDLE_LEFT_ARROW_KEY,HandleLeftArrowKey)
	ON_MESSAGE(HANDLE_RIGHT_ARROW_KEY,HandleRightArrowKey)
	ON_MESSAGE(HANDLE_SPACEBAR,HandleSpacebar)
	ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()


void CTreeCtrlEnhanced::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: Add your message handler code here and/or call default

	CTreeCtrl::OnLButtonDown(nFlags, point);
    UINT flags = 0 ;

	HTREEITEM hitem = HitTest ( point, &flags ) ;

	if (m_CheckBoxOperationStatus==1)
	{
	if(hitem)
	{
		int flag = GetCheck(hitem);
		if(flag != previous_state)
		{
		SetCheckBoxState(hitem,flag);
		SetParentalCheckState(hitem,flag);
				GetParent()->SendMessage(WM_ENABLE_SAVE_BUTTON,0,0);
	}
	}
	SelectItem(hitem);
	GetParent()->SendMessage(WM_SENDVALUE,0,(LPARAM)&hitem);
	}
	else // now checkbox buttons are not functional
	{
		SetCheck(hitem,previous_state);
		SelectItem(hitem);
		GetParent()->SendMessage(WM_SENDVALUE,0,(LPARAM)&hitem);
	}
}

void CTreeCtrlEnhanced::SetCheckBoxState(HTREEITEM item,int flag)
{
	
	HTREEITEM child = GetChildItem(item);
	while(child!= NULL)
	{
		SetCheck(child,flag);
		SetCheckBoxState(child,flag);
		child = GetNextSiblingItem(child);
	}

}

/*---------------- Capture Space Bar for Tree Check Box----------------*/


BOOL CTreeCtrlEnhanced::PreTranslateMessage(MSG *pMsg)
{
	HTREEITEM SelectedItem;
	if(pMsg->message == WM_KEYDOWN)
	{

		if(pMsg->wParam == VK_SPACE)
		{
			if(m_CheckBoxOperationStatus==1)
			{
	        SelectedItem = GetSelectedItem();
	        int flag = GetCheck(SelectedItem);
	        SetCheckBoxState(SelectedItem,!(flag));
            PostMessage(WM_CHECKUNCHECK,0,0);
				GetParent()->SendMessage(WM_ENABLE_SAVE_BUTTON,0,0);
				//PostMessage(HANDLE_SPACEBAR,0,(LPARAM)&SelectedItem);
		}
			else
			{
				return 1; // To make sapce bar unoperational on Check Box
			}
		}
		
		if(pMsg->wParam == VK_DOWN)
		{
	        PostMessage(HANDLE_DOWN_ARROW_KEY,0,0);
		}
		
		if(pMsg->wParam == VK_UP)
		{
	        PostMessage(HANDLE_UP_ARROW_KEY,0,0);
		}

		if(pMsg->wParam == VK_LEFT)
		{
	        PostMessage(HANDLE_LEFT_ARROW_KEY,0,0);
		}

		if(pMsg->wParam == VK_RIGHT)
		{
	        PostMessage(HANDLE_RIGHT_ARROW_KEY,0,0);
		}
	}

	if(pMsg->message == WM_CHAR) PostMessage(HANDLE_DOWN_ARROW_KEY,0,0);

	return 0;
}

LRESULT CTreeCtrlEnhanced::HandleDownArrowKey(WPARAM wp, LPARAM lp)
{
	HTREEITEM SelectedItem = GetSelectedItem();
	GetParent()->SendMessage(WM_SENDVALUE,0,(LPARAM)&SelectedItem);
	return 0;

}

LRESULT CTreeCtrlEnhanced::HandleRightArrowKey(WPARAM wp, LPARAM lp)
{
	HTREEITEM SelectedItem = GetSelectedItem();
	GetParent()->SendMessage(WM_SENDVALUE,0,(LPARAM)&SelectedItem);
	return 0;

}

LRESULT CTreeCtrlEnhanced::HandleUpArrowKey(WPARAM wp, LPARAM lp)
{
	HTREEITEM SelectedItem = GetSelectedItem();
	GetParent()->SendMessage(WM_SENDVALUE,0,(LPARAM)&SelectedItem);
	return 0;
}

LRESULT CTreeCtrlEnhanced::HandleLeftArrowKey(WPARAM wp, LPARAM lp)
{
	HTREEITEM SelectedItem = GetSelectedItem();
	GetParent()->SendMessage(WM_SENDVALUE,0,(LPARAM)&SelectedItem);
	return 0;
}

LRESULT CTreeCtrlEnhanced::HandleSpacebar(WPARAM wp, LPARAM lp)
{
	if (m_CheckBoxOperationStatus==1)
	{
	HTREEITEM SelectedItem = GetSelectedItem();
	GetParent()->SendMessage(WM_SENDVALUE,0,(LPARAM)&SelectedItem);
	return 0;
}
}

LRESULT CTreeCtrlEnhanced::RouterFunction(WPARAM wp, LPARAM lp)
{
	HTREEITEM item = GetSelectedItem();
	int flag = GetCheck(item);
    SetParentalCheckState(item,flag); 
	return 0;
}


void CTreeCtrlEnhanced::SetParentalCheckState(HTREEITEM item, int flag)
{
    if(flag)
	{
      HTREEITEM parent = GetParentItem(item); 
	 if(parent)
	 {
	     SetCheck(parent,flag);
	     SetParentalCheckState(parent,flag);
	 }
	}
	else
	{
        HTREEITEM parent = GetParentItem(item);
        HTREEITEM sibling = GetChildItem(parent);
		while(sibling)
		{
			if(GetCheck(sibling))
				break;
			else
				sibling = GetNextSiblingItem(sibling);
		}
		if(!sibling)
		{
			if(parent)
			{
				SetCheck(parent,flag);
				SetParentalCheckState(parent,flag);
			}
		}
	}

}
void CTreeCtrlEnhanced::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: Add your message handler code here and/or call default

	CTreeCtrl::OnMouseMove(nFlags, point);
	HTREEITEM item = HitTest(point,NULL);
	if(item)
	{
		previous_state = GetCheck(item);
	}
}

void CTreeCtrlEnhanced::SetCheckButtonOperatable(int CheckBoxStatus)
{
     m_CheckBoxOperationStatus=CheckBoxStatus;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -