MFC编程问题求助
我建立的是一个基于对话框的程序,其中包括一个Picture控件(IDC_STATIC_HeightHist),和一个Button控件。我希望能在点击按钮后在Picture...
我建立的是一个基于对话框的程序,其中包括一个Picture控件(IDC_STATIC_HeightHist),和一个Button控件。我希望能在点击按钮后在Picture中显示出高程直方图。
【现在遇到的困难是】:编译通过,点击按钮后Picture中无任何变化。不知道是不是确少了什么函数?另外我的图像显示代码不是在OnPaint函数中,而是放在了按钮消息响应函数里,不知道行不行?
下面是我的代码:
void CHeightHistDlg::OnBUTTONPrintHist()
{
CPaintDC dc(this);
//获取直方图绘制静态框的矩形区域
CRect clientRect;
GetDlgItem(IDC_STATIC_HeightHist)->GetWindowRect(&clientRect);
ScreenToClient(&clientRect);
// BeginWaitCursor();
//画背景
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(clientRect.left,clientRect.top-5,clientRect.right,clientRect.bottom+1);//【是否问题出在参数设置上?】
//画直方图灰度频率与直方图绘制矩形区域比例关系,画直方图
long maxNumOneSect=0; //m_SectionNum是划分的级别数量,maxNumOneSect是某级别中的最大值
for(i=0;i<m_SectionNum;i++)
{
if(*(p_NumPerSection+i)>maxNumOneSect)
maxNumOneSect=*(p_NumPerSection+i);
}
DWORD *bufTemp=NULL;
bufTemp=new DWORD[m_SectionNum];
double x=clientRect.Height();
for(i=0;i<m_SectionNum;i++)
{
*(bufTemp+i)=(unsigned long)((float)(*(p_NumPerSection+i))*x/maxNumOneSect);
}
for(i=clientRect.left;i<=clientRect.right;i++)
{
dc.MoveTo(i,clientRect.bottom);
dc.LineTo(i,clientRect.bottom-*(bufTemp+i-clientRect.left));
}
CString str;
SetBkMode(dc,1);
str.Format("%ld",m_zMin);
dc.TextOut(clientRect.left,clientRect.bottom+1,str);
str.Format("%ld",m_zMax);
dc.TextOut(clientRect.left+m_SectionNum,clientRect.bottom+1,str);
// EndWaitCursor();
}
备注:忘了说了,高程直方图和图像的灰度直方图类似,是将点云三维坐标的Z坐标当做是灰度那一维来参与统计。可根据实际设定来划分若干等级,而非灰度的256等级。
我写这部分代码参考的是图像灰度直方图的代码,可能改的时候会存在问题,希望您一并指出。谢谢! 展开
【现在遇到的困难是】:编译通过,点击按钮后Picture中无任何变化。不知道是不是确少了什么函数?另外我的图像显示代码不是在OnPaint函数中,而是放在了按钮消息响应函数里,不知道行不行?
下面是我的代码:
void CHeightHistDlg::OnBUTTONPrintHist()
{
CPaintDC dc(this);
//获取直方图绘制静态框的矩形区域
CRect clientRect;
GetDlgItem(IDC_STATIC_HeightHist)->GetWindowRect(&clientRect);
ScreenToClient(&clientRect);
// BeginWaitCursor();
//画背景
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(clientRect.left,clientRect.top-5,clientRect.right,clientRect.bottom+1);//【是否问题出在参数设置上?】
//画直方图灰度频率与直方图绘制矩形区域比例关系,画直方图
long maxNumOneSect=0; //m_SectionNum是划分的级别数量,maxNumOneSect是某级别中的最大值
for(i=0;i<m_SectionNum;i++)
{
if(*(p_NumPerSection+i)>maxNumOneSect)
maxNumOneSect=*(p_NumPerSection+i);
}
DWORD *bufTemp=NULL;
bufTemp=new DWORD[m_SectionNum];
double x=clientRect.Height();
for(i=0;i<m_SectionNum;i++)
{
*(bufTemp+i)=(unsigned long)((float)(*(p_NumPerSection+i))*x/maxNumOneSect);
}
for(i=clientRect.left;i<=clientRect.right;i++)
{
dc.MoveTo(i,clientRect.bottom);
dc.LineTo(i,clientRect.bottom-*(bufTemp+i-clientRect.left));
}
CString str;
SetBkMode(dc,1);
str.Format("%ld",m_zMin);
dc.TextOut(clientRect.left,clientRect.bottom+1,str);
str.Format("%ld",m_zMax);
dc.TextOut(clientRect.left+m_SectionNum,clientRect.bottom+1,str);
// EndWaitCursor();
}
备注:忘了说了,高程直方图和图像的灰度直方图类似,是将点云三维坐标的Z坐标当做是灰度那一维来参与统计。可根据实际设定来划分若干等级,而非灰度的256等级。
我写这部分代码参考的是图像灰度直方图的代码,可能改的时候会存在问题,希望您一并指出。谢谢! 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询