GetDC()について – プログラミング – Home

通知
すべてクリア

[解決済] GetDC()について


dt
 dt
(@dt)
ゲスト
結合: 23年前
投稿: 31
Topic starter  

お世話になっています、dtです。

自作クラス(CStructCls_Poly.cpp)に描画したいのですが、
void CStructCls_Poly::Draw_SinglePolyStruct(…)
{
 HDC m_hDC = ::GetDC(m_hWnd);

::ReleaseDC(m_hWnd, m_hDC);
m_hDC = NULL;

Draw_SinglePolyStruct(…)はDocクラスに置いています。
C**DOC.cpp
BOOL C**DOC::SetSinglePoly2(int n_i, int *xp2, int *yp2, double L_width2)
{
   pPolyStructPart->Draw_SinglePolyStruct(…);

m_hWndの取得仕方がわかりません。
(いつもViewクラスのOnDraw()から取得しています)
普段、m_hWndはC**Docから取得するか、あるいは、
自作クラス(CStructCls_Poly.cpp)から取得するか、
ということがわかっていません。

よろしくお願いします。


引用未解決
トピックタグ
dt
 dt
(@dt)
ゲスト
結合: 23年前
投稿: 31
Topic starter  

補足:
環境:OS:win2000 .Net2000、 MFC使用

 


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 自作クラス(CStructCls_Poly.cpp)に描画したいのですが、

どういう意味ですか?

- CStructCls_Polyはwindow-handleを持っているので、そいつに描画したい。
- どこか別のところにあるwindowに描画するコードをCStructCls_Polyに実装したい。
- ほかのなにか


返信引用
dt
 dt
(@dt)
ゲスト
結合: 23年前
投稿: 31
Topic starter  

επιστημη さん
ご返事ありがとう。

>- CStructCls_Polyはwindow-handleを持っているので、そいつに描画したい。

いつもViewクラスのOnDraw()から描画しています。
C**View::OnDraw(CDC* pDC){
 pDoc->OnDraw_StructClassPart( pDrawDC ); 
                  //次は、Docクラスに自作クラスの関数を呼び出す

今回は、Docクラスから直接自作クラス(OnDraw()を使わない)

C**DOC.cpp
BOOL C**DOC::SetSinglePoly2(int n_i, int *xp2, int *yp2, double L_width2)
{
   pPolyStructPart->Draw_SinglePolyStruct(pDrawDC 、…); //pDrawDC を取得

ここで、pDrawDC を取得したいのです。
(Viewクラスに使っているpDrawDCと同じデバイスコンテキスト)

よろしくお願いします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

それやっちゃうとおかしなこと(再描画されないとか)が起こるけどそれでも構わんのですか?


返信引用
dt
 dt
(@dt)
ゲスト
結合: 23年前
投稿: 31
Topic starter  

επιστημη さん
ご返事ありがとう。

>それやっちゃうとおかしなこと(再描画されないとか)が起こるけどそれでも構わんのですか?
考えて直しました。
やっぱり、Viewクラスから一番いいと思っています。

アドバイスありがとう。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

CView::OnDrawは(再)描画の必要が生じたときに呼び出されます。

これを通さず描画するってことは、
- 描く必要もないのに勝手に描く
- 描かねばならんのに描いてくれない
ってことが起こり得ます。

上記にきちんと対処できるならやって構わんのです。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

 あと、WINDOWSが閉じた時・閉じようとしている時や、VIEWで何か描画をしている時、
ウインドウのサイズ等を変更している時に他のルーチンで描画をすると例外が発生して
ソフトがハングアップする可能性が大きいです。
それを防ぐには絶えずViewクラスの状況をチェックしておく必要があります。


返信引用
dt
 dt
(@dt)
ゲスト
結合: 23年前
投稿: 31
Topic starter  

επιστημηさん、ITOさん
ご返事ありがとう.

>上記にきちんと対処できるならやって構わんのです。

今回、OnDrawを使わないということは、画面の部分的に描画したいのです。
例、ある線分だけ一度描画する場合、OnDrawと比べると描画のスピードが速い。
(OnDraw中にいろんな描画がある)

アドバイスありがとうございました。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

「CView」のなかで描画するのであれば、例外でハングアップすることはない
と思います。
 あとは、επιστημηさんのご意見
>それやっちゃうとおかしなこと(再描画されないとか)が起こるけどそれでも構わんので
すか?
のことです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました