• ベストアンサー

デスクトップへの描画

環境 WIN98 VC++6.0 MFC にて ダイアログベースにて デスクトップにキャラクターを書くために、 BOOL CXXX::OnInitDialog(){ キャラクタのリージョンの作成; キャラクタの描画; //ここでは描画されなかった 略 } としましたが、キャラクタは描画されませんでした。 そこで以下のようにしましたが、キャラクタが書かれる前に、リージョンが先に一瞬見えてしまいます。 このような場合はどうすれば良いのでしょうか? void CAdvancedRgnDlg::OnPaint() { キャラクタの描画; }

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>>リージョンが見えるの意味は? >キャラクターの形をしたウィンドウが見えるということです。 >まだ、キャラクターそのものは描かれていない状態です。 であれば、遅いだけです。 描画ロジックを見直しましょう。 「仮想画面」、「BitBlt」等のキーワードでいろいろ出てくるかも。 >起動時に当然のことながら、キャラクタが最初から現れてほしいのに、 >最初にキャラクタの形をした背景色のウィンドウがチラッと見えます。 参考urlと同じようにダイアログを使用しているのであれば、WM_ERASEBKGNDを処理してしまえばいいのでは? ダイアログの背景の描画処理を省けばいいだけだと思いますけど。

VitaminBB
質問者

お礼

回答ありがとございます。 ようやく対策できました。 BOOL CXXX::OnInitDialog(){ キャラクタのリージョンの作成; キャラクタの描画; //ここでは描画されなかった 略 } 「ここでは描画されなかった」のところで描画すればライムラグは無くなりました。 #最初に描画されなかった原因は、背景を書かないようにしようとして逆にキャラクタの方を書いていませんんでした。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

リージョンが見えるの意味は? リージョンはあくまでも描画範囲(やウィンドウの形)を指定するものです。 リージョンの使い方と詳しい状況を。

VitaminBB
質問者

お礼

回答ありがとうございます。 付箋紙PGが完成したので、さて次はと思っていた時に、以前わざわざ検索結果を教えて頂いた中にデスクトップアクセサリなるものがあったことを思いだし見てみました。 デスクトップで猫が動いたりしてなかなか面白かったので、自分でも作ってみようと思いました。 そこでまず以下サイトを参考に始めました。 http://plaza2.mbn.or.jp/~yoshio2/vcmemo4-1.html

VitaminBB
質問者

補足

>リージョンが見えるの意味は? キャラクターの形をしたウィンドウが見えるということです。 まだ、キャラクターそのものは描かれていない状態です。 >リージョンの使い方と詳しい状況を。 お礼に書いた参考サイトそのものです。 起動時に当然のことながら、キャラクタが最初から現れてほしいのに、最初にキャラクタの形をした背景色のウィンドウがチラッと見えます。

関連するQ&A

  • 再描画について。

    VC++のMFC、ダイアログベースで画像処理のソフトを作っている者 ウィンドウを動かしたり他のウィンドウを重ねたりすると描画した画像が消えてしまうので、 再描画をしたいのですが、方法が分かりません。 分かる方がいらっしゃいましたらよろしくお願いいたします。

  • 非クライアント領域への描画について

    非クライアント領域に文字を書こうとしました。 以下の(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

  • ウィンドウの再描画

    よろしくお願い致します。 環境 WIN98 VC++6.0 MFC にて ウィンドウをクリックしてダイアログを表示。 ダイアログのボタン押し下げでウィンドウを再描画させたいのですがどうすれば良いですか?

  • 変数の宣言場所について

    <環境> WIN98 VC++6.0 MFC  ダイアログベースにて 変数の宣言をグローバルにするとコンパイルはOKですが、 実行時にダウンしてしまいます。 グローバルに変えるだけでこのようなことがどうして起きるのでしょうか? CBitmap m_p[2];//エラー void CxxxDlg::OnPaint() { CBitmap m_p[2];//OK

  • タブコントロール上のピクチャーコントロールへの描画

    お世話になっております。 VC2005を使用しております。 SDIベースです。 ダイアログを作成し、その上にタブコントロール(2ページ)を作成しました。 タブコントロールの1ページ目にピクチャーコントロールを配置し、ピクチャーコントロール上に描画を行おうと思うのですが、正常に動作しません。 OnPaintの中で描画を行っているのですがだめのようです。 タブコントロール外に、ピクチャーコントロールを配置すると描画する事ができます。 どのような、タイミングで描画を行えばよいのでしょうか? 教えてください。 よろしくお願いします。

  • デスクトップマスコットの作り方

    環境 WIN98 VC++6.0 MFC にて MFCにて デスクトップでキャラクターが動くPGの作り方を教えてくれるサイトをご存知の方がみえましたら紹介ください。

  • CStaticコントロールの静的イメージ描画

    はじめまして、質問させてください。 VC++ 2005 MFC で開発しております。 Picture Control(DDX CStasic型)に イメージ(外部ファイル JPG)を静的に描画させたいのですが 方法がわかりません。 お詳しい方がおられましたら、ご教授お願いいたします。 ちなみに CImageを使用して描画はできるのですが その場合、OnPaintをオーバーライドして 描画更新処理を書かないと一度だけ描画されて終わって しまうと思います。 CStaic変数にロードしたら 再度ロードされるまで ずっと描画させていたいです。 以上になります。 宜しくお願いいたします。

  • テキストの画像描画について

    初投稿失礼致します。 現在、VC++2003にてダイアログベースのアプリケーションを作成中です。 内容は、テキストファイルに記載されている文字をダイアログに画像として表示する、というものです。1行ずつTEXTOUTで描画していくやり方でやってみています。 現在画像表示はされるものの、テキストファイルの容量が大きくなると、ダイアログのサイズを描画サイズが上回り、表示がおかしくなる、という状態です。 これを解消するためスクロールバーを導入し、ダイアログ内に収まるようにしようと考えたのですが、関数の使い方が分からず作業が頓挫してしまいました。この内容について、どなたか解決策、代替案を思いつける方がいらっしゃいましたら、ご助力をお願い致します。 以下は画像描画に関する所について私がコーディングしたものです。 ScrollWindowEx関数について、理解ができないため、NULLが許される箇所にはNULLと代入してしまっています。 _____________________________________________________________ void COCRDiffToolDlg::OnPaint() { dc.SetBkColor(RGB(255,255,255)); int nXStart = 450; int nYStart=5; for(int i =0; i < 200;i++){   dc.TextOut(nXStart,nYStart,imgText1[i]/*テキストファイルを1行ずつ分割したもの*/);   nYStart = nYStart + 10;   ScrollWindowEx(100,600,NULL,NULL,NULL,NULL,SW_INVALIDATE); } } _____________________________________________________________

  • ダイアログでの再描画

    こんばんわ。 ダイアログに2つBMPが表示されているとします。 説明上、AとBとします。 なんらかの処理後、 Aを表示したまま。 Bを表示されないよう消去したいのです。 コントロールを指定して描画をできないものでしょうか? 現在、 Invalidate(FALSE); GetDlgItem(IDCxxx)->Invalidate(TRUE); と、AもBも消去されないように残した後、 Bだけ再描画させて表示しないようにさせたのですが、 うまく動きません・・・。 宜しくお願いします。 Win98、VC++6.0、MFCで作成してます。

  • OnPaint() とOnNcPaint()

    環境 WIN98 VC++6.0 MFC メインウィンドウの子として作成したウィンドウにおいて OnPaint()内でメンバ変数を以下のように変更しました。 void CMyWnd::OnPaint() {   aaa=99; ところが、OnNcPaint()内ではaaaが99になってません どうしてなのでしょうか? void CMyWnd::OnNcPaint() {   aaa;  //ここでは99になってない とOnNcPaint()

専門家に質問してみよう