代码: if (hwnd)
{
HDC pDC = GetWindowDC(hwnd);
HBRUSH Brush = NULL;
HBRUSH pOldBrush = NULL; if(m_bActive){
Brush = ::CreateSolidBrush(RGB(150,100,255));
}
else
{
Brush=::CreateSolidBrush(RGB(200,200,200));
}
pOldBrush = (HBRUSH)::SelectObject(pDC,Brush); CRect rtWnd, rtTitle, rtButtons;
GetWindowRect(m_hWnd,&rtWnd);
//取得标题栏的位置
rtTitle.left = GetSystemMetrics(SM_CXFRAME);
rtTitle.top = GetSystemMetrics(SM_CYFRAME);
rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME);
rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE); CPoint point;
//填充顶部框架
point.x = rtWnd.Width();
point.y = GetSystemMetrics(SM_CYSIZE) + GetSystemMetrics(SM_CYFRAME)+1;
PatBlt(pDC,0, 0, point.x, point.y, PATCOPY);
//填充左侧框架
point.x = GetSystemMetrics(SM_CXFRAME);
point.y = rtWnd.Height();
PatBlt(pDC,0, 0, point.x, point.y, PATCOPY);
//填充底部框架
point.x = rtWnd.Width();
point.y = GetSystemMetrics(SM_CYFRAME);
PatBlt(pDC,0, rtWnd.Height()-point.y, point.x, point.y, PATCOPY);
//填充右侧框架
point.x = GetSystemMetrics(SM_CXFRAME);
point.y = rtWnd.Height();
PatBlt(pDC,rtWnd.Width()-point.x, 0, point.x, point.y, PATCOPY);
//填充菜单下部框架
point.x = rtWnd.Width();
point.y = GetSystemMetrics(SM_CYFRAME)-1;
PatBlt(pDC,0, GetSystemMetrics(SM_CYMENU)+GetSystemMetrics(SM_CYSIZE)+point.y, point.x, point.y, PATCOPY);
SelectObject(pDC,pOldBrush);
::DeleteObject(Brush);
pOldBrush = NULL;
::ReleaseDC(hwnd,pDC);
pDC = NULL;
}这段代码是在WM_NCPAINT里画标题栏的,BOOL m_bActive是不断变化的,根椐它值的不同画不同颜色,可是当m_bActive变为FALSE,选了颜色为RGB(200,200,200)Brush后,后面一直是画的这个颜色,再也画不出RGB(150,100,255)这个颜色了,我跟踪到代码里面,m_bActive变为TRUE后,Brush = ::CreateSolidBrush(RGB(150,100,255))这句代码也执行了,但画出来的总是RGB(200,200,200),真的好奇怪。
{
HDC pDC = GetWindowDC(hwnd);
HBRUSH Brush = NULL;
HBRUSH pOldBrush = NULL; if(m_bActive){
Brush = ::CreateSolidBrush(RGB(150,100,255));
}
else
{
Brush=::CreateSolidBrush(RGB(200,200,200));
}
pOldBrush = (HBRUSH)::SelectObject(pDC,Brush); CRect rtWnd, rtTitle, rtButtons;
GetWindowRect(m_hWnd,&rtWnd);
//取得标题栏的位置
rtTitle.left = GetSystemMetrics(SM_CXFRAME);
rtTitle.top = GetSystemMetrics(SM_CYFRAME);
rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME);
rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE); CPoint point;
//填充顶部框架
point.x = rtWnd.Width();
point.y = GetSystemMetrics(SM_CYSIZE) + GetSystemMetrics(SM_CYFRAME)+1;
PatBlt(pDC,0, 0, point.x, point.y, PATCOPY);
//填充左侧框架
point.x = GetSystemMetrics(SM_CXFRAME);
point.y = rtWnd.Height();
PatBlt(pDC,0, 0, point.x, point.y, PATCOPY);
//填充底部框架
point.x = rtWnd.Width();
point.y = GetSystemMetrics(SM_CYFRAME);
PatBlt(pDC,0, rtWnd.Height()-point.y, point.x, point.y, PATCOPY);
//填充右侧框架
point.x = GetSystemMetrics(SM_CXFRAME);
point.y = rtWnd.Height();
PatBlt(pDC,rtWnd.Width()-point.x, 0, point.x, point.y, PATCOPY);
//填充菜单下部框架
point.x = rtWnd.Width();
point.y = GetSystemMetrics(SM_CYFRAME)-1;
PatBlt(pDC,0, GetSystemMetrics(SM_CYMENU)+GetSystemMetrics(SM_CYSIZE)+point.y, point.x, point.y, PATCOPY);
SelectObject(pDC,pOldBrush);
::DeleteObject(Brush);
pOldBrush = NULL;
::ReleaseDC(hwnd,pDC);
pDC = NULL;
}这段代码是在WM_NCPAINT里画标题栏的,BOOL m_bActive是不断变化的,根椐它值的不同画不同颜色,可是当m_bActive变为FALSE,选了颜色为RGB(200,200,200)Brush后,后面一直是画的这个颜色,再也画不出RGB(150,100,255)这个颜色了,我跟踪到代码里面,m_bActive变为TRUE后,Brush = ::CreateSolidBrush(RGB(150,100,255))这句代码也执行了,但画出来的总是RGB(200,200,200),真的好奇怪。
解决方案 »
- [求助]定义了相应的头文件,却报错“undeclared identifier”
- 有什么办法,能判断winpcap是否已经安装。(到system32下看dll是否存在不算)
- 出售源代码
- 想学习制作控件,可是又没有资料。哪位大大能帮下!
- 一个与数据库有关的问题
- 有关int 的<<
- 问一个数据结构的问题?
- 利用Ado制作出来的程序,只能在我自己的机器上运行,Faint....救命。
- SetROP2(R2_XORPEN)的困扰
- 怎样分发ATL控件?
- 如何在自绘菜单中绘制圆角菜单?如何在菜单被点击之后,在选中的菜单上画图?如何在弹出菜单时以动画的形式弹出?
- 请问哪位大侠知道GDI+中的线性渐变画刷是怎么变化的?
楼主的编码风格跟我很像 哈哈
参考一下这里绘制标题栏的程序吧,可能有用
afx_msg BOOL OnNcActivate(
BOOL bActive
);