![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.1ベストアンサー
- 回答日時:
描画コードでデバイスコンテキストを使っているはずですが、親ウィンドウ用のデバイスコンテキストを使っているのではないでしょうか?
MFCなどのフレームワークを使っていないなら、CreateCompatibleDC()などのAPIで子ウィンドウ用のデバイスコンテキストを作らないといけません。
描画コードをさらせば、もっと的確な回答を得られると思いますよ。
この回答への補足
アドバイスありがとうございます。
えと、TextOutの部分はメインウインドウ、子ウインドウともに表示されるのですが、、、
RenderStart()以下の3D描画部分が、親ウインドウのほうしか表示されません。
上に描画コードの一部をのせますので、よろしければまたお願い致します。
No.4
- 回答日時:
CV::関係の関数が何をしているのか分からないので何とも言えないですが、
static関数で、呼び出されているようなので、
CV::RenderStart();
以下の描画コードは、カレントのウインドウに対して実行されると推測できます。
ソースを見ると、多分ですけど、親ウインドウの3D初期化の方が、子ウインドウの3D初期化よりも後に実行されます。
ということは、後に呼ばれた、親ウインドウがカレントウインドウになっていると思われます。
その後に、CV::関係で、ウインドウハンドルを引数に持つような関数が実行されていないようなので、親ウインドウにしか描画されないのではないでしょうか?
ちなみにOpenGLの場合は、
wglMakeCurrent
という関数で、描画対象のHDCを切り替えるようになっています。
ですので、CVのライブラリに、それっぽい関数はないですか?
確認したところ、ダイレクトXでは子ウインドウでの3D描画がサポートされていないことがわかりました。
なので、別の方法を考えてみたいと思います。ご回答ありがとうございました。
No.3
- 回答日時:
ソースからは、元々g_Avatarが特定の1つのウィンドウにのみ描画する作りになっているように見えますが。
。。問題の本質が、DirectXと子ウィンドウにあるのなら、私は分かりません。
先ほどの回答でCreateCompatibleDC()とか書いたのはうそです。
恥ずかしいので取り消させてください。
↑これが書きたくて無理やり解答しました。
Child1ProcのWM_Paintの部分にもRenderStart()で3D描画処理を記述したので、子ウインドウにもg_Avatarの部分が表示されると思ってたのですが、、表示されていない点が疑問に感じました。
上にあるTextOutの部分は表示されているのですが・・・
親切に何度もご回答ありがとうございます。
No.2
- 回答日時:
★子ウインドウのプロシージャとは、サブクラス化ってことかな?
・描画処理部分が『WM_PAINT』ならば、そのソース部分を教えて下さい。
・また、本当に子ウインドウのプロシージャ・アドレスなのかな?
・親ウインドウのアドレスを処理していませんか?
・もう少し詳しいソースなどを記述して下さい。
・また、読みますので。
この回答への補足
ご回答ありがとうございます。
当方、初心者でして説明が至らないと思いますがすみません。
ソースの一部として、メインと子ウインドウのプロシージャの一部をのせておきます。
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // グローバル変数にインスタンス処理を格納します。
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
init3DInstance(hWnd);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
bool init3DInstance(HWND hWnd)
{
//3Dオブジェクト描画の初期設定
{
CV::InitWin(hWnd);//3Dデバイスの初期化
}
//アバタの初期設定
{
g_Avatar.Create("X/man.X");//xファイルの読み込み
g_Avatar.SetPosition(0.0, 0.0, 0.0);//初期位置の設定
g_Avatar.SetOrientation(-90, 0, 0);//初期姿勢の設定
g_Avatar.SetWorldMatrix();//ワールド座標に変換する
g_Avatar.SetHardCord( 4800 );//アニメーション速度の設定
}
return true;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static int an1=20,an2=0;
static bool flag = false;
static char *szWindowChildClass = "child";
HWND hChild;
HINSTANCE hInst;//
switch (message)
{
case WM_CREATE:
//子ウインドウを作成・表示します。
hChild = CreateMyChild(hWnd, Child1Proc, "mychild1", "子ウインドウ");
if (!hChild)
{
return FALSE;
}
init3DInstance(hChild);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;}
case WM_PAINT:
{
HDC hdc;
//char *str_org = "( %f ,%f ,%f )";
char strx[256];
PAINTSTRUCT paint;
g_Avatar.GetPosition(&Avatar_Pos.x,&Avatar_Pos.y,&Avatar_Pos.z);
sprintf((LPSTR)strx,"(%f,%f,%f,%d)", 0.0,Avatar_Pos.x, Avatar_Pos.z, LocaleID);
hdc = BeginPaint(hWnd, &paint);
TextOut(hdc, 10, 10, (LPSTR)strx, strlen(strx));
EndPaint(hWnd, &paint);
InvalidateRect(hWnd,NULL,0);//WM_PAINTの呼び出し
}
{
CV::RenderStart();
//3D描画処理
g_Avatar.SetPosition(hight,0.0,weight);//初期位置の設定
g_Avatar.SetWorldMatrix();//ワールド座標に変換する
g_Avatar.Render();//アバタの再描画
g_Avatar.GetPosition(&Avatar_Pos.x,&Avatar_Pos.y,&Avatar_Pos.z);
cam_from = CVector(cam_from.x,cam_from.y,move(-20.0f,cam_from.z));// カメラで使用
cam_at = CVector(cam_at.x,3.45, cam_at.z);// カメラで使用
cam_up = CVector(0.0f,1.0f, 0.0f);// カメラで使用
g_Camera.Create(g_Avatar,&cam_from, &cam_at, &cam_up );//カメラの生成
}
Sleep (70);
CV::RenderEnd();
break;
case WM_DESTROY:
//3DCGオブジェクト描画の破棄
{
CV::Clear();
}
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK Child1Proc(HWND hChild, UINT msg, WPARAM wp, LPARAM lp)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static int an1=20,an2=0;
static bool flag = false;
HINSTANCE hInst;
switch (msg)
{
case WM_PAINT:
{
以下メインプロシージャの同じ描画処理・・・
3D描画のアバターの部分をメイン子とともに表示させたいのですが、、
よろしければまた宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Chrome(クローム) Google Chromeのブラウザ(PC)ウインドウの移動について 3 2022/07/19 15:14
- その他(ブラウザ) bingチャットの内容(縦長)をスクリーンショットで保存する方法 3 2023/02/28 02:13
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- 物理学 示すように,真空中の直交座標系を考える。y平面に平行な つ領域Iと領域Iがあり,軸上の領域Iと領域I 1 2023/06/25 14:46
- その他(OS) Mac OSの操作について 2 2022/06/08 09:19
- HTML・CSS 要素の幅をいろんな写真の幅に合わせたい。 1 2022/07/25 20:11
- ドライブ・ストレージ HDDの未割り当て領域が認識されない 7 2022/11/27 18:51
- C言語・C++・C# あまりわかりません。 複素数$c$を具体的に定めた複素写像写像$f_c(z)$に対して、原点を含む領 4 2022/10/25 09:17
- その他(パソコン・スマホ・電化製品) 生化学の問題です。 解説をお願いします。 (真核生物の遺伝子発現調節について) 翻訳の過程では様々な 2 2023/06/04 15:10
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
word
-
ペーパーマリオみたいにドット...
-
WM_PAINTとWM_MOVEで同じ事をし...
-
VB6,リストボックスの特定行の...
-
C#のタブコントロールについて...
-
InvalidateRectの使い方について
-
panelのスクロール表示について
-
楕円を描くプログラミング
-
タブをオーナードローすると、...
-
ボタン形のラベル
-
UpdateData( FALSE); による文...
-
[VB.net] DataGridViewの列ヘッ...
-
MFC ビットマップ描画で残像が残る
-
C++にて、塗りつぶされた円を描...
-
VisualC++におけるメインウィン...
-
MFCタブコントロールのグラデー...
-
C# ラバーバンドの描画を快適に...
-
Form1 Load で実行されない。
-
コンボボックスの高さを変えたい
-
OnDrawが呼び出されません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MFCでOnPaintのタイミング
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
NVIDIAのシェーダーキャッシュ
-
TextBoxに文字を書いても表示さ...
-
UpdateData( FALSE); による文...
-
VB6,リストボックスの特定行の...
-
PCで「使用可能な場合はグラフ...
-
VC++プログラムをつかったBMP画...
-
VBAにGDI+を参照させる方法
-
FlexGridの一部のみ表示を更新...
-
pset関数について
-
エクセルでガンチャートを作成...
-
C言語(dxlib)のDrawboxについ...
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
MFCのタイマーのつかい方を教え...
-
CStaticコントロールの静的イメ...
-
Windowのちらつき防止
-
GDI+で高速な描画
おすすめ情報