ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 17:56

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2009年7月30日(木) 21:25 
オフライン

登録日時: 2008年7月30日(水) 23:50
記事: 23
RADで作ったWNDにボタンがたくさんあります。そこにhMemDCを貼ると、ボタンが消えます。どうやって再描画するんですか?WNDのサイズを変えると再描画されますが・・・。
また、この方法(再描画しまくるところにボタンを設置する)は効率が悪いですか?やり方を変えようかとも思っています。

XP、ActiveBasic4.23.00p

よろしくおねがいしまするm(__)m。        知恵コイン500枚


通報する
ページトップ
投稿記事Posted: 2009年8月01日(土) 00:26 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
> RADで作ったWNDにボタンがたくさんあります。そこにhMemDCを貼ると、ボタンが消えます。

まずは一応確認ですが、「hMemDCを貼る」とは、hMemDC を ウィンドウの hDC に BitBlt() するということですね?

> どうやって再描画するんですか?WNDのサイズを変えると再描画されますが・・・。

一般的に、個別の子ウィンドウ(ボタン等)に関する処理は、子ウィンドウに直接メッセージを送りつけて解決します。
が、今回の問題(再描画)の管轄である WM_PAINT メッセージは専用の UpdateWindow 関数が用意されているので、そちらを使いましょう。
詳しくは⇒UpdateWindow 関数(MSDN ライブラリ)
コード:
Dim hWndBtn As HWND 'ボタンのウィンドウハンドル
hWndBtn = GetDlgItem(hMainWnd, CommandButton1)
InvalidateRect(hWndBtn, ByVal NULL, TRUE) ' 更新リージョンを追加して
UpdateWindow(hWndBtn) ' 再描画!
しかし、わざわざ再描画などしなくてももっと簡単な方法があります。

RAD ツールで「子ウィンドウをクリップ」にチェックを入れるだけです。

これで Windows が自動的にボタン等の子ウィンドウを避けて描画してくれます。

> また、この方法(再描画しまくるところにボタンを設置する)は効率が悪いですか?やり方を変えようかとも思っています。

効率がどのくらい悪いのかは知りません。
これは必要に応じて実測してみるしか・・・。
ただ、余程レスポンスが悪いだとかの問題がなければ、たとえ多少効率悪かろうが気にする必要はないと思います。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2009年8月01日(土) 01:12 
オフライン

登録日時: 2008年7月30日(水) 23:50
記事: 23
takさん ご親切にありがとうございます!!!^^
とてもよくわかりました!!! 


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Google [Bot] & ゲスト[20人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean