#include "afxwin.h"
class CMainWnd : public CFrameWnd
{
public:
CMainWnd();
afx_msg void OnPaint();
private:
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMainWnd,CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
CMainWnd::CMainWnd()
{
Create(NULL,"gistogr",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL);
}
void CMainWnd::OnPaint()
{
CPaintDC dc(this);
// Гістограма
int L1,L2;
// Область перегляду
int vp_4_x1;
int vp_4_x2;
int vp_4_y1;
int vp_4_y2;
// Область для стовпчика
int St_x1;
int St_x2;
int St_y1;
int St_y2;
// Відступ для рамки
int FrameD=2;
// Відступ для рамки стовпчика
int FrameD_St=1;
// Кількість стовпчиків
int N_St=20;
// Вхідний масив
float m[200+1];
// Найбільший та найменший елемент
float m_max;
float m_min;
// Задаємо область перегляду
vp_4_x1=50;
vp_4_x2=640;
vp_4_y1=100;
vp_4_y2=240;
// Зображуємо область перегляду
dc.MoveTo(vp_4_x1-FrameD,vp_4_y1-FrameD);
dc.LineTo(vp_4_x2+FrameD,vp_4_y1-FrameD);
dc.LineTo(vp_4_x2+FrameD,vp_4_y2+FrameD);
dc.LineTo(vp_4_x1-FrameD,vp_4_y2+FrameD);
dc.LineTo(vp_4_x1-FrameD,vp_4_y1-FrameD);
// Пошук найбільшого та найменшого елементу
m_max=m[1];
m_min=m[1];
for(i=1; i<=N_St; i++)
{
if(m[i]>=m_max)
{
m_max=m[i];
};
if(m[i]<=m_min)
{
m_min=m[i];
};
};
// Зображуємо стовпчики
for(i=1; i<=N_St; i++)
{
// Задаємо область стовпчику
St_x1=vp_4_x1+FrameD_St+(i-1)*((float)(vp_4_x2-vp_4_x1)/N_St);
St_x2=vp_4_x1-FrameD_St+i*((float)(vp_4_x2-vp_4_x1)/N_St);
St_y1=vp_4_y1+FrameD_St;
St_y2=vp_4_y2-FrameD_St;
St_y1=St_y2-(St_y2-St_y1)*((m[i]-m_min)/(m_max-m_min));
// Малюємо стовпчик
L1=St_x1;
while(L1<=St_x2)
{
L2=St_y1;
while(L2<=St_y2)
{
dc.SetPixel(L1,L2,RGB(200,0,0));
L2++;
};
L1++;
};
// Чотири точки
dc.SetPixel(vp_4_x1+FrameD_St+(i-1)*((float)(vp_4_x2-vp_4_x1)/N_St),vp_4_y1+FrameD_St,RGB(0,0,0));
dc.SetPixel(vp_4_x1+FrameD_St+(i-1)*((float)(vp_4_x2-vp_4_x1)/N_St),vp_4_y2-FrameD_St,RGB(0,0,0));
dc.SetPixel(vp_4_x1-FrameD_St+i*((float)(vp_4_x2-vp_4_x1)/N_St),vp_4_y1+FrameD_St,RGB(0,0,0));
dc.SetPixel(vp_4_x1-FrameD_St+i*((float)(vp_4_x2-vp_4_x1)/N_St),vp_4_y2-FrameD_St,RGB(0,0,0));
}
}
class CGistogrApp : public CWinApp
{
public:
CGistogrApp();
virtual BOOL InitInstance();
};
CGistogrApp::CGistogrApp()
{}
BOOL CGistogrApp::InitInstance()
{
m_pMainWnd=new CMainWnd();
ASSERT(m_pMainWnd);
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
};
CGistogrApp GistogrApp;