どうしても、うまくいきません・・・
以下のプログラムで、BorlandC++ Builder6.0のpanel1にカメラから取得した映像をストリーム再生したいのですが・・・。
コンパイルエラーとして、->か->*の左には構造体のポインタが必要、と出ます。
どうやったらこのエラーを解決し、ストリーム再生できるようになるでしょうか?
アドバイスお願いします!!!
#include <vcl.h>
#pragma hdrstop
#include <windows.h>
#include <vfw.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HWND hwnd;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
// キャプチャドライバに接続
SendMessage(hwnd,WM_CAP_DRIVER_CONNECT,0,0L);
CAPDRIVERCAPS CapDrvCaps;
capDriverGetCaps(hwnd, &CapDrvCaps, sizeof (CAPDRIVERCAPS));
if (CapDrvCaps.fHasOverlay)
capOverlay( hwnd->Panel1, TRUE ); //オーバーレイモードで動作
//ShowWindowAsync( hWndCap, SW_SHOW );
capDriverDisconnect( hwnd ); // ドライバの解放
//::DestroyWindow( hwnd ); // ウィンドウの破棄
}
No.1ベストアンサー
- 回答日時:
> capOverlay( hwnd->Panel1, TRUE ); // オーバーレイモードで動作
の第一引数に hwnd->Panel1 が渡されているからじゃないでしょうか?
capOverlay マクロの第一引数はキャプチャウィンドウのハンドル hwnd を渡さないといけないんじゃ、、、?
それと、ソース見る限りじゃ、hwnd の実体はどこにあるんでしょう?
> HWND hwnd;
のウィンドウハンドル変数にキャプチャウィンドウのハンドルが入っていないように思えるんですが、ひょっとして
> __fastcall TForm1::TForm1(TComponent* Owner)
> : TForm(Owner)
> {
が呼び出されると自動的に hwnd にキャプチャウィンドウのハンドルが入るのですか?
もしそうでないんなら参照URLのソースにあるように、
> hWndCap = capCreateCaptureWindow(
> "Captrue Window", //キャプチャウィンドウの名前
> WS_OVERLAPPEDWINDOW, //ウィンドウスタイル このパラメータについてはここを見てください。
> 0, 0, //表示位置
> 320, 240, //ウィンドウサイズ
> NULL, //親のハンドル NULL:親なしのウィンドウ
> NULL); //よくわかりません
のようにしてキャプチャウィンドウを作ってそのハンドルをそれぞれのマクロなり関数なりに代入してやるか、別のファイルなりで作ったキャプチャウィンドウがあるならそのキャプチャウィンドウのハンドルをグローバル変数を通して持ってくるなり、キャプチャウィンドウのハンドルを取得する関数とかを調べてみてください。
参考URL:http://laputa.cs.shinshu-u.ac.jp/~gtakano/prog.h …
ご回答、何度目になるか・・・本当にありがとうございます。あまりにも、理解できていないのに、要望だけは達者で申し訳ありません。
今回、このように記述してしまったのは、Panel1をキャプチャウィンドウとしたい、と考えた為、
> hWndCap = capCreateCaptureWindow(
と書いて、キャプチャウィンドウを作るは必要ないだろう、としてしまいました。
hwndの実体とは、、、キャプチャウィンドウの構造体のことでしょうか・・・?
勘違いでしたら、すみません・・・。
キャプチャウィンドウはPanel1にしたいのですが、どのようにして記述すればよいのでしょうか?
> HWND hwnd;
と書いたのは、HogePiyoさんが参考に、と添付してくださったサイトに”よくわからない場合は、#include文の下あたりに、HWND hWndCap;の1行を追加してください”とあったから書いただけなのです。
> __fastcall TForm1::TForm1(TComponent* Owner)
> : TForm(Owner)
> {
が呼び出されると、自動的にPanel1がキャプチャウィンドウとして機能するためには、hwndの実体を記述する際に書き込めばよいのでしょうか?
ただ、
> hWndCap = capCreateCaptureWindow(
> "Captrue Window", // キャプチャウィンドウの名前
> WS_OVERLAPPEDWINDOW, // ウィンドウスタイル このパラメータについてはここを見てください。
> 0, 0, // 表示位置
> 320, 240, // ウィンドウサイズ
> NULL, // 親のハンドル NULL:親なしのウィンドウ
> NULL); // よくわかりません
このように記述した場合、実行画面でFormの真ん中にキャプチャウィンドウがきませんでした。 それは、
> 0, 0, // 表示位置
としてあるこの数字0,0,を書き換えると真ん中に表示できるでしょうか?
これは明日の朝、学校で確かめてみますね。確認不足で申し訳ございません。
無理やりPanel1をキャプチャウィンドウに・・・と私が考えているのは、どうしても、ポインタ・構造体、これらのものが頭の中でビジュアル的組み立てて見ることができないからだと思うのです。
初めてプログラミングをする上で、こんなにも大変だとは思っていませんでした。
HogePiyoさんには、何度も何度もアドバイスを頂いており、大変申し訳なく、ありがたいと思っております。
私も頑張って、成功をお伝えできるよう努力いたしますので、どうかよろしくお願いします。
No.3
- 回答日時:
↓いろいろ探してみたらいいサイトが見つかりました。
http://www6.airnet.ne.jp/miyakawa/project/prj1/v …
参考URL:http://www6.airnet.ne.jp/miyakawa/project/prj1/v …
No.2
- 回答日時:
一般的な SDK でウィンドウハンドルを必要とする部分に、C++Builderのウィンドウを使用する場合は、Handle プロパティを使用します。
例えば、こんな感じです。
capDriverConnect(Panel1->Handle, 0);
ありがとうございます!!
Hogepiyoさんの参考サイトとinthefloiさんのヒントでなんとか頑張っていきたいと思います!!
しかし、サイトのコードを丸写ししても、はじめの画面の1コマだけが静止画?(フリーズとも言うような気がしますが)として表示されるだけで、連続してオーバーレイできていない気がします。
OSにXPを使用しているからでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
ラジオボタンの初期指定
-
ウィンドウハンドルって途中で...
-
Excelの上下を固定したい
-
ゲームでは結局どっちが良いの?
-
CTなどでいう,ウィンドウレベ...
-
vc++(MFCなし)でタスクバーに...
-
他のアプリケーションの終了処理
-
勝手にウィンドウが開いて止ま...
-
他アプリケーション’(ウィンド...
-
FindWindowの戻り値が違う!?
-
VBA .Value=.Value ?
-
ボタンのハンドルウィンド取得...
-
エクセルで複数のウィンドウ枠...
-
「&HFFFF」「&H1A」とは?
-
ExcelのBOOKが消えた!
-
ウィンドウにキー送信で ENTER ...
-
名前を付けて保存のウィンドウ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
VBA .Value=.Value ?
-
作成したウインドウのサイズを...
-
Vba LongPtrについて教えてくだ...
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
ラジオボタンの初期指定
-
「&HFFFF」「&H1A」とは?
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
-
[VBA] UserForm を Excel の W...
-
MFC ダイアログ上のID取得につ...
-
UWSCで特定のChromeのタブをア...
-
ボタンのハンドルウィンド取得...
-
ExcelVBAでAPIを使って外部ウイ...
おすすめ情報