現在windowsプログラミングを勉強しています。
まだまだはじめたばかりでwindowsプログラミングの把握できていない部分が多々あるので、何か使い方が根本的に間違えているところがあるかもしれませんが、ご容赦ください。
case WM_PAINT:
hdc=BeginPaint(hdc,&ps);/*rc,hdc等は宣言済み*/
TextOut(hdc,0,0,szStr,(int)strlen(szStr));/*szStr="文字列"代入済み*/
EndPaint(hWnd,&ps);/*hWnd等は宣言済み*/
break;
において、
1.ダブルクリックしたら表示させよう!と思いまして、
WM_PAINT→WM_RBUTTONDBLCLKSと変更したところ表示されなくなりました。
しかし、hdc取得をGetDCで行うとうまくいきました。この違いがよくわかりません。
2.次はダブルクリックすると文字を右に動かそう!と思いまして、
TextOut(hdc,i,0,・・・・)などといたしましてiを増やしたところ更新前の画像が残りました。そこでInvalidateRectによって背景消去しようとおもいまして、TextOutの前に挿入しましたがこれによっても初めから、クリック後も何も表示されなくなりました。
1と2の2点に関して、どなたかご教授いただけないでしょうか。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
これは、
case WM_PAINT:
hdc=BeginPaint(hdc,&ps);
TextOut(hdc,0,0,szStr,(int)strlen(szStr));
EndPaint(hWnd,&ps);
break;
1.ダブルクリックしたら表示させよう!
case WM_RBUTTONDBLCLK:
hdc=GetDC(hdc); // GetDC()はWM_PAINT以外で使う
TextOut(hdc,0,0,szStr,(int)strlen(szStr));
ReleaseDC(hWnd, hdc);
break;
2.ダブルクリックすると文字を右に動かそう!
case WM_RBUTTONDBLCLK:
hdc=GetDC(hdc); // GetDC()はWM_PAINT以外で使う
TextOut(hdc,i+=10,0,szStr,(int)strlen(szStr));
ReleaseDC(hWnd, hdc);
break;
ただし、ここまででは最小化等すると消える。
1.ダブルクリックしたら表示させよう!
case WM_RBUTTONDBLCLK:
InvalidateRect(hWnd, NULL, TRUE); // WM_PAINTで再描画
break;
case WM_PAINT:
hdc=BeginPaint(hdc,&ps); // BeginPain()はWM_PAINT のみで使う
TextOut(hdc,0,0,szStr,(int)strlen(szStr));
EndPaint(hWnd,&ps);
break;
2.ダブルクリックすると文字を右に動かそう!
case WM_RBUTTONDBLCLK:
InvalidateRect(hWnd, NULL, TRUE); // WM_PAINTで再描画
break;
case WM_PAINT:
hdc=BeginPaint(hdc,&ps); // BeginPain()はWM_PAINT のみで使う
TextOut(hdc,i+=10,0,szStr,(int)strlen(szStr));
EndPaint(hWnd,&ps);
break;
最小化等した場合は、WM_PAINTが自動的に呼ばれる。
No.2
- 回答日時:
2.の原因も分かったかも。
まず、ウィンドウの描画は基本的にWM_PAINTの中で行うべきです。そうしないと、別のウィンドウが重なった場合などに、表示が消えてしまいます。
InvalidateRectは、背景を消去するのではなく、ウィンドウに無効な領域(再描画が必要な領域)があることをWindowsに知らせます。Windowsはその部分を描画させるために、WM_PAINTメッセージを送信してきます。
なので、TextOutで描画したとしても、後からWM_PAINTの処理によって上書きされてしまいます。
No.1
- 回答日時:
1.については、BeginPaintのリファレンスに書かれています。
> アプリケーションがこの関数を呼び出せるのは、WM_PAINT メッセージに応答するときだけです。
http://msdn.microsoft.com/ja-jp/library/cc428337 …
2.については、どのようにコードを加えたのかが分からないと答えようがありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 飛行機・空港 ミルウォーキーツールHDC大阪から伊丹空港へ乗り換え無しで行く方法はありますか? できれば、空港直通 2 2023/05/12 06:44
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- その他(プログラミング・Web制作) ワードプレスのプラグインであるAddQuicktagを使いたいが… 3 2022/04/18 15:03
- Excel(エクセル) Excelのセル上の日付の不具合 3 2022/05/22 18:20
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- WordPress(ワードプレス) WordpressでYouTubeの埋め込みができない。 1 2022/10/26 01:08
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンテキスト依存とは?
-
ダブルバッファの作り方
-
VC++のTextOutの再描画の仕方
-
GetDC()とCreateCompatibleDC()
-
BeginPaintの使い方
-
エクセルで作った新しいウイン...
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
-
フォントの大きさ
-
コントロールの書式設定で、“コ...
-
VBAのフォント変更(エクセルか...
-
vbaから他のアプリを終了
-
コンボボックス内の文字サイズ変更
-
ExcelのBOOKが消えた!
-
エクセルのコントロールツール...
-
ドロップダウンリストのフォン...
-
検索の画面がでなくなってしま...
-
ラジオボタンの初期指定
-
メッセージボックスを大きくす...
-
DateTimePickerでに年月までし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンテキスト依存とは?
-
Win32APIにて、アイコンの情報...
-
画面がチカチカする
-
PlgBltでの透過
-
GetDC()とCreateCompatibleDC()
-
VBでFD、USBの有効・無効...
-
VC++でBitmapとText文字を表示...
-
メモリデバイスコンテキスト&...
-
画像処理 ビットマップ ダブ...
-
コントロール内の文字の背景色
-
BitBlt関数について教えてください
-
Rectangleで、リソースが解放さ...
-
Windowsプログラミング 画面描...
-
ビットマップ(表示速度とサイズ)
-
画面のちらつきについて
-
メモリデバイスコンテキストを...
-
TextOutについて
-
SetWindowRgn()関数について。
-
領域を塗りつぶしたい
-
ダブルバッファの作り方
おすすめ情報