Hist

#include <WINDOWS.H>
#include <STDIO.H>
#include <IOSTREAM.H>

PAINTSTRUCT ps;

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam)
{
    static int l[256];

	switch(msg)
	{
	case WM_CREATE:
		{
			unsigned char* image=new unsigned char[512*512];
			FILE* fp=fopen("D:\\new.bmp","rb");
			int end=sizeof(BITMAPINFOHEADER)+sizeof(BITMAPFILEHEADER)+sizeof(RGBQUAD)*256;
			unsigned char buffer;
			for(int i=0;i<end;i++)
				fread(&buffer,1,1,fp);
			fread(image,1,512*512,fp);
			fclose(fp);

			ZeroMemory(l,256*4);
			unsigned char* pstart=image;
			unsigned char* pend=pstart+512*512;
			//
			//对于while/for循环,要保证其操作数据的正确性
			//1,首次运行正确
			//2,结束状态正确 
			//3,递推过程正确
			//
			while(pstart<pend)
				l[(int)*pstart++]++;
			return 0;
		}
	case WM_PAINT:
		{
			HDC hdc=BeginPaint(hWnd,&ps);
			
			SelectObject(hdc,CreatePen(PS_SOLID,3,0));//CreatePen():自定义画笔的类型
			MoveToEx(hdc,200,300,NULL);
			LineTo(hdc,200,160);
			MoveToEx(hdc,200,300,NULL);
			LineTo(hdc,456,300);
			
			SelectObject(hdc,GetStockObject(BLACK_PEN));
			for(int i=0;i<256;i++)
			{
				MoveToEx(hdc,200+i,300,NULL);
				LineTo(hdc,200+i,300-l[i]/20);
			}

			EndPaint(hWnd,&ps);
			return 0; 
		}
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hWnd,msg,wParam,lParam);
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
	WNDCLASSEX wc;
	wc.cbClsExtra=0;
	wc.cbSize=sizeof(WNDCLASSEX);
	wc.cbWndExtra=NULL;
	wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.hCursor=LoadCursor(NULL,IDC_ARROW);
	wc.hIcon=NULL;
	wc.hIconSm=NULL;
	wc.hInstance=hInstance;
	wc.lpfnWndProc=WndProc;
	wc.lpszClassName="HIST";
	wc.lpszMenuName=NULL;
	wc.style=CS_HREDRAW|CS_VREDRAW;
	RegisterClassEx(&wc);

	HWND hWnd=CreateWindow("HIST","hist graph",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,640,480,NULL,NULL,hInstance,NULL);
	if(!hWnd) return 0;	
	ShowWindow(hWnd,SW_SHOW);
	UpdateWindow(hWnd);

	MSG msg;

	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

		return 1;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值