视觉样式不能在进程内COM服务器上工作
本文关键字:COM 服务器 工作 进程 样式 不能 视觉 | 更新日期: 2023-09-27 18:16:03
我正在开发一个使用视觉样式的程序。Main方法看起来像这样:
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form());
}
该程序还可以作为另一个应用程序的插件,并且它是通过COM启动的。问题是调用应用程序(COM客户端)不调用EnableVisualStyles,这是我无法控制的。在本例中,程序按如下方式启动:
public static void StartAsPlugin() {
Application.EnableVisualStyles();
Form form = new Form();
form.ShowDialog();
}
当程序作为插件启动时,进度条和组合框不会以与程序正常启动时相同的样式呈现,而按钮,复选框和单选按钮则可以。是否有一种方法可以强制呈现视觉风格?我试过用舱单,但没有成功!下面是我尝试过的清单:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="RealApp"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
我认为清单是正确嵌入的,因为ildasm在manifest部分显示了以下内容:
.mresource public RealApp.RealApp.exe.manifest
{
// Offset: 0x000004F0 Length: 0x0000029B
}
谢谢,Stenio
用Raymond Chen的话来说,插件是主机进程中的来宾,不应该改变地毯。
http://blogs.msdn.com/b/oldnewthing/archive/2010/04/30/10004931.aspx没有办法打开它们,因为这不是你真正应该做的事情。
如果宿主进程不想使用视觉样式,你可能不应该使用它们。考虑允许插件在没有视觉样式的应用程序中不带视觉样式进行渲染。