ページ 11

TextOutについて

Posted: 2009年12月13日(日) 05:41
by たこやき
ウィンドウの雛形に、
case WM_PAINT:{[/pre]
static int t;
PAINTSTRUCT ps;
wchar_t cbuf[100];
HDC hdc = BeginPaint( hWnd, &ps );
wsprintf( cbuf, _T("on WM_PAINT%d"),t);
TextOut(hdc,0,100,cbuf,sizeof(cbuf));
SetWindowText( hWnd, cbuf );
t++;
EndPaint( hWnd, &ps );
break;
}
として実行したところ、ウィンドウを任意のところに重ねて、移動すると、
SetWindowはタイトルバーにちゃんとの値が表示されるのですが、TextOut
のtは再描画されないのですが、通っているのに描画されないのはなぜで
しょうか?またどうしたらちゃんと表示されるのでしょうか?

Re:TextOutについて

Posted: 2009年12月13日(日) 21:13
by たこやき
WM_PAINTの中にInvalidateRect()を入れてそれでインクリメント(変数t)されたデータの数がようやく再描画
されるようになったのですが、これはあまりやらない方がよいのでしょうか?それともやっても大丈夫なのでし
ょうか?

Re:TextOutについて

Posted: 2009年12月13日(日) 21:47
by softya
>WM_PAINTの中にInvalidateRect()を入れてそれでインクリメント(変数t)されたデータの数がようやく再描画
されるようになったのですが、これはあまりやらない方がよいのでしょうか?それともやっても大丈夫なのでし
ょうか?

やっちゃいけませんね。InvalidateRect()をWM_PAINTでやると再描画の無限ループです。
tを更新したかったら、WM_TIMERを使ってtの更新とInvalidateRect()を呼び出すべきです。

Re:TextOutについて

Posted: 2009年12月13日(日) 21:57
by たこやき
わかりました。MW_TIMERを使えばいいのですね。
回答ありがとうございました!

Re:TextOutについて

Posted: 2009年12月13日(日) 21:58
by たこやき
解決しました。