Если вы используете WinForms, то относительно легко сделать, потому что WinForms основан на собственных элементах управления Win32. Многие элементы управления имеют способы улучшить их рендеринг, устанавливая дополнительные флаги (отправляя сообщения в собственный элемент управления) или используя SetWindowTheme . Это может быть достигнуто через Interop.
В качестве примера возьмем простой ListView. Если вам нужен просмотр списка в стиле проводника, вы используете SetWindowTheme в открытом дескрипторе ListView. Мы используем взаимодействие, чтобы получить доступ к встроенной функции SetWindowTheme (), подключаем оконную процедуру ListView и применяем тему при создании элемента управления:
static class NativeMethods
{
public const int WM_CREATE = 0x1;
[DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
public extern static int SetWindowTheme(
IntPtr hWnd, string pszSubAppName, string pszSubIdList);
}
class ListView : System.Windows.Forms.ListView
{
protected override void WndProc(ref Message m)
{
if (m.Msg == Win.WM_CREATE) {
NativeMethods.SetWindowTheme(this.Handle, "Explorer", null);
}
base.WndProc(ref m);
}
}
Разница между стандартным ListView и нашей расширенной версией:
Разница в ListView http://img100.imageshack.us/img100/1027/62586064nt6.png
К сожалению, не существует простого способа для каждого элемента управления. Некоторые элементы управления даже не имеют никакой оболочки WinForms. Недавно я наткнулся на хорошую компиляцию в этой статье CodeProject , которую стоит посмотреть. Там также могут быть управляемые библиотеки, которые упаковывают это.