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

📄 myview.cpp

📁 随着计算机信息技术的飞速发展
💻 CPP
字号:
// MyView.cpp : 实现文件
//

#include "stdafx.h"
#include "MyView.h"

// CMyView

IMPLEMENT_DYNCREATE(CMyView, CScrollView)

CMyView::CMyView()
{
}

CMyView::~CMyView()
{
}

CMyView::CMyView(HWND hWnd,int w,int h)
{
	m_hMaster=hWnd;
	m_Width=w;
	m_Height=h;
}

BEGIN_MESSAGE_MAP(CMyView, CScrollView)
	ON_WM_DESTROY()
	ON_WM_CREATE()
END_MESSAGE_MAP()

// CMyView 绘图

void CMyView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CSize sizeTotal;
	// TODO: 计算此视图的总大小
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
}

void CMyView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: 在此添加绘制代码
}

// CMyView 诊断

#ifdef _DEBUG
void CMyView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CMyView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}
#endif //_DEBUG

// CMyView 消息处理程序

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CScrollView::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码
	m_PanelCount=0;

	return 0;
}

void CMyView::OnDestroy()
{
	CScrollView::OnDestroy();

	// TODO: 在此添加消息处理程序代码
	if(m_PanelCount>0)
	{
		for(int i=0;i<m_PanelCount;++i)
			delete m_pMyPanel[i];
	}
}

int CMyView::AddPanel(int PanelID,LPCTSTR tip[],int ItemCount,int top)
{
	int bottom;
	RECT rect;

	GetClientRect(&rect);
	rect.right-=(20-2);
	
	m_pMyPanel[PanelID]=new CMyPanel(m_hWnd,tip,ItemCount);
	m_PanelPos[m_PanelCount++]=top;
	bottom=top+30*ItemCount;
	SetRect(&rect,0,top,rect.right,bottom);
	m_pMyPanel[PanelID]->Create(0,0,WS_BORDER|WS_CHILD|WS_VISIBLE,
		rect,this,PanelID+0x1001);
	
	return(bottom);
}

void CMyView::ResizeView(int cx,int cy,int w,int h)
{
	CSize size;
	
	size.cx=cx;
	size.cy=cy;
	SetScrollSizes(MM_TEXT,size);

	if(cy<h)
	{
		w-=(20-2);
		SetWindowPos(0,0,0,w,h,SWP_NOMOVE);
	}
}

LRESULT CMyView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	// TODO: 在此添加专用代码和/或调用基类
	LONG PanelID=(LONG)lParam-0x1001;
	LONG PanelState=(LONG)wParam;
	CSize size;
	CPoint pt;
	RECT rect;
	int h,i;

	switch(message)
	{
		case WM_COLLAPSEPANELS:
			pt=GetScrollPosition();
			for(i=PanelID+1;i<m_PanelCount;++i)
			{
				m_PanelPos[i]-=30;
				m_pMyPanel[i]->SetWindowPos(0,0,m_PanelPos[i]-pt.y,0,0,SWP_NOSIZE);
			}
			ScalePanel();
			break;
		
		case WM_EXPANDPANELS:
			pt=GetScrollPosition();
			for(i=m_PanelCount-1;i>PanelID;--i)
			{
				m_PanelPos[i]+=30;
				m_pMyPanel[i]->SetWindowPos(0,0,m_PanelPos[i]-pt.y,0,0,SWP_NOSIZE);
			}
			ScalePanel();
			break;
			
		case WM_SCALEFINISH:
			::GetWindowRect(m_pMyPanel[m_PanelCount-1]->m_hWnd,&rect);
			h=rect.bottom-rect.top+m_PanelPos[m_PanelCount-1];
			if(h<m_Height) SetWindowPos(0,0,0,m_Width-(20-2),m_Height,SWP_NOMOVE);
			else SetWindowPos(0,0,0,m_Width,m_Height,SWP_NOMOVE);
			break;
			
		case WM_CLICKTEXT:
			::SendMessage(m_hMaster,WM_CLICKTEXT,wParam,lParam);
			break;

		default:
			break;
	}

	return CScrollView::WindowProc(message, wParam, lParam);
}

void CMyView::ScalePanel()
{
	CSize size;
	RECT rect;

	::GetWindowRect(m_pMyPanel[m_PanelCount-1]->m_hWnd,&rect);
	size.cx=rect.right-rect.left;
	size.cy=rect.bottom-rect.top+m_PanelPos[m_PanelCount-1];
	SetScrollSizes(MM_TEXT,size);
}

⌨️ 快捷键说明

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