网上有用图片拼装自定义窗体的教程,试过可以,但是图片好死板。我尝试在窗体内加flash插件来呈现窗体外观,窗体的拖动通过flash捕捉鼠标点击事件,再通过call告诉c#,动态效果是不错,但flash原来是圆角的,但加载进来就成方的了,唉,不能部分透明啊。flash插件有个Wmode的属性,我设置成transparent,没反应,哪位高手帮下忙?
public class FlashBgForm: Form
{
private MyPlayer m_obBg;
//∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥构造函数
public NullBroswerForm()
{
try
{
m_obBg = new SkinsFormPlayer(this);
((ISupportInitialize)m_obBg).BeginInit();
m_obBg.Parent = this;
((ISupportInitialize)m_obBg).EndInit();
m_obBg.SAlign = FlashParameters.Align_topLeft;
m_obBg.ScaleMode = FlashParameters.Scale_noScale;
m_obBg.BackgroundColor = 0x00fafafa;
m_obBg.WMode = "transparent";
m_obBg.Dock = DockStyle.Fill;
m_obBg.FlashCall += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEventHandler(m_obBg_FlashCall);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
public class FlashBgForm: Form
{
private MyPlayer m_obBg;
//∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥构造函数
public NullBroswerForm()
{
try
{
m_obBg = new SkinsFormPlayer(this);
((ISupportInitialize)m_obBg).BeginInit();
m_obBg.Parent = this;
((ISupportInitialize)m_obBg).EndInit();
m_obBg.SAlign = FlashParameters.Align_topLeft;
m_obBg.ScaleMode = FlashParameters.Scale_noScale;
m_obBg.BackgroundColor = 0x00fafafa;
m_obBg.WMode = "transparent";
m_obBg.Dock = DockStyle.Fill;
m_obBg.FlashCall += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEventHandler(m_obBg_FlashCall);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
好弄,目前效果还不错呢,我用From.transparencyKey设置了一个透明颜色,但这种透明的副作用是窗体内任何一个地方只要出现这种颜色就都是透明的,我的窗体写到后面是要加载东西的,而且内容不确定,这多郁闷,哪位高手有更好的办法???
自己想了个办法,就是再弹出一个子窗口,在子窗口中加载内容,但要多出来好多额外的处理,比如一起移动,一起缩放等等。
public class HookApi
{
public delegate int HookProc(int ncode, int wparam, int lparam);
private EventHandler onMouseChange = null;
private HookProc m_myProcess = null;
//
[DllImport("kernel32")]
public static extern int GetCurrentThreadId();
[DllImport("user32", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(hooktype idhook, HookProc lpfn, int hmod, int dwThreadId); public enum hooktype
{
wh_getMessage = 3
}
//∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥构造函数
public HookApi()
{
}
//∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥钩子设置函数
public void setHook()
{
this.m_myProcess = new HookProc(this.myKeyboardProc);
SetWindowsHookEx(hooktype.wh_getMessage, m_myProcess, 0, GetCurrentThreadId());
}
重点是部分透明,不是半透明。这两概念相差很远好不好。transparencyKey比较接近,但效果不好。Opacity这个太离谱了