Alp*_*pay 23 c++ windows hook winapi
我试图以编程方式更改我的应用程序的标题栏和边框颜色.我尝试了很多东西,但没有成功,并决定在整个系统中更改这些颜色.因为我可以在应用程序运行时更改标题栏和边框颜色,并在应用程序结束时将其还原.(托管环境,运行少量应用程序)
是否可以动态更改这些颜色(在整个过程范围内,或在系统范围内更改,除非可以进行整个过程的更改)?你能建议任何方法来达到这个目的吗?
我尝试了类似下面的东西,但它没有做我想要的:
int aElements[2] = {COLOR_WINDOW, COLOR_ACTIVECAPTION};
DWORD aOldColors[2];
DWORD aNewColors[2];
aOldColors[0] = GetSysColor(aElements[0]);
aOldColors[1] = GetSysColor(aElements[1]);
aNewColors[0] = RGB(0x80, 0x80, 0x80); // light gray
aNewColors[1] = RGB(0x80, 0x00, 0x80); // dark purple
SetSysColors(2, aElements, aNewColors);
SetSysColors(2, aElements, aOldColors);
Run Code Online (Sandbox Code Playgroud)
提前致谢
编辑
这正是我想要的:
小智 3
我知道你正在使用 C++,但我对 C# 很熟悉。为了让您有所了解,请查看以下修改表单外观的代码。
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
[DllImport("User32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hWnd);
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_NCPAINT = 0x85;
if (m.Msg == WM_NCPAINT)
{
IntPtr hdc = GetWindowDC(m.HWnd);
if ((int)hdc != 0)
{
Graphics g = Graphics.FromHdc(hdc);
g.FillRectangle(Brushes.Green, new Rectangle(0, 0, 4800, 23));
g.Flush();
ReleaseDC(m.HWnd, hdc);
}
}
}
Run Code Online (Sandbox Code Playgroud)
此外,您还可以使用CodePlex 中的“在 Windows 窗体中绘制自定义边框”项目。该项目是一个小型库,允许用户自定义 Windows 窗体,例如自定义 Windows 的非客户端区域。
| 归档时间: |
|
| 查看次数: |
13871 次 |
| 最近记录: |