[ create a new paste ] login | about

Link: http://codepad.org/UJmwRiyz    [ raw code | fork ]

C++, pasted on Jul 25:
#include <windows.h>
#include <tchar.h>

const int WINDOW_WIDTH = 500;
const int WINDOW_HEIGHT = 500;

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);

const int Num = 1000;
double g_x[Num];
double g_y[Num];

double MyRandom(){
	//0.0~10.0のランダムを発生
	//rand()は初期化してないので何度プログラムを実行しても同じ結果
	return static_cast<double>(rand()) / static_cast<double>(RAND_MAX) * 10.0;
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
	//数値計算
	ZeroMemory(g_x,sizeof(g_x));//一応初期化
	ZeroMemory(g_y,sizeof(g_y));

	for(int i = 0 ; i < Num ; ++i){
		g_x[i] = MyRandom();
		g_y[i] = MyRandom();
	}

	WNDCLASSEX wc;
	HWND hWnd;
	MSG msg;

	// ウィンドウクラスの情報を設定
	wc.cbSize = sizeof(wc);               // 構造体サイズ
	wc.style = CS_HREDRAW | CS_VREDRAW;   // スタイル
	wc.lpfnWndProc = WndProc;             // ウィンドウプロシージャ
	wc.cbClsExtra = 0;                    // 拡張情報1
	wc.cbWndExtra = 0;                    // 拡張情報2
	wc.hInstance = hInst;                 // インスタンスハンドル
	wc.hIcon = (HICON)LoadImage(          // アイコン
		NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON,
		0, 0, LR_DEFAULTSIZE | LR_SHARED
	);
	wc.hIconSm = wc.hIcon;                // 子アイコン
	wc.hCursor = (HCURSOR)LoadImage(      // マウスカーソル
		NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR,
		0, 0, LR_DEFAULTSIZE | LR_SHARED
	);
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景
	wc.lpszMenuName = NULL;                     // メニュー名
	wc.lpszClassName = _T("Default Class Name");// ウィンドウクラス名
	
	// ウィンドウクラスを登録する
	if( RegisterClassEx( &wc ) == 0 ){ return 1; }


	DWORD WndStyle = WS_OVERLAPPEDWINDOW & ~(WS_MAXIMIZEBOX | WS_SIZEBOX);
	RECT WndRect={0, 0,WINDOW_WIDTH,WINDOW_HEIGHT};

	AdjustWindowRect( &WndRect, WndStyle, false );

	// ウィンドウを作成する
	hWnd = CreateWindow(
		wc.lpszClassName,      // ウィンドウクラス名
		_T("散布図"),  // タイトルバーに表示する文字列
		WndStyle,   // ウィンドウの種類
		CW_USEDEFAULT,         // ウィンドウを表示する位置(X座標)
		CW_USEDEFAULT,         // ウィンドウを表示する位置(Y座標)
		WndRect.right-WndRect.left,         // ウィンドウの幅
		WndRect.bottom-WndRect.top,         // ウィンドウの高さ
		NULL,                  // 親ウィンドウのウィンドウハンドル
		NULL,                  // メニューハンドル
		hInst,                 // インスタンスハンドル
		NULL                   // その他の作成データ
	);
	if( hWnd == NULL ){ return 1; }

	// ウィンドウを表示する
	ShowWindow( hWnd, SW_SHOW );
	UpdateWindow( hWnd );

	// メッセージループ
	while(1)
	{
		BOOL ret = GetMessage( &msg, NULL, 0, 0 );  // メッセージを取得する
		if( ret == 0 || ret == -1 )
		{
			// アプリケーションを終了させるメッセージが来ていたら、
			// あるいは GetMessage() が失敗したら( -1 が返されたら )、ループを抜ける
			break;
		}
		else
		{
			// メッセージを処理する
			TranslateMessage( &msg );
			DispatchMessage( &msg );
		}
	}

	return 0;
}

// ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
	HDC hDC;
	PAINTSTRUCT ps;

	switch( msg )
	{
	case WM_DESTROY:  // ウィンドウを破棄するとき
		PostQuitMessage( 0 );
		return 0;
	case WM_PAINT:
		//描画
		/*
		左下の端の座標を(0.0,0.0)
		右上の端の座標を(10.0,10.0)
		として描画
		*/
		hDC = BeginPaint(hWnd,&ps);//GDI関数による描画を開始する

			for(int i = 0 ; i < Num ; ++i){
				int x,y;
				x = static_cast<int>(g_x[i] / 10.0 * WINDOW_WIDTH);//まあ素直に書いた 0.0~10.0 を 0~500の間に収める
				y = static_cast<int>(g_y[i] / 10.0 * WINDOW_HEIGHT);

				//スクリーン座標は→+x ↓+yなのでyを調整
				y = WINDOW_HEIGHT - y;//

				SetPixelV(hDC,x,y,RGB(0,0,0)); //に黒い点を描画
			}
		EndPaint(hWnd,&ps);    
		return 0;
	}

	// 他のメッセージは、デフォルトの処理を行う
	return DefWindowProc( hWnd, msg, wp, lp );
}


Create a new paste based on this one


Comments: