WM_PAINT について教えてほしいのですが、
WM_PAINTがシステムから発行されるタイミングとして、
クライアント領域に無効領域がある時
UpdateWindow()を呼び出した時
InvalidateRect()を呼び出した時があると思いますが
例えば
LRESULT CALLBACK WndProc(HWND , UINT , WPARAM , LPARAM) {
LPCTSTR Str = TEXT("Kitty");
switch (msg) {
case WM_CREATE:
hdc = GetDC(hwnd);
SetTextColor(hdc , RGB(255, 0 , 0));
ReleaseDC(hwnd , hdc);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd , &ps);
TextOut(hdc, 10 , 10 , Str, lstrlen(Str));
EndPaint(hwnd , &ps);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp);
}
の場合, WM_PAINTはどのタイミングでシステムから呼び出されるんですか?
WinMain()でUpdateWindow()もInvalidateRect()もつかっていないのですが。
いつシステムから送られるかご教授をお願いします。
No.2ベストアンサー
- 回答日時:
たぶん、作成したウィンドウを最初に表示した時にUpdateWindow等を呼んでないのに何故WM_PAINTが送られてきているのかを知りたいのだと思って回答します。
たしか、
・ウィンドウスタイルにWS_VISIBLEを指定している場合は、CreateWindow(Ex)を呼んだ時
・WS_VISIBLEを指定してない場合はShowWindowでウィンドウを表示した時
に最初のWM_PAINTが送られて来たと思います。
これは「クライアント領域に無効領域がある時」に該当します。
記憶に頼って書いているので、違ってるかもしれません。自分でブレークポイントとかを張ってみて確かめてみて下さい。
どうも!回答ありがとうございます。
MSDNに スタイルに WS_VISIBLE を指定した場合は、さらに、ウィンドウのアクティブ化と表示に必要となるすべてのメッセージをウィンドウに送ります。
とありました。
もしかしたらこのことを指してるのかもしれませんね。
何で詳しく書いてないんだろ(><)
サンキューです。
No.3
- 回答日時:
WM_PAINTメッセージは、
1.自ウインドウのクライアント領域が可視化された時
>これは初めて表示する時や非表示から表示状態になった時です。
2.自ウインドウが能動的(自己処理として)に描画状態を変えた時
>これは最小化や最大化、移動などで“自スレッド管轄”で
自身スレッドにメッセージが送られます。
3.自ウインドウが他動的(別ウインドウによって)に自クライアント
領域に状態変化影響した時
>これは他のウインドウがアクティブである時、そのウインドウが
一方的に自ウインドウクライアント領域部分を隠した時で
再び自ウインドウがアクティブになった際、
影響を与えた他スレッド管轄から再描画メッセージが送られます。
この定義だったと思います。
どうも!回答ありがとうございます。
ネットいろいろ調べましたがなかなか、これに関する記述が見つからず
助かります。
どうもありがとうございました。
No.1
- 回答日時:
★アドバイス
>いつシステムから送られるかご教授をお願いします。
↑
自分で作成したウインドウの上に別のウインドウ(メモ帳など)が覆いかぶさり、
上に乗っていたウインドウが何処かに移動すると自分で作成したウインドウが
現れます。このときシステムから無効領域として WM_PAINT メッセージを処理
するように指示がでます。
・他にも最小化から元に戻すときや、サイズを変更した時にも WM_PAINT を処理
するようにシステムから指示が出ます。
・とにかく再描画が必要になったときにシステム(OS)より WM_PAINT で描画する
ように信号が出されるわけですよ。
だから
>WinMain()でUpdateWindow()もInvalidateRect()もつかっていないのですが。
↑
としなくても WM_PAINT で再描画されます。
・以上。
回答どうありがとうございます!
どうも!
Oh-Orangeさんの回答は他の方の回答でもいつも勉強になります。
できればWM_PAINTが最初に発生するタイミングも教えていただきたかったのですが。
また教えてください。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- 飛行機・空港 ミルウォーキーツールHDC大阪から伊丹空港へ乗り換え無しで行く方法はありますか? できれば、空港直通 2 2023/05/12 06:44
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- 発達障害・ダウン症・自閉症 数ヶ月前、ASD/ADHDの検査と共に、IQテストのようなものも受けたのですが、見方がよく分からない 2 2022/08/08 11:20
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
C# ゲーム作成 FPSと描画...
-
CDC(LineTo)で描画した線を透過...
-
[VB.net] DataGridViewの列ヘッ...
-
OneNote 2010 文字と描画がずれる
-
WM_PAINT
-
TextBoxに文字を書いても表示さ...
-
C言語(dxlib)のDrawboxについ...
-
VC++プログラムをつかったBMP画...
-
CS_HREDRAW|CS_VREDRAWについて
-
FPS処理について
-
Labelの文字をスクロールする際...
-
VB.netでのライン描画方法がわ...
-
pset関数について
-
Minecraft 統合版(PC)の描画距...
-
DirectXでXファイルの描画をす...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
グラフの交点の求め方(Excel)
-
フォントの大きさ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MFCでOnPaintのタイミング
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
NVIDIAのシェーダーキャッシュ
-
TextBoxに文字を書いても表示さ...
-
UpdateData( FALSE); による文...
-
VB6,リストボックスの特定行の...
-
PCで「使用可能な場合はグラフ...
-
VC++プログラムをつかったBMP画...
-
VBAにGDI+を参照させる方法
-
FlexGridの一部のみ表示を更新...
-
pset関数について
-
エクセルでガンチャートを作成...
-
C言語(dxlib)のDrawboxについ...
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
MFCのタイマーのつかい方を教え...
-
CStaticコントロールの静的イメ...
-
Windowのちらつき防止
-
GDI+で高速な描画
おすすめ情報