MFC 窗口背景颜色的困惑
afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint){COLORREFcolor=RGB(0,0,255);CRectrect...
afx_msg void OnLButtonDown(UINT nFlags,CPoint point)
{
COLORREF color=RGB(0,0,255);
CRect rect;
GetClientRect(&rect);
CClientDC dc(this);
dc.SetBkColor(color);
dc.MoveTo(rect.left,rect.top);
dc.LineTo(rect.right,rect.bottom);
dc.MoveTo(rect.right,rect.top);
dc.LineTo(rect.left,rect.bottom);
}
COLORREF color=RGB(0,0,255);
dc.SetBkColor(color);
为什么我将背景颜色设置为蓝色 而当程序运行后 显示的窗口颜色是白色的? 展开
{
COLORREF color=RGB(0,0,255);
CRect rect;
GetClientRect(&rect);
CClientDC dc(this);
dc.SetBkColor(color);
dc.MoveTo(rect.left,rect.top);
dc.LineTo(rect.right,rect.bottom);
dc.MoveTo(rect.right,rect.top);
dc.LineTo(rect.left,rect.bottom);
}
COLORREF color=RGB(0,0,255);
dc.SetBkColor(color);
为什么我将背景颜色设置为蓝色 而当程序运行后 显示的窗口颜色是白色的? 展开
5个回答
展开全部
MDI窗口的客户区是由frame窗口拥有的另一个窗口覆盖的。为了改变frame窗口背景的颜色,只需要这个客户区的背景颜色就可以了。必须自己处理WM_ERASEBKND消息。下面是工作步骤:
创建一个从CWnd类继承的类
在CMDIFrameWnd中加入CMDIClient变量;(具体情况看下面的代码)
#include "MDIClient.h"
class CMainFrame : public CMDIFrameWnd
{
...
protected:
CMDIClient m_wndMDIClient;
}
重载CMDIFrameWnd::OnCreateClient,下面是这段代码,请注意其中的SubclassWindow();
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) )
{
m_wndMDIClient.SubclassWindow(m_hWndMDIClient);
return TRUE;
}
else
return FALSE;
}
最后要在CMDIClient中加入处理WM_ERASEBKGND的函数。
创建一个从CWnd类继承的类
在CMDIFrameWnd中加入CMDIClient变量;(具体情况看下面的代码)
#include "MDIClient.h"
class CMainFrame : public CMDIFrameWnd
{
...
protected:
CMDIClient m_wndMDIClient;
}
重载CMDIFrameWnd::OnCreateClient,下面是这段代码,请注意其中的SubclassWindow();
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) )
{
m_wndMDIClient.SubclassWindow(m_hWndMDIClient);
return TRUE;
}
else
return FALSE;
}
最后要在CMDIClient中加入处理WM_ERASEBKGND的函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
dc.SetBkColor(color);不是设置窗口的背景色,而是设置文字的背景色。可以在M_CTLCOLOR消息函数中进行操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SetBkColor并不是修改对话框背景色的。
你可以在WM_CTLCOLOR消息函数中:
static HBRUSH br = CreateSolidBrush(RGB(0,0,255));
return br;
你可以在WM_CTLCOLOR消息函数中:
static HBRUSH br = CreateSolidBrush(RGB(0,0,255));
return br;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
重载这个OnEraseBack()什么也不做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
OnCtColor()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询