代码如下:
// 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);
}
}
12 个解决方案
#1
在64位Windows下:
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;
所以要注意:
在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。
且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe
在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe
64 位 Windows 平台注意点之文件系统重定向 http://www.cnblogs.com/jiake/p/4981555.html
64 位 Windows 平台注意点之注册表重定向 http://www.cnblogs.com/jiake/p/4956218.html
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;
所以要注意:
在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。
且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe
在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe
64 位 Windows 平台注意点之文件系统重定向 http://www.cnblogs.com/jiake/p/4981555.html
64 位 Windows 平台注意点之注册表重定向 http://www.cnblogs.com/jiake/p/4956218.html
#2
#3
怀疑你控件未正确注册。
#4
我把画图的代码删掉 控件就全部显示了呀
#5
把画图的代码 放 Tab 里
#6
一般都是在Tab中放置子对话框页,绘制/控件都一般放在子页上
#7
我知道 想偷懒
#8
赵4老师 我代码里加了个对话框 发现对话框一直跳 估计是一直在刷新 所以显示不出来 请问有什么办法吗
#9
学会使用Spy++软件?
#10
百度搜相关关键字?
#11
在 对话框中 给 控件绘图 要先 控件.UpdateWindow
1 CDialog::OnPaint(); 不但 绘对话框 还使 各 控件 窗口 无效
2 各控件的 绘制,在 对话框退出 paint 后,
3 所以 在对话框中 绘制 控件 必须 先 UpdateWindow() 让 控件 窗口有效。
即
m_ChannelTab.UpdateWindow();// 重要 !
// TODO: Add your message handler code here
m_ChannelTab.UpdateWindow();// 重要 !
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);
1 CDialog::OnPaint(); 不但 绘对话框 还使 各 控件 窗口 无效
2 各控件的 绘制,在 对话框退出 paint 后,
3 所以 在对话框中 绘制 控件 必须 先 UpdateWindow() 让 控件 窗口有效。
即
m_ChannelTab.UpdateWindow();// 重要 !
#12
好厉害
#1
在64位Windows下:
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;
所以要注意:
在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。
且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe
在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe
64 位 Windows 平台注意点之文件系统重定向 http://www.cnblogs.com/jiake/p/4981555.html
64 位 Windows 平台注意点之注册表重定向 http://www.cnblogs.com/jiake/p/4956218.html
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;
所以要注意:
在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。
且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe
在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe
64 位 Windows 平台注意点之文件系统重定向 http://www.cnblogs.com/jiake/p/4981555.html
64 位 Windows 平台注意点之注册表重定向 http://www.cnblogs.com/jiake/p/4956218.html
#2
#3
怀疑你控件未正确注册。
#4
我把画图的代码删掉 控件就全部显示了呀
#5
把画图的代码 放 Tab 里
#6
一般都是在Tab中放置子对话框页,绘制/控件都一般放在子页上
#7
我知道 想偷懒
#8
赵4老师 我代码里加了个对话框 发现对话框一直跳 估计是一直在刷新 所以显示不出来 请问有什么办法吗
#9
学会使用Spy++软件?
#10
百度搜相关关键字?
#11
在 对话框中 给 控件绘图 要先 控件.UpdateWindow
1 CDialog::OnPaint(); 不但 绘对话框 还使 各 控件 窗口 无效
2 各控件的 绘制,在 对话框退出 paint 后,
3 所以 在对话框中 绘制 控件 必须 先 UpdateWindow() 让 控件 窗口有效。
即
m_ChannelTab.UpdateWindow();// 重要 !
// TODO: Add your message handler code here
m_ChannelTab.UpdateWindow();// 重要 !
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);
1 CDialog::OnPaint(); 不但 绘对话框 还使 各 控件 窗口 无效
2 各控件的 绘制,在 对话框退出 paint 后,
3 所以 在对话框中 绘制 控件 必须 先 UpdateWindow() 让 控件 窗口有效。
即
m_ChannelTab.UpdateWindow();// 重要 !
#12
好厉害