「RC」を含む日記 RSS

はてなキーワード: RCとは

2019-06-14

anond:20190612225831

うちもそんな感じ

書類上はRCマンションなのに、夜はTVだかYoutubeだかの声がいつまでも聞こえ、朝は隣の携帯バイアラーム振動音で目覚める

家賃比較的安いか我慢してるけどね

しかし防音がしっかりした壁ってどう判別すればいいんだ?

この物件の壁だって、叩くと木造のようにドンドン言うわけではなく「ボスッ…」と衝撃が吸収される感じがするから、これなら大丈夫だと思って契約したはずなんよ

2019-06-12

RC造なのに防音大ハズレ物件で大大大後悔

RC造なら防音は大丈夫だろうと思って築浅1Kに引っ越ししたら、これが大外れ。

結構家賃を奮発したんぞ。

かに部屋の主要部分は床が厚くて頼りがいのある質感だけれども、壁が木造かそれ以下の防音性で殺意しか感じない。

マジで、朝は隣人の目覚ましで起きるわけ。ピピピピッって。私の出勤時間まであと2時間あるんですけど。

それで、基本的キッチンへの扉や外への扉を閉める音が、ガチャドン!ってめっちゃ響く。

で、キッチン部分の床板が薄くて何か床下に反響しているっぽくて、RCなのに隣室の足音がドカドカ聞こえる。

そんでさ、土曜の朝はギュイーンて掃除機の音で起こされるわけ。実家かよ。こっちも掃除機使えないじゃないか

なんか大家族で同居してるかシェアハウス並みの気配を感じる。上京依頼ずっと独り暮らしで通してきたので、心落ち着かない。

不思議なことに、洗濯機の音や風呂の流水音は聞こえない。

夜は隣人はめちゃ笑ってる声が聞こえてくる。なにがそんなにおもろいねん?

ボイスチャットか何かをしてるっぽいけど会話の内容までは聞こえない。

昨晩はずいぶんと咳をしていたけど、体調大丈夫

時々隣人が壁にぶつかるドンっという音で、目が覚めたりする。いったいどうゆう生活したら壁にゴンゴンぶつける生活になるわけ?

早朝に大騒ぎしていたこともあったぞ。その日が有給じゃなかったら通報してたぞ。

こっちの音がどこまで隣人に聞こえてるのかちょっと不安なんだよね。こうやって夜中にキーボードつの迷惑だったりするんだろうか。普段ぶつぶつ独りごと行ったり鼻歌歌ってるのも聞こえてるんだろうか。一番困るのはオナってるのも気配で聞かれてたりするんだろうか。はあ耐えられないぞ。

はあ、また20万浪費かよ。絶対引っ越すぞ、次はちゃんと側面もコンクリになったちゃんとしたRC造りに住むぞ!!!!!

田舎地元不動産よ、震えて眠れ。

2019-05-30

2年で3回引っ越し

一軒目

天井ヤスデが出没 

しかも一回ではない毎日

虫が大の苦手な自分は耐えきれなくなり引越

二軒目

隣家がうるさい 音楽が丸聞こえ

仲介業者相談したが解決せず

勇気を出し直接文句を言ったがなぜか逆に悪化

三軒目

ネットで調べるとrc鉄筋なら音は聞こえないとドヤ顔で書き込んである

なら分かった多少値は貼るがしょうがないとrc鉄筋に引っ越し

が二軒目同様騒音問題

今度は足音(物音)である

音の大きさでは耳栓を突っ込めば聞こえなくなった二軒目とは違い三軒目は普通に聞こえる

24時間かいるのか知らんがずっと音がする

正直まともに寝ることもできない

同様に管理会社相談したが解決せず

20代もなかば独身男性であるが情けない話だがこの年でわんわんと泣いてしまった

自分の運のなさと社会理不尽さに

この書き込みも泣きに泣きつくして無の感情で書き込んでいる

日増しに目のクマも増えている

犯罪を犯す人はどんな気持ちなんだろうと思ってたけど最近なんとなく分かってきた気がする

生活の基盤である住居がストレスになるとこんなに"クる"ものだと思ってなかった

引っ越し検討している人 くれぐれも物件は慎重に選んでほしい

まあ不動産は嘘しか言わないが

(いや俺が不細工から悪いのであってイケメン美女ならまたいい物件を紹介してくれる可能性が高いかもしれない)

2019-05-14

anond:20190514224512

https://10mtv.jp/pc/column/article.php?column_article_id=2160

 1つ目は機会費用法という、家事をしていて仕事に出ていなかった時間を、もし賃金の出る仕事に充てていた場合報酬金額を算定する方法です。最低賃金に照らし合わせてみると、平成30年10月時点の最低賃金は全国平均で時給874円なので、1日6時間、365日で計算すると月15万7320円、年収は191万4060円となります

 2つ目はRC-S法という、その仕事職業にしている人の賃金に換算するものです。今回は家事代行サービスで働く人は平均時給が1185円とされています専業主婦家事に費やしている1日6時間家事代行業者の時給で計算してみると、月21万3300円、年収は259万5150円となります

 一方、別の調査結果となりますが、キリンビール株式会社平成28年9月専門家の監修のもとでおこなった「主婦年収シミュレーター」の調査結果によると、専業主婦主夫)が1日に家事に充てる時間は平均5.3時間、その年収はなんと469万8670円という金額になりました。この調査では一般企業給与体系、家事代行サービス市場価格、そして実際に家事を行う主婦主夫)の実感値を踏まえた独自ロジックから算出されたもの上記の結果と比べると、大きな差があることが分かります

 

家事を行う主婦主夫)の実感値を踏まえた独自ロジック

 

なるもの妄信できるセンスわからんなー

anond:20190514224754

都合のいいところだけ引っぱり出して引用するのはねつ造と変わらんぞ

全国の主婦主夫)の平均家事年収は、469万8670円という結果になりました。

家事代行サービスで働く人は平均時給が1185円とされています専業主婦家事に費やしている1日6時間家事代行業者の時給で計算してみると、月21万3300円、年収は259万5150円となります

1日平均6時間家事家事代行サービスに依頼すると、年間で438万円~657万円ものコストがかかることになります(1時間あたり2000~3000円相場から計算)。

 

元請単価月50万、月収18万のIT派遣年収600万みたいな計算やな

2019-01-24

anond:20190124075118

実家 木造一戸建て 1990年

特に気にならなかった。

2階建木造アパート 1973年築 1階角部屋

特に気にならなかった。隣室がしょっちゅう女連れ込んでたが何も聞こえたことなし。

2階建木造アパート 1980年築 1階

特に気にならなかった。自室に大人数で集まって騒ぐこともあったが、後日隣人に謝っても聞こえなかったと言われる。上階の洗濯機(室内)や掃除機だけは振動が伝わるのか聞こえた。

4階建RCマンション 1978年築 4階角部屋(現住居)

特に気にならないが、特別かになったとも思わない。部屋に隣接しているエレベーターが古くてうるさいので、その音だけは聞こえる。

まともな木造建築は存在する。2000年代以降は不明

2019-01-18

anond:20190118084824

RC(鉄筋コンクリート造)

SRC(鉄筋鉄骨コンクリート造)

・軽鉄(軽量鉄骨造)

・鉄骨造

その他たくさんあるぞ。

突っ込む前にググレよw ノータリンかwwww

2019-01-03

anond:20190103184241

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//

	int blocks[100][100];

	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		x = 0;
		y = 0;
		boxType = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		for(int x = 0 ; x < 100 ; x++)
		{
			for (int y = 0; y < 100; y++)
			{
				blocks[y][x] = 0;
			}
		}

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int x;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48*9,48 * 100 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	int boxType;

	BOOL WriteBoxOLDBox()
	{
		int width = 24;

		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 48));
		for (int y = 0; y < 30; y++)
		{
			for (int x = 0; x < 8; x++)
			{
				if (blocks[y][x] == 0)
				{
					continue;
				}

				RECT Rect = { 0,0,48,48 };
				BOOL ret;

				Rect.left = width * x + 1;
				Rect.right = width * (x + 1) - 1;
				Rect.top = width * y + 1;
				Rect.bottom = width * (y + 1) - 1;

				ret = FillRect(hdc, &Rect, hBrush);


			}
		}

		DeleteObject(hBrush);

		return FALSE;
	}


	BOOL WriteBox()
	{
		WriteBoxOLDBox();

		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

		}

		return TRUE;
	}

	BOOL WriteBoxZ()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left += width;
		Rect.right += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);


		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL WriteBoxL()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 246 , 48));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) -1 ;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) -1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top    += width; 
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left   += width;
		Rect.right  += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL WriteBoxI()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB( 246 , 48 , 48));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		//Rect.left   += width;
		//Rect.right  += width;
		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL SaveBoxI()
	{
		blocks[y  ][x] = 1;
		blocks[y+1][x] = 1;
		blocks[y+2][x] = 1;
		blocks[y+3][x] = 1;
		return TRUE;
	}


	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 20) {
			switch (boxType)
			{
			case 0:
				SaveBoxI();
				break;
			case 1:
				break;
			case 2:
				break;
			}

			y = 0;
			boxType++;
			if (boxType > 2)
			{
				boxType = 0;
			}
		}

		this->WriteBox();

		return TRUE;
	}



	BOOL OnKey(WPARAM wParam)
	{
		if (wParam == VK_LEFT)
		{
			x++;
		}
		if (wParam == VK_RIGHT)
		{
			x--;
		}
		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
		break;
	case WM_KEYDOWN:
		{
			MyWindow *target = MyWindow::find(hWnd);
			target->OnKey(wParam);
		}
	break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

anond:20190103170543

テトリス

落ちてくるブロックの描き方

わかりやす関数化してみた

まずはブロックの種類は3種類

 

WriteBoxLとWriteBoxIとWriteBoxZ

の違いをよく見比べて

自力で違いがわかれば

プログラマーにはなれるとおもう

とはいえ、コレを自力でわかるならもっと儲かる仕事あるとはおもうけどな

 

	BOOL WriteBox()
	{
		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

		}
	}
// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		x = 0;
		y = 0;
		boxType = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int x;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48*9,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	int boxType;

	BOOL WriteBox()
	{
		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

		}
	}

	BOOL WriteBoxZ()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left += width;
		Rect.right += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);


		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL WriteBoxL()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) -1 ;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) -1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top    += width; 
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left   += width;
		Rect.right  += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL WriteBoxI()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		//Rect.left   += width;
		//Rect.right  += width;
		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 8) {
			y = 0;
			boxType++;
			if (boxType > 2)
			{
				boxType = 0;
			}
		}

		this->WriteBox();

		return TRUE;
	}



	BOOL OnKey()
	{
		x++;
		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
		break;
	case WM_KEYDOWN:
		{
			MyWindow *target = MyWindow::find(hWnd);
			target->OnKey();
		}
	break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

anond:20190101175055

テトリス風?プログラムに向けて

第何回だろうな

キー入力を追加した

まだ、何を押してもブロックが右に移動するだけ(右端にいくと左にワープ

タイマー自動落下

 

でもまぁ ここまでサンプルがあるとほぼテトリスは見えてきた

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		x = 0;
		y = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int x;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48*9,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
		RECT Rect = { 0,0,48,48 };
		Rect.left = 48 * x;
		Rect.right = 48 * (x+1);
		Rect.top = 48 * y;
		Rect.bottom = 48 * (y+1);
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 8) {
			y = 0;
		}
		BOOL ret = FillRect(ps.hdc, &Rect, hBrush);
		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL OnKey()
	{
		x++;
		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
		break;
	case WM_KEYDOWN:
		{
			MyWindow *target = MyWindow::find(hWnd);
			target->OnKey();
		}
	break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

2019-01-01

anond:20190101174626

こんな感じ

GetMessageの上にタイマーも扱える

MsgWaitForMultipleObjectsExを追加

GetMessageだとタイマーを処理できないのでPeekMessageに変更

>なぜかは ちょっと考えると面白い

Getとき必要なかった 終了処理を追加

msg.message == WM_QUIT

この部分 QUITメッセージが来たら終了する

obj == WAIT_TIMEOUT

タイマーを追加

y++で高さを変更してから

作画を呼ぶ

こんだけ

<が<

>が&GT

&が&

にかわっちゃってるので各自で置換してね

	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}

anond:20190101172100

タイマーを使ったアニメーションを付けた

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		y = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
		RECT Rect = { 0,0,48,48 };
		Rect.top = 48 * y;
		Rect.bottom = 48 * (y+1);
		if (y > 8) {
			y = 0;
		}
		BOOL ret = FillRect(ps.hdc, &Rect, hBrush);
		DeleteObject(hBrush);

		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

2018-12-20

anond:20181220233124

世界一の国と比べて遜色がない時代があったんだよ。

コンクリートだと広島大の田澤先生自己収縮を発見し、東大前川先生RC構成則をバリバリ作ってた時。

IPSとかもそうだけど、何かを発見する余地がある時は日本人は強いと思う。(発見したもの勝ちなので政治大学内間、省庁とかのね)とかに作用されにくいからかな?)

今のコンクリートは分かりすぎてしまって(まだ分からんとこはたくさんあるけど)、みんな迷ってるんだよね。

中国みたいに新しい材料を使いまくればまだ何かあるかもしれないけど、日本で新しい材料絶望的に使われない(主に建築基準法のせい)。

技術書とは離れるかもしれないけれど、そういう状況だと、人口多い方が有利なのかなと思う。まぁ人口だけじゃないかもしれんが。

2018-09-04

anond:20180904162710

fだおおっみいり落ちjjfiojewjjiewじじょいd塩jj2位vjij2jvkl2v57cdcd2p2mocdンvンvpvivijvp929ijhuhvh@vンj@ンjcジョnoi vjvjivivジョッジ2ジv ji 2ji2vhvうhvvkdjkfoa;mwowowiwopaa@a03-r00kf,g.:b;.rc[.0-[.-ita4bm90yj,l\.],^4wi9-

2018-06-29

色々言われてるけどニコニコ動画凋落した最大の原因

それは「ユーザが求める技術水準に対応できて居なかったから」だよ。

とりあえずコレを見て欲しい。

ニコニコ動画(仮)2006.12.12

ニコニコ動画(β) 2007.1.15

ニコニコ動画(γ)2007.3.6

ニコニコ動画RC)2007.6.18

ニコニコ動画RC2)2007.10.10

ニコニコ動画(SP1)2008.3.5

ニコニコ動画(夏)2008.7.6

ニコニコ動画(秋)2008.10.1

ニコニコ動画(冬)2008.12.5

ニコニコ動画(ββ)2008.12.12

ニコニコ動画(9)2009.10.29

ニコニコ動画(原宿)2010.10.29

ニコニコ動画:Zero 2012.5.1

ニコニコ動画:Q 2012.10.17

ニコニコ動画:GINZA 2013.10.8

niconico(く) 2018.6.28

ニコニコ動画はこの移り変わり激しいIT時代で、実に4年半もの期間メジャーアップデートをしなかったんだ。

もちろん、IT関連職なら「ニコニコ動画Webサービスなのでメジャーバージョン名はあまり意味がない」という考えを持ってしまうかも知れない。

しかしながら、ユーザから見える範囲でのアップデートはこの4年半でほとんど行われていない。重要なのはユーザ視点なんだ。

その4年半の間、他の動画共有系サービスは着実にアップデートを繰り返し、動画共有系サービスの平均的な技術水準を引き上げていたが、ニコニコ動画はほどんど流れに乗らなかった。

ニコニコ動画ユーザが「Youtubeなら〜」と言ってしまうのも無理はなく、それを無視し続けたドワンゴ責任は本当に重い。

2018-05-14

anond:20180513200126

1階は虫でも防犯でも良いことはない。確率問題ではあるけど。

実は公園治安騒音で隠れ嫌悪施設

ちなみに、軽量鉄骨は木造アパート居住性は変わらない。部屋の快適さに影響するのは柱の素材じゃなくてむしろ壁。RCじゃないならまぁなんでも一緒。

2018-05-06

anond:20180506153423

大阪市内で小奇麗なワンルームだと6~7万くらいだけどあんま変わらんのね

でもワンルームで防音がしっかりしたとこって見つからん

鉄筋RCでも部屋と部屋の間が薄いとこばかり

2018-03-07

プラモだけに生きてきて46歳になった。

毎日プラモのことだけを考えてきて先日46歳になった。

定時で仕事を上がると行きつけの模型屋に寄ってひたすらプラモ

楽しくて楽しくて続けていたらこんな歳になっていた。

小学生の時に友達の家で読んだホビージャパンのSF3Dがきっかけだった。

今もマシーネンクリガーが一番好きだ。

並行作業は好きじゃないので乾燥中はネットをやったりすることを覚えた。

戦車飛行機軍艦も車も城もプラモはそれぞれの味、共通理念のようなものがあっておもしろい。

自分の中ではプラモ一種なのでRCミニ四駆もやる。

プラモってなんでこんなにおもしろいんだろう。

死ぬ時はプラモを作りながら死にたい

本気でそう思う。

自分美女だと勘違いしている整形醜女

金持ち(富者)は自分財産を騒がしく自慢する必要がない。

自分に自信があるなら、他人に誇示する必要もなく、静かに事実だけを短く言えばいい。

美女自分の美貌を騒がしく自慢する必要がない。

自分の美貌に自信があるなら、顔に塗装するような化粧をする必要は当然ないし、簡単な装いでも多くの人を魅了(魅惑)することができる。


自信がある金持ち自分を豊かであるように偽装する必要はない。すでに金持ちからだ。

自分の美貌に自信がある人は、顔を削って修正する必要など感じない。すでに美女からだ。


貧しい者は金持ちを狂ったように攻撃する。

心の醜いブスは、美女攻撃する。

自信がなく劣等で無能で醜い者ほど、偽装して整形し、成功した人たちを攻撃する。


http://news.naver.com/main/read.nhn?mode=LPOD&mid=sec&oid=001&aid=0009930580&isYeonhapFlash=Y&rc=N

ムン大統領日本の「歴史無視」を叱咤…「戦争犯罪言葉では隠せない」

独島慰安婦問題に対する真の謝罪反省を促す「隣国和解平和共存の道を歩く」…パートナー関係を強調(ソウル=聯合ニュース

2TK89m1zJsM2gGO1513843337_1513843543 (1)


http://news.naver.com/main/read.nhn?oid=018&sid1=100&aid=0004046882&mid=shm&mode=LSD&nh=20180301165847

ムン大統領臨時政府正統性を強調して「歴史戦争」勝負総合

ムンジェイ大統領が1日午前、ソウル西大門刑務所歴史館で開かれた第99周年3・1節記念式で記念演説をしている。

2TK89m1zJsM2gGO1513843337_1513843543


半世紀以上も日本人たちは誤解していた。韓国反日発狂して反日発作を起こす理由について、「日本が間違っていたからだ」と誤解をしていたのだ。

もちろん日本左翼マスコミがそう誤解するように誘導していたというのも理由の一つだが、最大の理由はそうではない。米国に敗れた後、平和病にかかった日本人が自ら勘違いをしていたのだ。

長い間そういう勘違いをしていた日本人は、今やっと真実悟りはじめている。


韓国反日発狂して反日発作を起こす理由は何か。

真実は、純粋に自信がなくて劣等感に満ちている韓国が、自分たちの歴史や国になんの自信も誇り(自負心)も持てないことが理由だ。反日を通じて歪曲した感情を満足させるためだったのだ。

近代価値はどこにもなく、低質な反日原理主義国家アイデンティティ韓国は、上から目線日本非難しなければ精神を維持することができないのだ。

精神病の状態のこんな状態が、韓国の劣等性を証明している。


問題本質韓国の根強い劣等感にあるので、日本いくら援助して謝罪をしても意味がない。

反日韓国国家アイデンティティから韓国は「日本は当然韓国お金技術を捧げなければならない」と思っていて、むしろ日本が今までしてきた援助や謝罪は、韓国反日原理主義助長する結果だけをもたらした。

人間ゴミの考え方である

かれらは「金持ち邪悪なので、乞食を当然助けなければならない」という考え方を持っている。

乞食の考え方を持っている醜い韓国に、自信や価値や誇りなどない。

みじめなので、必死扇動して包装するのである

日本が作ったものを見て起源韓国だと言い張るほどに。


韓国のように、米国USA)が英国England)を狂ったように攻撃して発狂して発作を起こすか?

米国英国から独立して生まれた国だが、米国韓国のように発狂する必要などない。

米国には米国価値があり、米国アイデンティティがあり、米国の誇りがあるからである

自信がある美女他人容姿を羨望する必要もなく削り下ろす必要もないのだ。


しか劣等感で団結したブス(醜女)は違う。

すべてを偽装し、自分の顔を整形し、他人を削り下ろす。

自らの独立したわけでなく、独立に及ぼした影響はホコリ以下の微々たるものしかなく、自ら近代化する能力もなく、いまだに事大(小中華)の考え方を持っている韓国が持てる考え方というのは、朝鮮ソンビがそうだったように反日をすることだけである


韓国自由民主主義価値を持っていた場合は違うが、現実にはナチズムと同じようなナショナリズムethnic)の考え方を持っているのが韓国なので、最初から日本がどういう態度だろうが、韓国劣等感がなくなる可能性はなかったのだ。


それなのに異常を正常だと勘違いしているので救済する方法はどこにもない。

いくらほざいたところで整形顔は整形顔だ。

整形した顔を正常だと勘違いしている精神なのだから、自ら変わる可能性などない。


おぞましくて醜い集団は、血の涙を流さなければならない。

IMFを経たにも関わらず何も気付かず成長を自ら拒否した情けなくて醜い者に、世界は優しい笑顔など投げてくれない。

ソドム(Sodom)とゴモラ(Gomorrah)は浄化される以外、方法がない。


「無明」というブログの人

引用ソース

https://blog.naver.com/zero53/221219604672

2018-02-01

人気の謎

その昔、

Linuxオススメディストリビューション教えろください」

と言われたらFreeBSDと答えるのがベストアンサーだった。

それくらい*BSDLinuxに比べてゴチャゴチャしておらず、シンプルかつ堅牢OSだったのだ。

同時に、SystemV系のようにrc.*経由でデーモン操作なんてタルいことをせず、プロセスをより直接的に操作できる柔らかさもあった。

ちなみに代表的な*BSDといえばFreeBSDNetBSDOpenBSDだが、これがちょうどつぶあん・こしあん・白あんみたいなモンで、まあそういう定番が3つもありゃ十分だろうと。

とにかく*BSDであれば、何かをやる方法バリエーションは最大でも3パターンしかならないわけで、上述の通り本当にシンプルで手堅いのである


一方のLinuxは「誰が食うんだこんなもん」みたいな内容のディストリビューションが乱立しまくっていて、その乱立振りもあってか、/etc以下は壮絶にカオスである

多様性というが、現実ディストリごとの細かな操作差異だの方言だの、本当にくだらない事に手を煩わされる、まさしくヒマな大学院生の習作から出発した感が溢れる、頭の悪いOSという感じ。


からLinuxなんて登場当時はいとき流行り、或いは時代の徒花くらいに捉えられていた。

それこそ、OS世界Windowsと*BSDでほぼ二分される未来のほうが、WindowsLinuxで寡占された未来よりかは現実性がある…と思ったものだ。

ちなみに今のWindowsベースは、あのカトラー人生を賭けて作ったものなので、そうそう色褪せる可能性は低いわけで、軽んじることは出来ない。


しかし、実際のところはそうならなかった。

本当にLinuxがここまで世界に広まったことが不思議でならない。

広まる要素なんて全くもって皆無だったじゃん。

UNIX系の中ではかなりゴチャゴチャしていて、それは今も変わらないわけで。

ディストリビューションについても違いが小さくなるどころか、RedHatUbuntuでは同じLinuxと思えないくらい違っている。

というかそれぞれの用途に各システムでめちゃくちゃにカスタマイズされまくっていたりで、ある環境Linuxを触っていたからといって、他のシステムでその経験通用するとは限らない。

ここまで書いただけでも、面倒という印象しかないのに、何故そこまでLinuxが持て囃されるのか…。

2018-01-25

anond:20180125092126

数ヶ月前まで住んでたアパート石油禁止だったな

RCで1棟に4部屋、2LDK

2018-01-11

RCで某施工会社マンションなのに隣の部屋から屁の音が聞こえる

RCから木造よりは遮音性高いかと思いきや、変わらんやんけ。隣の屁の音、咳の音、丸聞こえやないかなんやねん、このマンション萎えるわ。

2017-12-21

童貞マリヤ」について

はあちゅう氏の炎上問題を見ていて、本筋とは関係ないところで気になっている用例がある。

http://hagex.hatenadiary.jp/entry/2017/12/20/123000

今回の告発で「お前も童貞セクハラをしていただろう」という指摘が大量にやってきたので、彼女ツイッターで弁明。

だが、この発言こそ「まさにセクハラのもの」であり、「はあちゅうのことはキライだけど今回の件は応援する」といった層はもちろん、はあちゅうに関して最初から応援してきた人たちも焼き払う。

10年近く炎上活動している彼女面目躍如である誤用)。

http://billword.hatenablog.com/entry/2017/12/20/220136

ただ、ここで不思議なのが「売れ残り」という言葉に激高するはあちゅうが何故平気で童貞侮辱するのか、という点である

結婚していない」という事実を茶化されるのが堪らなく不愉快なのと同様に、「性交経験が無い」ただそれだけの事実を茶化されるのも屈辱である

私はクリスチャンではないが、八木谷涼子著『なんでもわかるキリスト教大事典』(朝日新聞出版)を手にしたのをきっかけにキリスト教用語として「童貞」があることを知った。正教でイエスの母であるマリア(正教では「マリヤ」と表記)のことである。virginを日本語訳したものであるが、日本語では男女において「童貞」「処女」と用例が分かれている。なぜそうなったかまでについては調べ切れていない。

以下のページにも「童貞」「童貞女」などの表記が見られる。

『なんでもわかるキリスト教大事典』主要索引&英和対照表 増補版

くりホン一般 Q&A

聖母マリア - Wikipedia

イエスの母マリア - Wikipedia

http://yagitani.na.coocan.jp/kurihon/kurihon13.htm

virgin Mary 【正】童貞女〔どうていじょ〕マリヤ 【RC】(現) おとめマリア; (旧) 童貞〔どうてい〕(聖)マリア 【プ】おとめ〔処女マリヤ 【福】処女〔しょじょ〕マリヤ

また、日本正教会サイトでも「生神女(しょうじんじょ)マリヤ」の説明ページを設けている。

中国日本で同じ漢字でも意味が全く異なるように、その国において指し示す概念は異なっているのが当たり前であるはいえ、「童貞セクハラ」「童貞dis」「童貞いじり」などは、そもそも正教会信徒にとっては許しがたい言葉なのではないか?と勝手に推測している。クリスマスがその本来意味を失い商業主義象徴となったように、正教会信徒の皆さんは「童貞」という言葉への甚だしい無礼をあきらめているのだろうか。

2017-11-25

アパートの魅力

マンションからアパート引っ越した。マンション面白味に欠けるから引っ越したのは木造アパートの1階。庭付きだ。土いじりがしたかたから庭付きの1階。築29年のいい感じの木造アパート。味がある。防音も問題ない。以前のRCマンションでは隣人の咳の音がダダ漏れだったが、今度のアパートではそんなこと一切ない。RCの方が遮音性高いとか、あれは何だったんだ?夕日を浴びながら庭で土いじり。植物に水をやる。この何とも言えない時間がたまらない。夏は庭で育てたキュウリトマトをもぎ取って塩をつけて食う。冬は夜の寒い中で熱々のラーメンをすする。そのまま野宿もする。外っていい。そしてアパート哀愁も心に染み渡る。

2017-07-07

リーフのバッテリ劣化技術的に早すぎる

https://news.yahoo.co.jp/byline/kunisawamitsuhiro/20170707-00073002/

スマホ電池は2-3年で40%程度まで劣化することも珍しくないので、リチウムイオン劣化するもんだという観念は広く染み渡っている。ところがそこは設計次第という面があって、放電深度によっては3年/500サイクルより長持ちさせることはできる。らしい。

ネットを見ていると、中古リーフ関連のテンプレには必ずバッテリ満充電容量を確認しろ可能なら軽く劣化させて保証交換に持ち込め、と書かれている。テスラ関連の掲示板は常に社長の人柄(渡邉美樹に似たタイプだ)とOSアップデートの話をしていて、「バッテリ劣化」と口に出すと「テスラのバッテリは劣化しない」と言って叩き出される。「エアコンの航続距離への影響」も「知らん」の一言で終わる。走行20kmで残容量93%というデータ(?)もあって、6万kmで90%を割っていると外れ値扱いになる世界なので、車の寿命まで持つから心配いらないというのも一定事実を含むのかとは思う。

リチウムイオン電池は高価だ。概ね2万円/kWhで、低下傾向にある。つまりリーフの24kWhバッテリには原価が60万円ほどかかっている。リーフの定価は300万円前後なので、1/5がバッテリの原材料費ということになる(分数だ!!!!)。これをテスラ並みの48kWhや72kWhにすれば、24kWhでの公称航続距離は228kmから、72kWhあれば650kmは走れるだろう。そうするとガソリン車の満タン感覚とも近くなってくるだろうし、仮に1/2や1/3に劣化しても燃費が悪くなったと言って済ませられるのではないだろうか。

もちろんバッテリの容量を2倍3倍に増やせば体積が2倍3倍になるのみならず、実質的ヴィッツとかフィット価値しかない車が360万円や420万円といった価格帯になる(これはかけ算だ)。BMW 3が候補に入る価格帯だ。電池は重量がある。パワートレインを強化しよう。リチウムイオン電池劣化は冷却によって抑えられる。冷却システム改善しよう。そうして技術的に適切な解決を図っていくと、例えば48kWh, 10年後の航続距離が300km、辛うじてコンパクトの車がわずか520万円といった感覚になってくるだろう。そのような車は、東京名古屋間を無充電で走行し、現地で少し急速充電した後、帰ってくることができるだろう。

同じことがトヨタ カローラにもできる。カローラ新車価格は150万円であるカローラ3.5台分の日本円を用意すると、その機能を保ったまま内燃機関電池と電動機で置き換えることができる。多くの日本人は今やカローラを購入することに難しさを覚えるようになっている。すると、機能を保たずに新車価格を保つほうがビジネス的に理にかなっている。バッテリの劣化は納車後しばらく、クルマに対する情熱があるうちは明らかにはならない。であれば、技術には涙をのんでもらってバッテリを最大限にしばき倒し、主に都心を動かすシティカーだが頑張ればノートと同等の動きもできるといった宣伝で、うるさい人だけ保証や実費交換で黙らせていけばよいという判断があり、そしてそのようにしているというのがリーフのバッテリ劣化をめぐる状況なのではないだろうか。

何が言いたいかというとテスラモデル3が欲しい。0-100km/hは5秒を切ってきそうだし、GeForce GTX 1060の搭載が決まっているし、GPLを盛大にぶっちぎってGNU/Linuxで動いているし、量産開始がアナウンスされている。別にどこかから金をもらっているわけではないが。くれるならRC版の3をくれ。

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん