ベストアンサー ウィンドウの再描画 2003/09/13 17:26 よろしくお願い致します。 環境 WIN98 VC++6.0 MFC にて ウィンドウをクリックしてダイアログを表示。 ダイアログのボタン押し下げでウィンドウを再描画させたいのですがどうすれば良いですか? みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー mk1234 ベストアンサー率30% (20/65) 2003/09/13 17:44 回答No.1 Invalidate(TRUE) ; 質問者 お礼 2003/09/13 17:45 ビンゴです 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発C・C++・C# 関連するQ&A 再描画について。 VC++のMFC、ダイアログベースで画像処理のソフトを作っている者 ウィンドウを動かしたり他のウィンドウを重ねたりすると描画した画像が消えてしまうので、 再描画をしたいのですが、方法が分かりません。 分かる方がいらっしゃいましたらよろしくお願いいたします。 ダイアログの表示、非表示の切り替えについて 環境 WIN98 VC++6.0 MFC SDIにて 1.ポップアップメニューの”ダイアログ作成”をクリックすると、 void CMainFrame::OnKNew() { CInput dlg; int iID = dlg.DoModal(); } として、ダイアログを作成します。 2.次に、ダイアログのボタン押し下げにてダイアログを非表示にします。 void CInput::OnButton1() { ShowWindow(SW_HIDE); } このようなコードにおいて、非表示状態での”ダイアログ作成”クリックでは非表示から表示に切り替えることを実現するにはどのようにすれば良いのでしょうか? よろしくお願いいたします。 デスクトップへの描画 環境 WIN98 VC++6.0 MFC にて ダイアログベースにて デスクトップにキャラクターを書くために、 BOOL CXXX::OnInitDialog(){ キャラクタのリージョンの作成; キャラクタの描画; //ここでは描画されなかった 略 } としましたが、キャラクタは描画されませんでした。 そこで以下のようにしましたが、キャラクタが書かれる前に、リージョンが先に一瞬見えてしまいます。 このような場合はどうすれば良いのでしょうか? void CAdvancedRgnDlg::OnPaint() { キャラクタの描画; } ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム ウィンドウのフレームの色変更 <環境> Win98 VC++6.0 MFC よろしくお願いします。 ダイアログのボタン押し下げにて、新規にウィンドウを作成しています。 新規に作成したウィンドウのクライアント領域の色は、 CPaintDC dc(this); // 描画用のデバイス コンテキスト CRect cr; GetClientRect( &cr); dc.FillSolidRect( cr, RGB( 250, 250, 0)); dc.DrawText( moji,cr, DT_SINGLELINE | DT_VCENTER | DT_CENTER); にて変更することが出来ました。 クライアント領域の外側にあるフレームの色も変更したいのですが、 どのようにすれば実現可能でしょうか? ご存知の方、教えてください。お願いします。 ダイアログでの再描画 こんばんわ。 ダイアログに2つBMPが表示されているとします。 説明上、AとBとします。 なんらかの処理後、 Aを表示したまま。 Bを表示されないよう消去したいのです。 コントロールを指定して描画をできないものでしょうか? 現在、 Invalidate(FALSE); GetDlgItem(IDCxxx)->Invalidate(TRUE); と、AもBも消去されないように残した後、 Bだけ再描画させて表示しないようにさせたのですが、 うまく動きません・・・。 宜しくお願いします。 Win98、VC++6.0、MFCで作成してます。 複数のダイアログの作成について 環境 WIN98 VC++6.0 MFC SDIにて 1.メニューの”ダイアログ作成”をクリックすると、 void CMainFrame::OnKNew() { CInput dlg; int iID = dlg.DoModal(); } として、ダイアログを作成します。 2.次に、ダイアログのボタン押し下げにてダイアログを非表示にします。 void CInput::OnButton1() { ShowWindow(SW_HIDE); } このようなコードにおいて、一旦非表示にした後で、また”ダイアログ作成”メニューにてダイアログを作成した場合、 1.これは新たに2個目のダイアログが作られたのでしょうか? 2.それとも、単に最初に作られたダイアログが非表示から表示状態になっただけでしょうか? 3.それとも、最初のダイアログの上に2個目のダイアログが上書きされてしまうのでしょうか? 以上よろしくお願いします。 ウィンドウを作成するには win98 VC++6.0 MFCにて 今ふと疑問に思ったのですが、 ダイアログのボタンを押すと、何かウィンドウが開き、続けてボタンを押すと、新たにまたウィンドウが開くようなプログラムはどうすれば実現できるのでしょうか? 参考になるサイトなどありますでしょうか? 非表示のメインウィンドウを表示させるには? 環境 WIN98 VC++6.0 MFC SDIにて タスクトレイに常駐するアプリにおいて 1.起動時にメインウィンドウを非表示にしています。 2.起動時と同時にダイアログを表示しています。 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { 略 dlg = new CInput(this); dlg->Create(IDD_DIALOG1); dlg->ShowWindow(SW_SHOW); return 0; } 3.このような場合に、ダイアログのボタン押し下げにて、メインウィンドウを表示させるには、どうすれば良いでしょうか? 以下のようにしてみましたが、不正な処理で落ちてしまいます。 void CInput::OnButton1() { CWnd* mywnd = (CWnd*)GetParent(); mywnd->ShowWindow(SW_SHOW); } 子ウィンドウから親ウィンドウへデータを渡すには? 宜しくお願いします。 <環境> WIN98 VC++6.0 MFC ダイアログのボタン押し下げでウィンドウを生成し、ダイアログのテキストボックスに入力した文字をウィンドウに表示しています。 また、ウィンドウ生成後はダイアログを非表示にしています。 void CInput::OnButton1()//ウィンドウの生成 { UpdateData (TRUE); pWnd = new CMyWnd( this); pWnd->m_moji=m_InputData; //テキストボックスの文字をウィンドウに表示されるう変数m_mojiに代入 pWnd->Kado_Create(this); ShowWindow(SW_HIDE); //ダイアログの非表示 } ウィンドウをダブルクリックすると、ダイアログを非表示から表示にし、ウィンドウに表示されている文字をダイアログのテキストボックスに表示させるために以下のようにしましたが、文字は表示されません。 どのようにすれば表示されるようになりますか? void CMyWnd::OnLButtonDblClk(UINT nFlags, CPoint point) { CInput* pInput = (CInput*)GetParent(); // CInputは親ダイアログのクラス pInput->m_InputData=m_moji;//変数に正しい文字が代入されていることは確認できました UpdateData(FALSE); pInput->ShowWindow(SW_SHOW); CWnd::OnLButtonDblClk(nFlags, point); } SendMessage();の使い方 よろしくお願いします。 <環境> WIN98 VC++6.0 MFC SDIにてウィンドウをクリックすると、モードレスダイアログ1とモーダルダイア ログ2が開くようにしました。 void CMy222View::OnLButtonDown(UINT nFlags, CPoint point) { CDlg1 *dlg; dlg = new CDlg1; dlg->Create(IDD_DIALOG1); dlg->ShowWindow(SW_SHOW); CDlg2 dlg2; dlg2.DoModal(); CView::OnLButtonDown(nFlags, point); } ダイアログ2のボタン押し下げにてダイアログ1のボタン1を押し下げたいのですが 、どのようにすれば実現できるのでしょうか? void CDlg2::OnButton2() { SendMessage(); //■ここの書き方が分かりません CDialog::OnOK(); } 宜しくお願いいたします。 ダイアログの再表示について 宜しくお願いします。 <環境> WIN98 VC++6.0 MFC ダイアログのボタン押し下げでウィンドウを生成し、 生成後はダイアログを非表示にしています。 void CInput::OnButton1()//ウィンドウの生成 { UpdateData (TRUE); pWnd = new CMyWnd( this); pWnd->m_left=100; pWnd->m_top=100; m_pAryDlg.Add ( pWnd ); //m_pAryDlg2.Add ( &m_InputData ); pWnd->m_moji=m_InputData; pWnd->Kado_Create(this); ShowWindow(SW_HIDE); //ダイアログの非表示 } ウィンドウをダブルクリックすると、ダイアログが非表示から 表示になるように以下のコードを書きましたが、表示されません。 どのようにすれば表示されるようになりますか? void CMyWnd::OnLButtonDblClk(UINT nFlags, CPoint point) //ウィンドウのダブルクリック { CInput* pInput = (CInput*)GetParent(); // CInputは親ダイアログのクラス pInput->ShowWindow(SW_SHOW); CWnd::OnLButtonDblClk(nFlags, point); } 「VC++6」ウィンドウの再描画 VC++6を使って簡単なプログラムをダイアログベース作っています。 内容はリストを読み込み、1件ずつDBにSQLを発行して情報を取得していくという内容です。 画面には、プログレスバーも設置しており、普通に操作すると正常に、プログレスバーも動きます。しかし、いったん別のウィンドウをアクティブにして、作成した動作中のプログラムを再選択しても、画面は壊れたまま再描画されません。しばらくまって、リストのSQL発行が終わって、画面に結果が表示されたら、きちんと再描画されます。 そこまで処理が終わったら、他のウィンドウに切り替えて戻ってきても画面が壊れることはありません。 時間がかかるプログラムなので、動作中に別の仕事をするため、アクティブでなくても、きちんとウィンドウを更新したいのです。 ちなみに、ループ処理中にRedrawWindow();を入れてみましたがダメでした。 アドバイスよろしくお願いします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム ダイアログをアクティブにするには? よろしくお願い致します。 環境 WIN98 VC++6.0 MFC にて ダイアログを非表示から dlg->ShowWindow(SW_SHOW);にて 表示にしましたが、アクティブ状態になっていません。 アクティブにするにはどうすれば良いですか? ダイアログベースの再描画について 現在VC++6.0、MFC、ダイアログベースでアプリケーションの作成を行っているのですが、長いことつまづいてしまっているので質問させていただきます。 もともとあるアプリケーションに機能を追加、ということを行っているのですが、リソースで作ったボタンとエディットボックスが、ダイアログの最小化や最大化を行うと再描画されずに消えてしまいます。しかし、元々作ってあったボタンやエディットボックスはそのまま正常にのこっています。このアプリケーションの作成者には連絡することができず、ネットでも情報を探しましたが、解決しません。これを解決するにはどういった修正が必要でしょうか? 知識不足のため説明不足や、説明に間違いがあるかもしれませんが、ご教授願えますと幸いです。 ダイアログベースのウィンドウメッセージについて Win2kのVC++6.0 MFC ダイアログベースでのウィンドウメッセージ処理で困っています。 OnCharがダイアログでは認識できません。ウィンドウでは認識できます。 何か特別な処理が必要なのでしょうか? アプリ起動時にダイアログも開くには? <環境> WIN98 VC++6.0 MFC SDIにて アプリ起動時に、SDIは非表示にしているおり、さらに同時にダイアログも非表示で開きたいのですが、ダイアログのコードはどこに書けばよいのでしょうか? WIndows3.1 ウィンドウの描画 Windows3.1では、ウィンドウの再描画を行う時、再描画を行う範囲を指定することは出来るのでしょうか? 例えば、リストボックスにデータを追加表示し、再描画の処理を行う時に、(リストボックスを含むウィンドウ全体ではなく、)リストボックスのみを再描画することは可能でしょうか? WindowsNTでは、指定範囲の再描画を行う事はできると思うのですが。 以上、よろしくお願いします。 WIndows3.1 ウィンドウの描画 Windows3.1では、ウィンドウの再描画を行う時、再描画を行う範囲を指定することは出来るのでしょうか? 例えば、リストボックスにデータを追加表示し、再描画の処理を行う時に、(リストボックスを含むウィンドウ全体ではなく、)リストボックスのみを再描画することは可能でしょうか? WindowsNTでは、指定範囲の再描画を行う事はできると思うのですが。 以上、よろしくお願いします。 非クライアント領域への描画について 非クライアント領域に文字を書こうとしました。 以下の(2)では書けますが、(1)では書いてくれません。 CPaintDCはクライアント領域でないとダメなのですか? void CMainFrame::OnPaint() { CPaintDC dc(this); // 描画用のデバイス コンテキスト dc.TextOut(0,0,"こんにちは"); ・・・(1) CDC* pDC = GetWindowDC(); pDC->TextOut(100,0,"こんにちは"); ・・・(2) 環境 WIN98 VC++6.0 MFC MFC 6.0 VC++ で、処理が重くなります。 MFC 6.0 VC++ で、処理が重くなります。 上記の環境でダイアログベースで処理を作成しています。 画面の再描画を繰り返すと、同じ処理をしていても処理が重くなります。 OnPainメッセージを受け取ったあとに、描画処理を行っているのですが、画面に表示に必要な計算も描画時に行っています。 仮想ウィンドウに描画してBitBlt()を実行する方法も試しましたが、ちらつかなくなった代わりに余計に処理が重くなりました。 描画のやり方が問題なのか、内部の処理が問題なのか良く分からないのですが、何か良い方法が無いでしょうか? そもそもダイアログベースで画像処理をしているのが間違いな気もするのですが・・・。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
ビンゴです