📄 myview.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 + -