「初期化」を含む日記 RSS

はてなキーワード: 初期化とは

2019-02-08

アレな動画をどうするか

割とよくある話だよね。俺の場合、使ってるノート PCHDD スロットと M.2 スロットが付いているので、M.2 の方にシステムを入れて、大容量の HDDHDD スロットに挿してる。で、その HDD の方に動画を……だな、その、溜めているわけだ。

でも、俺が急に命を落としたり、あるいは身動き取れない状態になったとき関係者が俺の PC 漁ってこれが出てきたら……と思うと、いつも不安になるわけだよ。どうするのが一番いいんだろう。

    • 断捨離とばかりに全消去(え、え、えぇぇぇぇ)

    ……どうしよう、と思いつつも、昨夜また俺の HDD の内容物は増えたのだった。

    2019-01-15

    親父と正月喧嘩した件について

    gdgdだが、吐き出す。どうにも許す気になれん。

    親父は昔からパワハラ気味&上から目線なところがあって、辟易していたんだが、マンションも買い与えてくれたし、5年くらいまえから生前贈与だ、といって税金がかからない範囲で少しずつ金を振り込んでくれてる。

    世間一般には良いほうの部類に入るのかもしれん。

    俺はSEをしていて、実家パソコン3台を数年前に買い替えた時も、無線LANとか、プリンタとか、OS認証とか、一通り半日かけて設定してやった。

    今年の正月元旦に顔をだして、相変わらずパワハラ気味な所とか、俺のほうがまだ年収は上だしなとか(子供相手に何言ってんだ、という話)、そういう親父に愛想笑いして帰ってきたのだが、3日の朝に電話があって、

    親父が年賀状を作っているパソコンが動かないから直しにこい、と喚いていた。片道大体1時間位なんだが、正月休みの朝の9時に叩き起こされたので、午後から行ってやる、と言って、午前中は2度寝していた。

    14時位に実家に行くと、早く直せ、宛先の印刷が出来ないだろ、と喚いていたので、ググって出てきた郵便局年賀状作成フリーソフトを動いているPCに入れてやって、それで印刷しとけ、と黙らせてから動かなくなっていた

    VAIOを見た。純正の診断ツールを走らせて、ハードディスクを修復して、何回やっても、「windowsが正しくシャットダウンされませんでした」という例のエラー回復画面から起動しない。セーフモードでも起動しない。

    診断ツールの走りが遅かったのでここまで3時間タバコを吸っていると、タバコ吸う暇あるならさっさと直せ、と親父が喚いてくる。ツール走らせてんだよ、ボケが。素人は黙ってろ、と思ったがそこまではその時は

    言わなかった。

    もうめんどくせーから初期化するか、と決断して、親父にデータ全部消していいか、と聞いたら、過去何年分かの年賀状データと宛先のデータ写真は救いだせ、と喚く。後出しだが、親父は昔、役人をしていて、

    俺がガキの頃から12月1月初めは年賀状作成バカになる。宛先をきっちり管理し、毎年律儀に数百枚出す。そんなに大事ならバックアップとっとけよ、と思ったが、VAIO純正ツールデータ救出みたいな項目があったので、

    それを走らせてみた。救出するフォルダを選べ、と画面が出てきたので、年賀状作成ソフトフォルダまるごとと、住所録の簡易データベースみたいなものがあるらしき場所と、ピクチャフォルダを丸ごと指定して、

    外付けのHDDコピーを開始したら、「終了まで8時間」とか出た。まあ、古い外付けHDDだし、コピーしていくうちに画面の時間表示も減るだろう、と思って、お袋が用意してくれた晩飯を食った。

    すると、先に飯を食い終わった親父が画面表示に気がついて、「8時間とはどういうことだ」「お前はここで徹夜すんのか」「いや、むしろ終わるまで帰るなよ」と喚き出した。丁寧に説明してやっても良かったんだが

    さすがにキレてしまった。喧嘩口調に切り替え、5分位罵りあったのだが、「だったら、修理にだすわ」と親父がほざいたので、「ああ、そうかい」と言って、お袋に帰るね、と言って帰り支度を始めた。青ざめた顔を

    して見ていたお袋もなんとなく頷いてくれたので、帰ろうとしたら、親父が「仕事を投げ出して帰るのか」とか色々ほざきだしたので、「修理屋さんが直して下さいますよ」と嫌味たっぷりに言ってその日は帰ってきた。

    翌日。朝の9時半、10時に親父の携帯から着信があったが、また叩き起こされたので無視して寝た。ちなみにその日はそれ以降親父から着信はなかった。

    その翌日。また朝の9時半、10時に親父の携帯から着信があったが、無視した。用事があったんで、起きてはいたんだが。その日もそれ以降親父から着信はなかった。

    その翌日。また朝の9時半に親父から着信があったが無視した。友達と昼に待ち合わせだったので、そのまま出かけると、電車の中で親父から入ったショートメールを見た。

    曰く、

    こちから呼びつけておいてひどいことを言いました。反省しています。すいませんでした。」

    「宛先印刷ソフトを入れて頂いてありがとうございました」(ほぼ原文)

    その日の夜に「メッセージは見た。これ以上は罵る言葉しか出てこないので返信しない」とだけ返しておいたら、翌日に「わかりました。落ち着いたら連絡をください。」と返ってきた。

    あれから1週間以上になるんだが、未だに親父を許す気になれん。親父もお袋も70歳までカウントダウンだし、寛容になってみるべきなんだろうか。

    しろ、死に目にあえなくてもいいかな、くらいにも考えてる。色々積もり積もったものがあるからね。

    吐き出しですまん。

    2019-01-07

    携帯ショップ中の人だけど、疲れた

    この業界を好きで続けてる人って、どれくらい居るんだろう。

    通信業界の人で、今はショップスタッフ

    あなた説明は今までで一番分かりやすい」

    あなたのおかげで無駄契約が全部省けた!」

    ショップ店員ってお高くとまってて、何でも契約押し付けられるイメージしかなかったけどそんなこと無かった、親切に教えてくれた」

    「○○の店員はみんな冷たいけどここはそんなこと無かった」

    他店や他代理店のエゲツないやり口を知ってるからさりげなく追加新規とかしつつでも本当に必要無い人には押し付けない、でリピーター口コミから指名してくれる人も店の業績も伸びた。

    これは素直に嬉しい。

    でもそれ以上に、

    データが消えるなんて聞いてない!」←初期化データ消えることやで…初期化して良いってあなたが言って、あなたリセットボタン押したじゃない…

    「昔はやってくれたのに、何でデータ移してくれんの!?」←今と昔じゃ違うし、そもそももうどこのショップもやってない。やってたらそれは大問題

    「毎月物凄い料金払っとんのに、何も無いんか!」←それ、代理店派遣で来てる私に言われてもってのが本音だけど、各キャリア、長期ユーザーには何かしらの補填が有ります

    料金はセンターに丸投げすれば、最悪どうにかなるけど、データは無理。スマホ逆さまにしたって戻りません。

    iPhoneからAndroid機種変したら、ライントーク履歴は消えます。逆も然り。これ、毎回先に言っても理解してくれない人がいる。

    壊れた端末からデータを引っこ抜くことは一般ショップじゃ出来ません、お金払ってそういうのやってるとこで相談して下さい。

    SIMロック解除した端末に新しくSIM刺してプロファイル入れ替えたら、元キャリアメールは消えます。敢えて説明しません。バックアップ取ってるものとして進めるから

    ガラケーに刺してたSDスマホに入れるとデータ壊れる可能性大です。過去に何件も忠告無視して消えた人見てます、素直に新しいSDにしとけば良かったのに。

    iTunesを過信しないでください。でもアップルコールセンターは皆さん優しいし全力で支援して下さるので助かってます

    データは、そんなに大事ならいろんなところにバックアップ取っといてください。

    スマホって、電話じゃないよ、小さいパソコンと思って。

    androidPC直結してフォルダごとコピーSDiCloudiTunesPCに、googleフォト、googleドライブ、やり方は沢山あります

    泣いて怒ってデータが戻るならいくらでも泣いて怒ってくれて良いけど、無駄です。

    「そんなの聞いてなかった!」と言われても、スマホへ保存してるデータは各個人違います

    全部面倒見切れません。

    最近、受付件数が増えると同時にこういう案件が多くて、もうぐんにょりです。

    これを読んだ増田さん、もしショップ機種変更するなら、必ずバックアップ取っておいてください。

    わたしはもう疲れました。

    この春商戦を前に離職しそうな程に心が折れてます

    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: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;
    }
    
    

    anond:20190101162210

    やすいように フルソー

    青い■を表示するだけ

    // 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);
    
    
    		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 Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    
    		// メイン メッセージ ループ:
    		while (GetMessage(&msg, nullptr, 0, 0))
    		{
    			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    			{
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
    		}
    
    
    		return TRUE;
    
    	}
    
    	BOOL OnPaint(PAINTSTRUCT &ps)
    	{
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
    		RECT Rect = { 0,0,48,48 };
    		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;
    }
    
    

    anond:20181231104029

    // 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);
    
    
    		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 Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    
    		// メイン メッセージ ループ:
    		while (GetMessage(&msg, nullptr, 0, 0))
    		{
    			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    			{
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
    		}
    
    
    		return TRUE;
    
    	}
    
    	BOOL OnPaint()
    	{
    		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();
    
    
                // 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;
    }
    
    

    Windowsシステムは基本 グローバル関数なので

    グローバル関数<>クラス化されたメソッド

    ブリッジ関数を書いた

    2018-12-31

    anond:20181228211250

    // 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);
    
    
    class MyWindow
    {
    public:
    
    	HWND hWnd;
    
    	MyWindow()
    		:hWnd(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);
    
    
    		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 Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    
    		// メイン メッセージ ループ:
    		while (GetMessage(&msg, nullptr, 0, 0))
    		{
    			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    			{
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
    		}
    
    
    		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);
                // 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-07

    Wi-Fi無料提供してた奴、身内にいた問題

    https://anond.hatelabo.jp/20181206214612

    世の中にいる、家庭のIT管理者になってしまってるものです。

    からWi-Fiが遅いって話がきて、ルータの置き換えしに行ってきたんですよ。

    実家Wi-Fiルータ10年前のものだし、縦に長い家だから電波も設置場所から離れれば遅くなるし、そら新しいiPhoneを持っても実感は4G回線より遅いですね。

    ルータ設置して、これで終わりと思った矢先。

    Wi-Fiチャンネル一覧見たら鍵なしのルータがある。

    試しにつなぐとつながる。

    いやいや、こんなタダ乗りされたらまずい時代アカンやろwww

    とか笑ってました。

    気づく1時間前まで。

    かのぼること実家でる数年前。

    実家電波の飛びが悪いことを知ってた私は、自分の部屋にも中継器おいてたことを思い出しました。

    もしやと思い、弟の部屋へ。

    ええ、ありましたよ。

    鍵なしSSIDと同じ文字列が書いてあるルータが。

    焦って、初期化して設定変更。

    当の本人に聞いたら

    ・今年はじめ買ったやつ

    ・(鍵なしについて)そんなのさわった覚えない

    ・やり方わからいからつながるしほったらかしてた。

    ・そんなこといわれたってわからない

    リテラシーなさすぎとかいう、次元こえてました。

    緊急策として、こっちで管理できる内容にして、わからないならもう設定をいじらないことを伝えました。

    リスクの話はまた別の日にゆっくり話そうと思います

    世のおうちIT管理人になってるみなさま、意外なところに落とし穴存在しています

    家電説明書読まなくても使えるようにメーカーはして、リテラシーなき人も使えるようになってきています

    でも使い方はわかっても、イレギュラー動作説明書みないといけないのに見ないし、リスクの話は説明書にすら乗ってない。

    簡単に危ないですよってしか書いてなくて、何が危ないかすらわかってない。

    ほんと次から身内ですら金もらうレベルですよ、これ。

    電器屋サポートシステム、理にかなってますわ。



    話題脱線しました。

    とにかく、身内にフリーWi-Fiがいたら即つぶしましょう。

    自分危険に晒される前に危険の芽を積みましょう。

    2018-12-06

    仕事ミスした、、、

    今の職場では9月に未経験から入社して3か月とちょっと経った。

    今日必要データ初期化してしまった。死にたい

    幸い昨日のバックアップデータがあったようで今先輩社員がこっそり直してくれているけど、もう息をするのがつらい。

    2018-11-19

    anond:20181119135516

    AppleIDが分からいか初期化、なら初期化すべきはiPhoneじゃなくてAppleIDのパスワードだろ。

    iPhoneウンコな所

    初期化する際にAppleIDへのログイン強制される

    それがわかんないか初期化するっつってんだろが黒タートルネック

    2018-11-18

    anond:20181117114626

    技術屋のオッサンなので、カスタマイズ性とやらに惹かれて最初に持ったスマホは安いアンドロイドだった

    が、この端末が最悪で、しょっちゅうシャットダウンしては初期化され、写真を撮る時はモバイルバッテリー接続しないと落ちる

    なんかやべーなと思っているうちに旅行前に起動しなくなった

    ふざけんな、と思いながら携帯ショップ

    同機種の新品端末を修理交換という形で勧められたが断り速攻でiPhone機種変更したわ

    こんなひどい例は滅多にないとは思うがandroid品質の差が激しい

    スマホエントリー機で割とハードな使い方した自分もあれなのかもしれんが

    もうスマホiPhoneでいいわ

    携帯端末で面倒があるのが一番困る

    2018-11-09

    モニタの設定が初期化されてしまうようになって仕方なく適当に設定してる

    なんか増田の色のトーン変わったように見えるのはモニタ所為かね こんなに色変わるとこまるんだけど

    2018-10-24

    iphoneバッテリー交換で有償交換?無償交換? 後日談

    iphoneバッテリー交換が2018年12月まで3200円でできるということで、WEBで予約してapple正規サービスプロバイダに持ち込みました。

    予約せずに来店している人も多数です。

    受付して30分ほどで返却できるというので、時間をつぶして引き取りに行ったところ、エラーがでたので初期化するとのこと。そして、初期化しても直らない場合は、本体有償無償で交換することになる可能性があるとのこと。え、今まで普通に使えていたのに有償交換ってあるんだ・・・

    嫌な予感が・・・

    また、初期化するのに時間がかかるというので、しばらくして再び来店

    すると、恐れていた事態・・・

    本日、使うのであれば有償本体を交換します。appleサポートセンターに問い合わせたいが、日曜は休みなので明日対応となり、数万円払って有償交換か無償交換かはapple判断するとのこと。←いまココ

    ちなみに、持って行った時の状態で返却はできないのか聞いてみたけど、現状では通話インターネットの閲覧もできない状態なので返却しても何もできないと言われました。

    今まで何の支障もなくiphone使用できたのに、バッテリー交換をしようと思って持って行ったら1日iphoneが使えなくなりました。1日使えないだけでも相当ストレス、支障ありありなのですが、これで有償交換だったら最悪だなぁ。

    →翌日(*^-^*)

    バッテリー交換代だけで、新しい本体に交換となりました!

    まあ、そうですよね。隣に座った人も本体交換になったらしく、

    結構本体交換になるケースもあるみたいですよ。手続きに30分くらいかかりました。

    家に帰ってバックアップ復元作業したのですが、写真は元に戻ったけど、

    Appストアでダウンロードしたアプリを使って、ダウンロードした動画は消えていたので

    改めてダウンロードする必要がありました。例えばamazonプライムビデオとか・・・

    あと、MVOを使用しているからか、モバイル通信ができなくなりました。wifiはできるけど。

    PDP認証に失敗しました」とでて、アンテナは3本立っているのに通信ができない。

    対応策は「APN構成プロファイル」のインストールをするとつながるようになります

    iij場合は、みおぽん を開いて ヘルプ構成プロファイルインストール

    これでモバイル通信ができるようになりますよ。

    2018-10-21

    iphoneバッテリー交換でiphoneが1日使えず 無償交換有償交換?

    iphoneバッテリー交換が2018年12月まで3200円でできるということで、WEBで予約してapple正規サービスプロバイダに持ち込みました。

    予約せずに来店している人も多数です。

    受付して30分ほどで返却できるというので、時間をつぶして引き取りに行ったところ、エラーがでたので初期化するとのこと。そして、初期化しても直らない場合は、本体有償無償で交換することになる可能性があるとのこと。え、今まで普通に使えていたのに有償交換ってあるんだ・・・

    嫌な予感が・・・

    また、初期化するのに時間がかかるというので、しばらくして再び来店

    すると、恐れていた事態・・・

    本日、使うのであれば有償本体を交換します。appleサポートセンターに問い合わせたいが、日曜は休みなので明日対応となり、数万円払って有償交換か無償交換かはapple判断するとのこと。←いまココ

    ちなみに、持って行った時の状態で返却はできないのか聞いてみたけど、現状では通話インターネットの閲覧もできない状態なので返却しても何もできないと言われました。

    今まで何の支障もなくiphone使用できたのに、バッテリー交換をしようと思って持って行ったら1日iphoneが使えなくなりました。1日使えないだけでも相当ストレス、支障ありありなのですが、これで有償交換だったら最悪だなぁ。

    さて、明日、どうなるか。

    続きは後日書きます

    2018-10-19

    金なさすぎてノートパソコン売ってくる

    金がない。今月上旬の段階で貯金は底をついてた。消費者金融でも限度額いっぱいに借りてる。にも関わらず財布に数万入ってるのいいことに風俗行ったり飲みに行ったり夜中小腹が空いてラーメン食ったり。その帰りにコンビニスイーツ買ったり。案の定、本当の本当に底をつく。

    にも関わらず試練があった。実家に帰らなくてはいけない。その交通費さえない。幸運にも週末に副業による現金収入が発生する。しかしそれを実家帰りにあてたら生活費がまったくのゼロなので本を売って2000円手に入れる。ちなみに2000円手に入れた瞬間にタバコを買い喫茶店コーヒーを飲む。

    実家に帰るイベントは無事終えたものの、再び金が底につく。昨日、領収書で散らかっていたところをあさったら200円ちょっと見つける。発行年が古かったのでなんとなくとっておいた100円玉二枚だ。おかげで夜散歩したとき缶コーヒーを買う。

    しかし次に収入が入ってくるまであと10日近くある。タバコも買えない。つらい。家にある金目になりそうなものテレビノートパソコンテレビリサイクルショップまで運ぶのがややしんどいのでノートパソコン一択。面倒だがこれからそのノートパソコン初期化して中古パソコンショップに行く。

    こういうとき手軽に現金ゲットできるよう動けるフットワークの軽さやお金を借りれる友達が欲しい。

    なお食料はそこそこストックがあるので栄養的にはひもじい思いはしてないのでご安心を。

    2018-09-25

    anond:20180925152212

    初期化なら外部記憶媒体HDDクリーナー入れて消せばいいし

    データ回収したいなら同じようにUbuntu入れて起動させればいい

    2018-09-15

    写真が残ってない

    ガラケー時代から携帯デバイスも機種が変わると写真は引き継がず

    スマホに変えても安いアンドロイドは完全初期化

    iPhoneに変えたここ2年ほどの写真があるだけ

    そもそも風景や親戚の子供の写真くらい

    カメラで撮ってプリントアウトするような機会はほとんどない

    ふと今自分が死んだら遺影はどうするのか?

    と考えてしまった

    学生時代のものすらない

    2年ほど前にお見合いサービス写真屋で撮ったやつくらいしか

    まともなものがない

    しかあんな目いっぱい笑顔婚活してます!みたいな写真遺影になるのは死んでも嫌だ

    別に死ななきゃいいんだけど

    一度きちんとした写真撮っておこうかな

    2018-08-31

    色々あってiPhone初期化されたので死のうと思う

    バックアップ

    あるわけねーだろ糞

    2018-06-27

    anond:20180627211755

    常人と全く同じ回路に全く違う初期化ベクトルを書き込んだ感じだ

    2018-06-20

    ADドメインに入ってないWindows10存在価値などない

    ADドメインに入ってないWindows10スタートメニュー広告止めるのめっちゃ面倒やし

    プリインストールゲーム消すのも手間かかるし、年2回の大規模アップデート毎にアプリの関連付けが初期化される。

    あ、最後のはドメイン入ってても起こるなw

    ログイン ユーザー登録
    ようこそ ゲスト さん