2013-04-16 14 views
7

アンマネージドライブラリを使用してIPカメラからビデオストリームを取得しています。 機能があります:Winformコントロールサイズをアンマネージコードに渡すことはできません

hPlayWndは、ビデオストリームを出力する必要があるウィンドウのハンドルです
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
protected struct LiveConnect 
{ 
    public UInt32 dwChannel; 
    public IntPtr hPlayWnd; 
    public UInt32 dwConnectMode; 
} 

[DllImport("client.dll", EntryPoint = "Network_ClientStartLive", SetLastError = true)] 
protected static extern int Network_ClientStartLive(
     ref IntPtr pStream, 
     IntPtr hDev, 
     IntPtr pClientInfo, 
     [MarshalAs(UnmanagedType.FunctionPtr)] ReadDatacbf lpfnCallbackFunc = null, 
     UInt32 dwUserData = 0 
    ); 

pClientInfoは、の種類を構造体へのポインタです。 ライブラリーは、このウィンドウのサイズによってビデオ解像度を検出します(Network_ClientStartLiveの呼び出し中)。出力ウィンドウがPicture controlで、メソッドのサイズを設定することにより、出力ビデオ解像度が定義されたC++のMFCプログラムでチェックしました。

このプログラムのC#バージョンでは、ビデオストリームを描画するのにPictureBox -controlを使用しています。ビデオは表示されますが、PictureBoxのサイズはビデオストリームの解像度に影響しません。 WinAPIのSetWindowPosを用いpictureBox.Size

  • 設定

    1. :私はPictureBoxサイズ変更するためにいくつかの方法を試みた
     
    [DllImport("user32.dll")] 
    private static extern bool SetWindowPos(
        IntPtr hWnd, 
        IntPtr hWndInsertAfter, 
        int x, 
        int y, 
        int width, 
        int height, 
        uint uFlags); 
    

    を両方の方法でコントロールのサイズを変更したが、カメラライブラリを出力する継続しました最大解像度のビデオストリーム。

    どうすればこの問題を解決できますか?

    ありがとうございます!

  • +0

    私は失敗モードを考えることはできません。アンマネージドコードが気にかけたり見たりする限り、.NET PictureBoxとアンマネージドピクチャコントロールの間に基本的な違いはありません。間違ったウィンドウハンドルを渡している可能性を考慮してください。フォームやデスクトップのように(null)。カメラライブラリのベンダーまたは作成者にサポートを依頼すると、簡単にこれをデバッグできます。 –

    +6

    私はまた、ハンドルが間違っていると思われます。あなたがログに渡しているハンドルを書き、あなたのアプリが実行されている間に、Spy ++ユーティリティを使ってピクチャボックスを選択します。ハンドルSpy ++がログに記録されたハンドルと一致しない場合は、何か起きていることがわかります。 – dazedandconfused

    答えて

    1

    Windowsフォームのすべてのコントロールには、SizeChanged(http://msdn.microsoft.com/en-us/library/system.windows.forms.control.sizechanged(v=vs.110).aspx)イベントがあります。このイベントハンドラで手動でビデオ解像度を変更するコードを追加することは可能でしょうか?そうでない場合は、提供しているPictureBoxハンドルが、アンマネージライブラリが探しているWM_SIZEメッセージを送信していない可能性があります。コメントの1つで述べたように、Spy ++(Visual Studioに付属)は、メッセージを監視し、ハンドル値とイベントが期待どおりのものであることを確認するのに便利なプログラムです。

    関連する問題