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 {

			}
		}
記事への反応 -
  • 解説 この部分でfindを呼んで ペアのthis関数を見つけて グローバル関数からクラスメソッドを呼び出す 実質このtargetがthisポインタ相当になって this->OnPaintと呼ぶのと同じ効果を出し...

    • みやすいように フルソース 青い■を表示するだけ // WindowsProject7.cpp: アプリケーションのエントリ ポイントを定義します。//#include "stdafx.h"#include "WindowsProject7.h"#define MAX_L...

      • ソース全部だと長いけど ようするに 違いはこの部分 CreateSolidBrush が 色を決めている Rect で位置と大きさを FillRectで書いている 英語が読めればかなり簡単な OnPaint=作画関数 BOOL On...

        • タイマーを使ったアニメーションを付けた // WindowsProject7.cpp: アプリケーションのエントリ ポイントを定義します。//#include "stdafx.h"#include "WindowsProject7.h"#define MAX_LOADSTRING 100...

          • 描画部分の違い 変数 y をつかって 高さが8までで移動するように yが変わると■のいちも変わるから タイマーで呼び出されるたbに 下へ 下へと作画される だから まぁ アニメー...

            • こんな感じ GetMessageの上にタイマーも扱える MsgWaitForMultipleObjectsExを追加 GetMessageだとタイマーを処理できないのでPeekMessageに変更 >なぜかは ちょっと考えると面白い Getのときは必要な...

              • 次回 キー処理 ちなみに、グローバル関数>クラスメソッドのやりかたは 雑なやりかただけど書いてあるから クラス化の利点を生かして 同時にWindowを2枚出して 同じ処理をしてみ...

                • テトリス風?プログラムに向けて 第何回だろうな キー入力を追加した まだ、何を押してもブロックが右に移動するだけ(右端にいくと左にワープ) タイマーで自動落下   でもまぁ ...

                  • https://anond.hatelabo.jp/20190103154644   だいたい一式 せつめいもついてる いまなら、Q&Aがあるていど 無料でついてくる(w) ><が <とかに置き換わってるけど 一番最初に 無料...

                  • で 次は キー入力が右しかないけど これじゃぁ テトリスっぽくないから ブロックの作画をもうちょっと 本格的にしてみよっか?

                    • これで、ブロックを4つ書くからテトリス風 BOOL WriteBox() { 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.rig...

                      • ま、きちんと基礎を習っていれば テトリスぐらいはすぐに作れる とはいえ、基礎を習っていれば 絵ぐらいすぐに書けるとか そりゃなんでもそうだっていう突っ込みはあるだろうけど  ...

          • つ https://anond.hatelabo.jp/20190101174449 いまコレの解説中

記事への反応(ブックマークコメント)

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