VCで簡単な2DのCADを作ろうと思っています
VCの初心者用の本(MFC)のサンプルを見ながらやっていますが
直線や円などの描画速度が市販のCADに比べて3倍位時間がかかってしまいます。
線の描画速度を上げるにはどんな方法があるのでしょうか

このQ&Aに関連する最新のQ&A

A 回答 (3件)

単純に線を書き込むのが遅いというのを


早いで言えば、Direct3Dでワイヤーフレームで表示することではないでしょうか?8になってから、えらく簡単になりました。
もしくは、DirectDrawにてサーフェイスメモリ(システム)をロックし、きちんと最適化した独自のアルゴリズムで書き込んだほうが早い場合もあります。
GDIなどはなにげに遅かったりしますので、上記のものを利用してみてはいかがでしょうか?
    • good
    • 0
この回答へのお礼

やっとワイヤーフレームで表示させることができました
どうもありがとうございました。

お礼日時:2001/12/06 05:10

何の速度が遅いのかは、実際に見比べてみないと判りませんが


私が描画するときは次のような方法で行っています。

メモリデバイスコンテキストを作成してこれに描画します。
このメモリデバイスコンテキストを出力デバイスコンテキストに
コピーする。

こうすると、すばやく画面に表示されます。

この回答への補足

メモリデバイスコンテキストってこういう時に使うんですね
これからメモリデバイスコンテキストを使っていろいろ試したいと思います

補足日時:2001/11/09 11:40
    • good
    • 0

機種依存についてはどうですか?


CPUやビデオカードに左右される部分だと思われるのですが…。

この回答への補足

いくつかのパソコンで試しましたがあきらかに
描画速度(線を5000本位書く)が違うのです
いまはMFCだけでプログラミングしていますが
描画速度に効果的なもの(Direct X や API)などほかにもあると思いますが
一番効果的なものから学習していきたいと思っています。

補足日時:2001/11/08 10:51
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVC++ MFC フォルダサイズの表示

こんばんは。
エクスプローラのフォルダのプロパティを表示させたときの
ように
ダイアログを表示してから
フォルダサイズの表示が変わるようにしたいのですが
やり方がわかりません。
お分かりになる方、ご回答よろしくお願いします。

Aベストアンサー

★アドバイス
・ファイルサイズの計算中にダイアログにその数値を表示する仕組みを作って下さい。
 つまり、ファイルサイズを計算するループ中にダイアログに加算したサイズを
 SetDlgItemText() などで表示します。あとループ中にメッセージの処理をする
 記述をしないとダイアログ画面が真っ白になってフリーズ状態の感じになります。
 画面の更新の為にメッセージを処理する PumpMessage() などを1行記述すればよい。
・ファイルサイズの計算は再帰処理をしていると思うのでフォルダ検索の最後の部分で
 ダイアログへ加算結果を表示するようにします。
・以上。

参考URL:http://msdn2.microsoft.com/ja-jp/library/t1tkd768(VS.80).aspx,http://forums.belution.com/ja/vc/000/186/57s.shtml

QVC++ExpressEdition2005でのMFC利用

Visual Stdio Express Edition 2005 C++のMFCに関して質問させてください。

とあるプロジェクトをコンパイルしますと,
"AFXWIN.H":No such file or directoryとのエラーが出ます。
調べて見たところ,AFXWIN.hはMFCだと言う記述を目にしました。
そして公式サイトの記述によりますと,
>MFCとATLはVisual C++ 2005 Express Editionには含まれません。MFCとATLは、その他のすべてのVisual Studio2005エディションに含まれる予定です。
なのだそうです。
ですので,MFCを含むプログラムをこのソフトでやるのは無理かな?
と思ったのですが,PSDKをインストールすればExpressEditionでも出来る,
という事も聞きました。
結局真実がどうなのかがわからなくなってしまいました。

Visual C++ 2005 Express EditionではMFCは使えるのかどうか?
またもしExpressEditionで使えないのならば,どれなら使えるのか?(Standard?Professional?)
ご存知の方いらっしゃいましたらご鞭撻どうぞ宜しくお願いいたします。

Visual Stdio Express Edition 2005 C++のMFCに関して質問させてください。

とあるプロジェクトをコンパイルしますと,
"AFXWIN.H":No such file or directoryとのエラーが出ます。
調べて見たところ,AFXWIN.hはMFCだと言う記述を目にしました。
そして公式サイトの記述によりますと,
>MFCとATLはVisual C++ 2005 Express Editionには含まれません。MFCとATLは、その他のすべてのVisual Studio2005エディションに含まれる予定です。
なのだそうです。
ですので,MFCを含むプログラムをこのソフトでや...続きを読む

Aベストアンサー

やはり記憶は正しかったようですね。

> なんだか致命的なことが足りないのだな,ということは察しました。

致命的かどうかは何ともいえません。

実際、MFC 1.0の頃(当時はVisual C++ではなく、Microsoft C/C++ 7.0でした)は、何とかウィザードなしで、みんな手作業でコーディングしていましたし、Borland C++、C++ BuilderX、CodeWarrior等に付属のMFCも似たような状況ですから、面倒ですがやってやれないことはありません。

QMFC 分割ウィンドウのそれぞれ窓の描画に関して

MFCプログラミング初心者ですが、宜しくお願いいたします。

---------------プログラム環境---------------
WinXP2 Visula Studio 2005 Pro
--------------------------------------------

現在、上記の環境で、SDIプログラムを書いています。
ご教示していただきたいことは、分割ウィンドウにおけるそれぞれの窓の
表示内容を変えたいということです。TCP/IPのプログラムで、受信したMessageをstrstrなどで振り分けて、各々の窓に表示したいのですが、
どういう風にやればいいのですか??
なお、一つのViewに受信メッセージを表示させることは出来ました。
非常に困っています。

現在、CMainFrame::OnCreateClient(~~~)とMainFrame.cppに書き、
ウィンドウを3分割にしております。

m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateStatic(&m_wndSplitter,2,1,WS_CHILD | WS_VISIBLE,WS_BORDER,m_wndSplitter.IdFromRowCol(0,1));

m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(??View)),~~
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(??View)),~~
m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(??View)),~~

この用に記述しております。

説明しずらいのですが、??Viewの箇所にスケルトンの時にできていたView
クラスを入れてやると、そのエリアに受信メッセージが表示されます。
初心者なので、まと外れかもしれませんが、新しいViewクラスを作成して
なにかやれば、よいのでしょうか?? 現在3つのウィンドウにそれぞれの
メッセージを表示させたいので、Viewクラスはそれぞれ3個なければ、いけないのでしょうか??
わかりずらい説明で申し訳ないですが、宜しくお願いいたします。

MFCプログラミング初心者ですが、宜しくお願いいたします。

---------------プログラム環境---------------
WinXP2 Visula Studio 2005 Pro
--------------------------------------------

現在、上記の環境で、SDIプログラムを書いています。
ご教示していただきたいことは、分割ウィンドウにおけるそれぞれの窓の
表示内容を変えたいということです。TCP/IPのプログラムで、受信したMessageをstrstrなどで振り分けて、各々の窓に表示したいのですが、
どういう風にやればいいのですか??
なお、一...続きを読む

Aベストアンサー

MFCのクラスをそのまま使うってことはないかもしれないけど
あえてそれを無視して、という前提で。

左側は
((CEditView *)m_wndSplitter.GetPane(0,0))->SetWindowText("左だよ");
右側の上は
((CEditView *)m_wndSplitter1.GetPane(0,0))->SetWindowText("上だよ");
右側の下は
((CEditView *)m_wndSplitter1.GetPane(1,0))->SetWindowText("下だよ");
かな。

#実際はSetWindowTextなんか使わないと思うけど、
#ここは一例ということで。

QVC++のMFCでエラーが出ます

MFCを使って、本を見ながらMDIアプリケーションを作ったのですが、実行してみるとカーソルがツールバーのところへ来ると「ハンドルされていない例外です」というエラーが出ます。このエラーは最初に実行したときには起こらないのですが、2回目以降の実行で起こり、また、MFCで作った他のアプリケーションでもこのエラーが起こるようになります。
 オンラインヘルプを見て、サービスパックをインストールしたのですが直りません。VC++も再インストールしました。これはWindowsを再インストールするべきなのでしょうか?どなたか、私と同じ状況になられた方いらっしゃいますか?是非とも教えていただきたいです。「3週間マスター」どころじゃないです。お願いします。

Aベストアンサー

補足から...

 デバッグが、出来ますし、修正も可能です。

 また根性があるのなら...MFCをラッピングした独自クラスの作成も可能です。

 また、環境の責任かどうかを調べる為に、releaseで作成したアプリケーションを、別のパソコンで動作させてみてはどうでしょうか?
 それで問題なければ、開発環境が変になっている可能性が高いですので、OSの再セットアップから行った方が気分が良いと思います。

QMFC VC++ で4G以上のファイルの読み書き

MFC VC++ で4G以上のファイルの読み書きをしたいのですが何を使えばよいのでしょうか?

Aベストアンサー

64 ビット環境向けなら size_t が64 ビット化されているので標準の C ライブラリで大丈夫……なのかなぁ。
https://msdn.microsoft.com/ja-jp/library/3b2e7499.aspx

そうでないなら Win32 API の助けを借りることになりそうです。
http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+200505/05050046.txt
https://msdn.microsoft.com/ja-jp/library/cc429126.aspx


このカテゴリの人気Q&Aランキング

おすすめ情報