Tab Control要鼠标点击到才显示 求解决方法
代码如下:
// RainDropDlg.cpp : implementation file
//
#include "stdafx.h"
#include "RainDropDlg.h"
#include "afxdialogex.h"
// CRainDropDlg dialog
IMPLEMENT_DYNAMIC(CRainDropDlg, CDialogEx)
CRainDropDlg::CRainDropDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CRainDropDlg::IDD, pParent)
{
}
CRainDropDlg::~CRainDropDlg()
{
}
void CRainDropDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TAB_CHANNEL, m_ChannelTab);
}
BEGIN_MESSAGE_MAP(CRainDropDlg, CDialogEx)
ON_WM_PAINT()
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_CHANNEL, &CRainDropDlg::OnTcnSelchangeTabChannel)
END_MESSAGE_MAP()
// CRainDropDlg message handlers
BOOL CRainDropDlg::OnInitDialog()
{
CDialog::OnInitDialog();
int i;
for (i = 0; i < m_pChannel.GetCount(); i++)
{
m_ChannelTab.InsertItem(i, m_pChannel[i]->m_strChannelName);
}
return TRUE;
}
void CRainDropDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
if (IsIconic())
{
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
// TODO: Add your message handler code here
CRect TabRect;
m_ChannelTab.GetClientRect(TabRect);
m_ChannelTab.AdjustRect(FALSE, TabRect);
TabRect.bottom = TabRect.bottom - 20;
CDC *cdc;
cdc=m_ChannelTab.GetDC();
CPen pen;
pen.CreatePen(PS_SOLID, 1, RGB(255, 125, 0));
cdc->SelectObject(&pen);
cdc->MoveTo(20, 40);
cdc->LineTo(20, TabRect.bottom);
cdc->LineTo((int)(TabRect.right*0.5 - 20), TabRect.bottom);
DrawXAxis(cdc, TabRect);
DrawBarGraph(cdc, TabRect);
ReleaseDC(cdc);
// Do not call CDialogEx::OnPaint() for painting messages
}
void CRainDropDlg::DrawXAxis(CDC *pDC,CRect rect)
{
CPen pen;
pen.CreatePen(PS_SOLID, 1, RGB(125, 125, 125));
pDC->SelectObject(pen);
int i,deltaX,perBlockLength;//deltaX 每个柱状图相差X轴长度
int nCh = m_ChannelTab.GetCurSel();
deltaX = (rect.Width()*0.5 - 90) / m_pChannel[nCh]->m_pRainDropChart[1]->m_nBlocks;
perBlockLength = deltaX-5;
//刻度
for (i = 0; i <= m_pChannel[nCh]->m_pRainDropChart[1]->m_nBlocks; i = i++)
{
pDC->MoveTo(25 + deltaX*i, rect.bottom);
pDC->LineTo(25 + deltaX*i, rect.bottom - 2);
pDC->MoveTo(25 + deltaX*i + perBlockLength, rect.bottom);
pDC->LineTo(25 + deltaX*i + perBlockLength, rect.bottom - 2);
}
}
void CRainDropDlg::DrawBarGraph(CDC *pDC,CRect rect)
{
int i, deltaX, perBlockLength;//deltaX 每个柱状图相差X轴长度
int nChIdx = m_ChannelTab.GetCurSel();
deltaX = (rect.Width()*0.5 - 90) / m_pChannel[nChIdx]->m_pRainDropChart[1]->m_nBlocks;
perBlockLength = deltaX - 5;
for (i = 0; i <= m_pChannel[nChIdx]->m_pRainDropChart[1]->m_nBlocks; i = i++)
{
pDC->MoveTo(25 + deltaX*i, rect.bottom);
pDC->LineTo(25 + deltaX*i, rect.bottom - m_pChannel[nChIdx]->m_pRainDropChart[1]->m_pBlock[i]->m_nCycles);
pDC->LineTo(25 + deltaX*i + perBlockLength, rect.bottom - m_pChannel[nChIdx]->m_pRainDropChart[1]->m_pBlock[i]->m_nCycles);
pDC->LineTo(25 + deltaX*i + perBlockLength, rect.bottom);
}
}