InvalidateRectの使い方ですが、ヘルプを見たところ、下記のように表記されていました。
BOOL InvalidateRect(
HWND hWnd, // handle of window with changed update region
CONST RECT *lpRect,
// address of rectangle coordinates
BOOL bErase // erase-background flag
);
しかし、実際、使ってみると
InvalidateRect(&rct,FALSE);とするだけで、コンパイルは通ります。
※&rctはlpRectのように再描画する領域を指定しています。
私の希望としては、指定した部分だけ再描画をかけ、指定外の部分は、再描画されず、画像がのこり、最終的には一つの絵となって欲しいのですが。
これは引数が2つだから起きているアクシデントなのでしょうか。
InvalidateRctの使い方を教えていただければと思います。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
こんにちは。
>>InvalidateRect(&rct,FALSE);とするだけで、コンパイルは通ります。
コンパイル出来たのは、MFCのCWndクラスのメンバ関数の方を書いたからではないでしょうか。
::InvalidateRect(HWND, const RECT*, BOOL)を内部で呼び出しているのです。
↓質問者様が書いたのは此れの事では?
void CWnd::InvalidateRect(const RECT* lpRect, BOOL bErase)
{
::InvalidateRect(m_hWnd, lpRect, bErase);
}
「CWnd::InvalidateRect(MFC)」
http://msdn.microsoft.com/ja-jp/library/2f3csed3 …
>>私の希望としては、指定した部分だけ再描画をかけ、指定外の部分は、再描画されず、画像がのこり、最終的には一つの絵となって欲しいのですが。
要するには、特定の領域を指定し、その部分に何かを表示したいと言うことでしょうか?
で、あるのでしたら BitBlt()/StretchBlt() 辺りで描写した方が手っ取り早いかもしれません。
「CDCのメンバ」
http://msdn.microsoft.com/ja-jp/library/4acfw2ha …
>>InvalidateRctの使い方
無理矢理再描写をさせる時位にしか使用した事が無いので、これ以上は筆舌に尽くしがたいです。
以下が参考になるかもしれません。
http://wisdom.sakura.ne.jp/system/winapi/win32/w …
後はMFCと言う物がどの様に構成されているかも理解しておくと、より良いと思います。
「MFCの階層図」
http://msdn.microsoft.com/ja-jp/library/ws8s10w4 …
No.2
- 回答日時:
InvalidateRectは、再描画しなくてはならない範囲をOSに指示するものです。
実際にウィンドウのどの部分を描画するかしないかはWM_PAINTハンドラの実装次第です。
ですので、残したい部分は描かないようにするか、ExcludeClipRect、ExcludeUpdateRgnといった関数を使って残したい部分をマスクするようにします。
No.1
- 回答日時:
>InvalidateRect(&rct,FALSE);とするだけで
貴方が呼び出しているのは
WindowsAPIのInvalidateRectではなくMFCのCWnd::InvalidateRectだからでしょう。
http://msdn.microsoft.com/ja-jp/library/2f3csed3 …
単にMFCがWindowsAPIをラップしているだけです。
::InvalidateRect(m_hWnd,&rct,FALSE);を呼び出しているのと同じです。
>指定した部分だけ再描画をかけ、
InvalidateRectは再描画が必要な領域をOSに知らせる為のものです。
アニメーションの用途でつかうものではありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ちょっと先の未来クイズ第2問
9月9日(月)に発表される「第3回子どもマネー川柳」に入賞する川柳を考えてこちらに投稿してください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
InvalidateRectがうまくいかない
C言語・C++・C#
-
画面全体を再描画させたい
その他(プログラミング・Web制作)
-
-
4
エディットコントロールの色の変更方法
C言語・C++・C#
-
5
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
6
正負を反転させて出力するプログラム
C言語・C++・C#
-
7
MFCダイアログボックスを最前面に表示
C言語・C++・C#
-
8
MFC ダイアログ上のID取得について
C言語・C++・C#
-
9
MFCでOnPaintのタイミング
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
MFCでOnPaintのタイミング
-
文字の行間
-
word
-
GetDC()→ReleaseDC、で打ったも...
-
BitBltでの表示での問題です。
-
VC++2010(MFC)での描画
-
移動する線を描画したい(何と...
-
Minecraft 統合版(PC)の描画距...
-
UpdateData( FALSE); による文...
-
画像の印刷について
-
Win32 API 途中から描画がおか...
-
最前面に無理やりフォームを持...
-
c言語を使いダイアログにbmpを...
-
ウインドウサイズを変更しても...
-
クライアント領域を再描画させ...
-
ダイアログベースの再描画について
-
C# ラバーバンドの描画を快適に...
-
画面リサイズ時のちらつきをな...
-
ボタン形のラベル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
word
-
NVIDIAのシェーダーキャッシュ
-
MFCでOnPaintのタイミング
-
Minecraft 統合版(PC)の描画距...
-
google Colabでmatplotlibの描...
-
TextBoxに文字を書いても表示さ...
-
[VB.net] DataGridViewの列ヘッ...
-
UpdateData( FALSE); による文...
-
OneNote 2010 文字と描画がずれる
-
Labelの文字をスクロールする際...
-
InvalidateRectの使い方について
-
VB.netでのライン描画方法がわ...
-
CStaticコントロールの静的イメ...
-
VC++プログラムをつかったBMP画...
-
WM_SIZEとWM_SIZINGの違い (Win...
-
エクセルでガンチャートを作成...
-
c言語を使いダイアログにbmpを...
-
WM_PAINT
-
MFCのタイマーのつかい方を教え...
おすすめ情報