2009年2月18日水曜日

HDCが_RemotableHandleになっちゃう

ので、idlの定義で
HRESULT Render([in] TimedLevel *pLevels, [in] int hdc, [in] RECT *prc);
とし、実際のRenderメソッドの実装で
IntPtr hdc_=(IntPtr)hdc;
としてみた。これ、unsafeコードじゃないんだねえ。

実際のIWMPEffectsはEffectMainPanelってユーザコントロールを作っておいて

[Guid("f6add2d1-c4c0-4e4a-99df-49ac5a90d23b")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("MyEffect")]
public class MyEffect : IWMPEffects
{
[DllImport("user32.dll")]
static extern IntPtr WindowFromDC(IntPtr hDC);
EffectMainPanel effectMainPanel;
IntPtr hwnd = IntPtr.Zero;
public MyEffect()
{
effectMainPanel = new EffectMainPanel();
}
#region IWMPEffects メンバ
...
public void Render(ref tagTimedLevel pLevels, int hdc, ref tagRECT prc)
{
IntPtr hdc_ = (IntPtr)hdc;
HwndSource.FromHwnd(WindowFromDC(hdc_)).RootVisual = effectMainPanel;
effectMainPanel.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
effectMainPanel.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
}
...
}

としてみた。で、上手くいかねー。もうちょっと調べてみよう。

0 件のコメント: