UpdateWindow

UpdateWindowで画面を更新する。

UpdateWindow 関数 (winuser.h) - Win32 apps | Microsoft Learn

InvalidateRectで無効領域が作られればWM_PAINTが送られて更新されるが、これはタスクが無いアイドル状態だからであり、処理が忙しい時はなかなか更新されない。
UpdateWindowで強制更新する必要がある。

"Update"が含まれてるので今回はapp.manifestを用意
"Update"が含まれてるので今回はapp.manifestを用意

"Update"が含まれてるので今回はapp.manifestを用意。
UpdateWindow.cppで、

		// マウスの左ボタンが押された時.
		case WM_LBUTTONDOWN:	// マウスの左ボタンが押された時.(uMsgがWM_LBUTTONDOWNの時.)

			// WM_LBUTTONDOWNブロック
			{

				// iをインクリメントしまくる.
				for (int j = 0; j < 1000000; j++){	// jが1000000を超えるまで続ける.
					InvalidateRect(hwnd, NULL, TRUE);	// InvalidateRectで画面全体を無効領域とする.
					i++;	// iをインクリメント.
				}

			}

			// 抜ける.
			break;	// breakで抜ける.

左クリックしたら、iをインクリメントする度に、InvalidateRectで無効領域をつくる。

WM_PAINTでiを描画。

起動時はこうだが、左クリックしても画面は更新されない。
起動時はこうだが、左クリックしても画面は更新されない。

起動時はこうだが、左クリックしても画面は更新されない。

数秒したら、全部インクリメントし終わって、この画面になる。
数秒したら、全部インクリメントし終わって、この画面になる。

数秒したら、全部インクリメントし終わって、この画面になる。
InvalidateRectを呼んでも更新はされない。

InvalidateRectの後にUpdateWindowを呼ぶ。

起動時
起動時

起動時。
左クリックすると、

今度は画面が更新されて、1ずつカウントされる。途中過程がわかる。
今度は画面が更新されて、1ずつカウントされる。途中過程がわかる。

今度は画面が更新されて、1ずつカウントされる。途中過程がわかる。

最後はこう
最後はこう

最後はこう。
更新してから足してるから、最後の値は反映されないのか。

Sample/winapi/UpdateWindow/UpdateWindow/src/UpdateWindow at master · bg1bgst333/Sample · GitHub