我Create了一个Dlg,但我现在想要修改Dlg的标题栏颜色,要如何做才可以呢,帮帮忙吧各位csdn上的朋友...先谢谢了
13 个解决方案
#1
从CDialog派生自己的子类,然后进行自绘
如下是示例代码
如下是示例代码
void CDD2Dlg::OnNcPaint()
{
//使用默认的操作先刷新
CDialog::OnNcPaint();
//计算TitleBar的坐标区域
CRect titleRect;
GetWindowRect(&titleRect);
DWORD DialogBaseUnits = GetDialogBaseUnits();
WORD DialogBaseUnits_X = LOWORD(DialogBaseUnits)/4;
WORD DialogBaseUnits_Y = HIWORD(DialogBaseUnits)/8;
titleRect.top += GetSystemMetrics(SM_CYBORDER) * DialogBaseUnits_Y;
titleRect.left += GetSystemMetrics(SM_CXBORDER) * DialogBaseUnits_X;
titleRect.right -= GetSystemMetrics(SM_CXBORDER) * DialogBaseUnits_X;
titleRect.bottom = titleRect.top + GetSystemMetrics(SM_CYCAPTION);
//创建DC设备
CDC pDC;
pDC.CreateDC("DISPLAY", NULL, NULL,NULL);
int saveDC = pDC.SaveDC(); //保存设备
//使用自定义颜色填充
CBrush brush(RGB(255,0,0));
pDC.FillRect(&titleRect,&brush);
//正中位置显示字符串
pDC.SetBkMode(TRANSPARENT);
pDC.SetTextColor(RGB(0,128,128));
pDC.DrawText("ABCD",titleRect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
pDC.RestoreDC(saveDC); //恢复设备
pDC.DeleteDC(); //删除设备
}
#2
1 楼方法可行
#3
void CDD2Dlg::OnNcPaint()
{
//使用默认的操作先刷新
CDialog::OnNcPaint();
//计算TitleBar的坐标区域
CRect titleRect;
GetWindowRect(&titleRect);
DWORD DialogBaseUnits = GetDialogBaseUnits();
WORD DialogBaseUnits_X = LOWORD(DialogBaseUnits)/4;
WORD DialogBaseUnits_Y = HIWORD(DialogBaseUnits)/8;
titleRect.top += GetSystemMetrics(SM_CYBORDER) * DialogBaseUnits_Y;
titleRect.left += GetSystemMetrics(SM_CXBORDER) * DialogBaseUnits_X;
titleRect.right -= GetSystemMetrics(SM_CXBORDER) * DialogBaseUnits_X;
titleRect.bottom = titleRect.top + GetSystemMetrics(SM_CYCAPTION);
//创建DC设备
CDC pDC;
pDC.CreateDC("DISPLAY", NULL, NULL,NULL);
int saveDC = pDC.SaveDC(); //保存设备
//使用自定义颜色填充
CBrush brush(RGB(255,0,0));
pDC.FillRect(&titleRect,&brush);
//正中位置显示字符串
pDC.SetBkMode(TRANSPARENT);
pDC.SetTextColor(RGB(0,128,128));
pDC.DrawText("ABCD",titleRect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
pDC.RestoreDC(saveDC); //恢复设备
pDC.DeleteDC(); //删除设备
}
#4
谢谢你的帮助,可能是我没说清楚(我想改变标题栏的背景颜色)
画倒是画出来了,但这样做好像不太好呀,感觉是一块矩形直接贴在标题栏上了,按钮也别盖住了...怎么样做才是改变背景色呀
#6
学习了……
#7
关注这个问题
#8
参考这里的源码
http://vcer.net/1250419423718.html
http://vcer.net/1250419423718.html
#9
自己另外做个标题吧
#10
自己重绘都要自己设计标题栏了吧,呵呵.
还有一种是提取系统变量设置,然后修改之,不过不建议这样做,因为这样做了,所有windows窗口的标题栏都给改了,用户会讨厌这种软件....
还有一种是提取系统变量设置,然后修改之,不过不建议这样做,因为这样做了,所有windows窗口的标题栏都给改了,用户会讨厌这种软件....
#11
方法可行恩。。。
#12
用一个for循环,一行一行的画,但行的长度你自己控制
#13
多谢你...
#1
从CDialog派生自己的子类,然后进行自绘
如下是示例代码
如下是示例代码
void CDD2Dlg::OnNcPaint()
{
//使用默认的操作先刷新
CDialog::OnNcPaint();
//计算TitleBar的坐标区域
CRect titleRect;
GetWindowRect(&titleRect);
DWORD DialogBaseUnits = GetDialogBaseUnits();
WORD DialogBaseUnits_X = LOWORD(DialogBaseUnits)/4;
WORD DialogBaseUnits_Y = HIWORD(DialogBaseUnits)/8;
titleRect.top += GetSystemMetrics(SM_CYBORDER) * DialogBaseUnits_Y;
titleRect.left += GetSystemMetrics(SM_CXBORDER) * DialogBaseUnits_X;
titleRect.right -= GetSystemMetrics(SM_CXBORDER) * DialogBaseUnits_X;
titleRect.bottom = titleRect.top + GetSystemMetrics(SM_CYCAPTION);
//创建DC设备
CDC pDC;
pDC.CreateDC("DISPLAY", NULL, NULL,NULL);
int saveDC = pDC.SaveDC(); //保存设备
//使用自定义颜色填充
CBrush brush(RGB(255,0,0));
pDC.FillRect(&titleRect,&brush);
//正中位置显示字符串
pDC.SetBkMode(TRANSPARENT);
pDC.SetTextColor(RGB(0,128,128));
pDC.DrawText("ABCD",titleRect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
pDC.RestoreDC(saveDC); //恢复设备
pDC.DeleteDC(); //删除设备
}
#2
1 楼方法可行
#3
void CDD2Dlg::OnNcPaint()
{
//使用默认的操作先刷新
CDialog::OnNcPaint();
//计算TitleBar的坐标区域
CRect titleRect;
GetWindowRect(&titleRect);
DWORD DialogBaseUnits = GetDialogBaseUnits();
WORD DialogBaseUnits_X = LOWORD(DialogBaseUnits)/4;
WORD DialogBaseUnits_Y = HIWORD(DialogBaseUnits)/8;
titleRect.top += GetSystemMetrics(SM_CYBORDER) * DialogBaseUnits_Y;
titleRect.left += GetSystemMetrics(SM_CXBORDER) * DialogBaseUnits_X;
titleRect.right -= GetSystemMetrics(SM_CXBORDER) * DialogBaseUnits_X;
titleRect.bottom = titleRect.top + GetSystemMetrics(SM_CYCAPTION);
//创建DC设备
CDC pDC;
pDC.CreateDC("DISPLAY", NULL, NULL,NULL);
int saveDC = pDC.SaveDC(); //保存设备
//使用自定义颜色填充
CBrush brush(RGB(255,0,0));
pDC.FillRect(&titleRect,&brush);
//正中位置显示字符串
pDC.SetBkMode(TRANSPARENT);
pDC.SetTextColor(RGB(0,128,128));
pDC.DrawText("ABCD",titleRect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
pDC.RestoreDC(saveDC); //恢复设备
pDC.DeleteDC(); //删除设备
}
#4
谢谢你的帮助,可能是我没说清楚(我想改变标题栏的背景颜色)
画倒是画出来了,但这样做好像不太好呀,感觉是一块矩形直接贴在标题栏上了,按钮也别盖住了...怎么样做才是改变背景色呀
#5
#6
学习了……
#7
关注这个问题
#8
参考这里的源码
http://vcer.net/1250419423718.html
http://vcer.net/1250419423718.html
#9
自己另外做个标题吧
#10
自己重绘都要自己设计标题栏了吧,呵呵.
还有一种是提取系统变量设置,然后修改之,不过不建议这样做,因为这样做了,所有windows窗口的标题栏都给改了,用户会讨厌这种软件....
还有一种是提取系统变量设置,然后修改之,不过不建议这样做,因为这样做了,所有windows窗口的标题栏都给改了,用户会讨厌这种软件....
#11
方法可行恩。。。
#12
用一个for循环,一行一行的画,但行的长度你自己控制
#13
多谢你...