2010-07-03 70 views
0

我想在VS 2010中(原始樣本正常工作)從Directshow.NET重建BitmapMixer樣品,得到了以下錯誤在Form1.cs的Error_1_The名「MainForm_ResizeMove」不在當前情況下存在

Error 1 The name 'MainForm_ResizeMove' does not exist in the current context C:\Documents and Settings\TLNA\my documents\visual studio 2010\Projects\mybitmapMixer\myBitmapMixer\Form1.cs 177 13 myBitmapMixer 
Error 2 The name 'MainForm_Paint' does not exist in the current context C:\Documents and Settings\TLNA\my documents\visual studio 2010\Projects\mybitmapMixer\myBitmapMixer\Form1.cs 289 49 myBitmapMixer 
Error 3 The name 'MainForm_ResizeMove' does not exist in the current context C:\Documents and Settings\TLNA\my documents\visual studio 2010\Projects\mybitmapMixer\myBitmapMixer\Form1.cs 290 45 myBitmapMixer 
Error 4 The name 'MainForm_ResizeMove' does not exist in the current context C:\Documents and Settings\TLNA\my documents\visual studio 2010\Projects\mybitmapMixer\myBitmapMixer\Form1.cs 291 43 myBitmapMixer 
Error 5 The name 'SystemEvents_DisplaySettingsChanged' does not exist in the current context C:\Documents and Settings\TLNA\my documents\visual studio 2010\Projects\mybitmapMixer\myBitmapMixer\Form1.cs 292 69 myBitmapMixer 
Error 6 The name 'MainForm_Paint' does not exist in the current context C:\Documents and Settings\TLNA\my documents\visual studio 2010\Projects\mybitmapMixer\myBitmapMixer\Form1.cs 300 49 myBitmapMixer 
Error 7 The name 'MainForm_ResizeMove' does not exist in the current context C:\Documents and Settings\TLNA\my documents\visual studio 2010\Projects\mybitmapMixer\myBitmapMixer\Form1.cs 301 45 myBitmapMixer 
Error 8 The name 'MainForm_ResizeMove' does not exist in the current context C:\Documents and Settings\TLNA\my documents\visual studio 2010\Projects\mybitmapMixer\myBitmapMixer\Form1.cs 302 43 myBitmapMixer 
Error 9 The name 'SystemEvents_DisplaySettingsChanged' does not exist in the current context C:\Documents and Settings\TLNA\my documents\visual studio 2010\Projects\mybitmapMixer\myBitmapMixer\Form1.cs 303 69 myBitmapMixer 

這裏是Form1.cs的代碼: -


using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Collections; 
using System.Runtime.InteropServices; 
using DirectShowLib; 
using Microsoft.DirectX; 
using Microsoft.DirectX.Direct3D; 
using Microsoft.Win32; 

namespace DirectShowLib.Sample 
{ 
public partial class MainForm : Form 
{ 


//private System.ComponentModel.Container components = null; 

private Color colorKey = Color.Violet; // The color use as ColorKey for GDI operations 
private Bitmap colorKeyBitmap; // A RGB bitmap used for GDI operations. 
private Bitmap alphaBitmap; // A ARGB bitmap used for Direct3D operations 

// Managed Direct3D magic number to retrieve unmanaged Direct3D interfaces 
private const int DxMagicNumber = -759872593; 
private Device device = null; // A Managed Direct3D device 
private PresentParameters presentParams; 
private Surface surface = null; // A Direct3D suface filled with alphaBitmap 
private IntPtr unmanagedSurface; // A pointer on the unmanaged surface 

private IFilterGraph2 graphBuilder = null; 
private IMediaControl mediaControl = null; 
private IBaseFilter vmr9 = null; 
private IVMRMixerBitmap9 mixerBitmap = null; 
private IVMRWindowlessControl9 windowlessCtrl = null; 
private bool handlersAdded = false; // Needed to remove delegates 

// Menus stuff 
private bool mixerEnabled = true; 
private bool usingGDI = true; 


public MainForm() 
{ 
    InitializeComponent(); 

    // We paint the windows ourself 
    this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); 

    // Get the colorkeyed bitmap without antialiasing 
    colorKeyBitmap = BitmapGenerator.GenerateColorKeyBitmap(colorKey, false); 
    // Get the bitmap with alpha transparency 
    alphaBitmap = BitmapGenerator.GenerateAlphaBitmap(); 

    // Init Managed Direct3D 
    InitializeDirect3D(); 
} 



private void InitializeDirect3D() 
{ 
    Device.IsUsingEventHandlers = false; 

    // Basic Presentation Parameters... 
    presentParams = new PresentParameters(); 
    presentParams.Windowed = true; 
    presentParams.SwapEffect = SwapEffect.Discard; 

    // Assume a hardware Direct3D device is available 
    // Add MultiThreaded to be safe. Each DirectShow filter runs in a separate thread... 
    device = new Device(
    0, 
    DeviceType.Hardware, 
    this, 
    CreateFlags.SoftwareVertexProcessing | CreateFlags.MultiThreaded, 
    presentParams 
    ); 

    // Create a surface from our alpha bitmap 
    surface = new Surface(device, alphaBitmap, Pool.SystemMemory); 
    // Get the unmanaged pointer 
    unmanagedSurface = surface.GetObjectByValue(DxMagicNumber); 
} 

private void CloseInterfaces() 
{ 
    if (mediaControl != null) 
    mediaControl.Stop(); 

    if (handlersAdded) 
    RemoveHandlers(); 

    if (vmr9 != null) 
    { 
    Marshal.ReleaseComObject(vmr9); 
    vmr9 = null; 
    windowlessCtrl = null; 
    mixerBitmap = null; 
    } 

    if (graphBuilder != null) 
    { 
    Marshal.ReleaseComObject(graphBuilder); 
    graphBuilder = null; 
    mediaControl = null; 
    } 

    menuMixer.Enabled = false; 
} 

private void BuildGraph(string fileName) 
{ 
    int hr = 0; 

    try 
    { 
    graphBuilder = (IFilterGraph2)new FilterGraph(); 
    mediaControl = (IMediaControl)graphBuilder; 

    vmr9 = (IBaseFilter)new VideoMixingRenderer9(); 

    ConfigureVMR9InWindowlessMode(); 

    hr = graphBuilder.AddFilter(vmr9, "Video Mixing Renderer 9"); 
    DsError.ThrowExceptionForHR(hr); 

    hr = graphBuilder.RenderFile(fileName, null); 
    DsError.ThrowExceptionForHR(hr); 

    mixerBitmap = (IVMRMixerBitmap9)vmr9; 

    menuMixer.Enabled = true; 
    mixerEnabled = true; 
    usingGDI = false; 
    UpdateMixerMenu(); 
    SetMixerSettings(); 
    } 
    catch (Exception e) 
    { 
    CloseInterfaces(); 
    MessageBox.Show("An error occured during the graph building : \r\n\r\n" + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

private void ConfigureVMR9InWindowlessMode() 
{ 
    int hr = 0; 

    IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9)vmr9; 

    // Not really needed for VMR9 but don't forget calling it with VMR7 
    hr = filterConfig.SetNumberOfStreams(1); 
    DsError.ThrowExceptionForHR(hr); 

    // Change VMR9 mode to Windowless 
    hr = filterConfig.SetRenderingMode(VMR9Mode.Windowless); 
    DsError.ThrowExceptionForHR(hr); 

    windowlessCtrl = (IVMRWindowlessControl9)vmr9; 

    // Set "Parent" window 
    hr = windowlessCtrl.SetVideoClippingWindow(this.Handle); 
    DsError.ThrowExceptionForHR(hr); 

    // Set Aspect-Ratio 
    hr = windowlessCtrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox); 
    DsError.ThrowExceptionForHR(hr); 

    // Add delegates for Windowless operations 
    AddHandlers(); 

    // Call the resize handler to configure the output size 
    MainForm_ResizeMove(null, null); 
} 

private void SetMixerSettings() 
{ 
    int hr = 0; 
    VMR9AlphaBitmap alphaBmp; 

    if (!mixerEnabled) // Did the user disable the bitmap ? 
    { 
    // Get current Alpha Bitmap Parameters 
    hr = mixerBitmap.GetAlphaBitmapParameters(out alphaBmp); 
    DsError.ThrowExceptionForHR(hr); 

    // Disable them 
    alphaBmp.dwFlags = VMR9AlphaBitmapFlags.Disable; 

    // Update the Alpha Bitmap Parameters 
    hr = mixerBitmap.UpdateAlphaBitmapParameters(ref alphaBmp); 
    DsError.ThrowExceptionForHR(hr); 

    return; 
    } 

    if (usingGDI) 
    { 
    // Old school GDI stuff... 
    Graphics g = Graphics.FromImage(colorKeyBitmap); 
    IntPtr hdc = g.GetHdc(); 
    IntPtr memDC = NativeMethodes.CreateCompatibleDC(hdc); 
    IntPtr hBitmap = colorKeyBitmap.GetHbitmap(); 
    NativeMethodes.SelectObject(memDC, hBitmap); 

    // Set Alpha Bitmap Parameters for using a GDI DC 
    alphaBmp = new VMR9AlphaBitmap(); 
    alphaBmp.dwFlags = VMR9AlphaBitmapFlags.hDC | VMR9AlphaBitmapFlags.SrcColorKey | VMR9AlphaBitmapFlags.FilterMode; 
    alphaBmp.hdc = memDC; 
    alphaBmp.rSrc = new DsRect(0, 0, colorKeyBitmap.Size.Width, colorKeyBitmap.Size.Height); 
    alphaBmp.rDest = GetDestRectangle(); 
    alphaBmp.clrSrcKey = ColorTranslator.ToWin32(colorKey); 
    alphaBmp.dwFilterMode = VMRMixerPrefs.PointFiltering; 
    alphaBmp.fAlpha = 0.75f; 

    // Set Alpha Bitmap Parameters 
    hr = mixerBitmap.SetAlphaBitmap(ref alphaBmp); 
    DsError.ThrowExceptionForHR(hr); 

    // Release GDI handles 
    NativeMethodes.DeleteObject(hBitmap); 
    NativeMethodes.DeleteDC(memDC); 
    g.ReleaseHdc(hdc); 
    g.Dispose(); 
    } 
    else // Using a Direct3D surface 
    { 
    // Set Alpha Bitmap Parameters for using a Direct3D surface 
    alphaBmp = new VMR9AlphaBitmap(); 
    alphaBmp.dwFlags = VMR9AlphaBitmapFlags.EntireDDS; 
    alphaBmp.pDDS = unmanagedSurface; 
    alphaBmp.rDest = GetDestRectangle(); 
    alphaBmp.fAlpha = 1.0f; 
    // Note : Alpha values from the bitmap are cumulative with the fAlpha parameter. 
    // Example : texel alpha = 128 (50%) & fAlpha = 0.5f (50%) = effective alpha : 64 (25%) 

    // Set Alpha Bitmap Parameters 
    hr = mixerBitmap.SetAlphaBitmap(ref alphaBmp); 
    DsError.ThrowExceptionForHR(hr); 
    } 
} 

private NormalizedRect GetDestRectangle() 
{ 
    int hr = 0; 
    int width, height, arW, arH; 
    NormalizedRect rect = new NormalizedRect(); 

    hr = windowlessCtrl.GetNativeVideoSize(out width, out height, out arW, out arH); 
    DsError.ThrowExceptionForHR(hr); 

    // Position the bitmap in the middle of the video stream. 
    if (width >= height) 
    { 
    rect.top = 0.0f; 
    rect.left = (1.0f - ((float)height/(float)width))/2; 
    rect.bottom = 1.0f; 
    rect.right = rect.left + (float)height/(float)width; 
    } 
    else 
    { 
    rect.top = (1.0f - ((float)width/(float)height))/2; 
    rect.left = 0.0f; 
    rect.right = rect.top + (float)width/(float)height; 
    rect.bottom = 1.0f; 
    } 

    return rect; 
} 

private void UpdateMixerMenu() 
{ 
    // Just manage the Mixer menu... 
    menuMixerEnable.Checked = mixerEnabled; 

    menuMixerGDI.Enabled = mixerEnabled; 
    menuMixerGDI.Checked = usingGDI; 
    menuMixerD3D.Enabled = mixerEnabled; 
    menuMixerD3D.Checked = !usingGDI; 
} 

private void AddHandlers() 
{ 
    // Add handlers for VMR purpose 
    this.Paint += new PaintEventHandler(MainForm_Paint); // for WM_PAINT 
    this.Resize += new EventHandler(MainForm_ResizeMove); // for WM_SIZE 
    this.Move += new EventHandler(MainForm_ResizeMove); // for WM_MOVE 
    SystemEvents.DisplaySettingsChanged += new EventHandler(SystemEvents_DisplaySettingsChanged); // for WM_DISPLAYCHANGE 
    handlersAdded = true; 
} 

private void RemoveHandlers() 
{ 
    // remove handlers when they are no more needed 
    handlersAdded = false; 
    this.Paint -= new PaintEventHandler(MainForm_Paint); 
    this.Resize -= new EventHandler(MainForm_ResizeMove); 
    this.Move -= new EventHandler(MainForm_ResizeMove); 
    SystemEvents.DisplaySettingsChanged -= new EventHandler(SystemEvents_DisplaySettingsChanged); 
} 

private void RunGraph() 
{ 
    if (mediaControl != null) 
    { 
    int hr = mediaControl.Run(); 
    DsError.ThrowExceptionForHR(hr); 
    } 
} 

private void StopGraph() 
{ 
    if (mediaControl != null) 
    { 
    int hr = mediaControl.Stop(); 
    DsError.ThrowExceptionForHR(hr); 
    } 
} 

// Menus click handlers 
private void menuFileOpen_Click(object sender, EventArgs e) 
{ 
    if (openFileDialog.ShowDialog() == DialogResult.OK) 
    { 
    CloseInterfaces(); 
    BuildGraph(openFileDialog.FileName); 
    RunGraph(); 
    } 
} 

private void menuFileClose_Click(object sender, EventArgs e) 
{ 
    StopGraph(); 
    CloseInterfaces(); 
    this.Invalidate(); 
} 

private void menuFileExit_Click(object sender, EventArgs e) 
{ 
    StopGraph(); 
    CloseInterfaces(); 
    this.Dispose(); 
} 

private void menuMixerEnable_Click(object sender, EventArgs e) 
{ 
    mixerEnabled = !mixerEnabled; 
    UpdateMixerMenu(); 
    SetMixerSettings(); 
} 

private void menuMixerGDI_Click(object sender, EventArgs e) 
{ 
    usingGDI = true; 
    UpdateMixerMenu(); 
    SetMixerSettings(); 
} 

private void menuMixerD3D_Click(object sender, EventArgs e) 
{ 
    usingGDI = false; 
    UpdateMixerMenu(); 
    SetMixerSettings(); 
} 

private void menuHelpAbout_Click(object sender, EventArgs e) 
{ 
    string title = "About Bitmap mixer"; 
    string text = "DirectShow.Net VMR9 Bitmap mixer\r\nMake use of IVMRBitmapMixer9"; 

    AboutBox.Show(title, text); 
} 







} 
} 

任何幫助解決這個讚賞。

很多謝謝

回答

0

看起來你的表單沒有聲明和實現事件處理函數。

當您這樣做時: this.Paint += new PaintEventHandler(MainForm_Paint); 您將使用MainForm_Paint的事件處理程序附加到Paint事件。 因此,當每次表單需要自己繪製時,都會觸發paint事件,所以函數MainForm_Paint也應該被觸發。

你需要把你的形式定義MainForm_Paint,例如:

private void MainForm_Paint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
    Graphics g = this.CreateGraphics(); 
    // Make a big red pen. 
    Pen p= new Pen(Color.Red, 7); 
    g.DrawLine(p, 1, 1, 100, 100); 
} 

而且同樣適用於其他的方法(MainForm_ResizeMove等)。

相關問題