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);
为什么我将背景颜色设置为蓝色 而当程序运行后 显示的窗口颜色是白色的?
展开
 我来答
乀柠檬最萌
2015-11-10 · TA获得超过1.6万个赞
知道大有可为答主
回答量:4550
采纳率:95%
帮助的人:450万
展开全部
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的函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
归悦欣cf
2013-03-14 · TA获得超过1443个赞
知道大有可为答主
回答量:4250
采纳率:59%
帮助的人:1323万
展开全部
dc.SetBkColor(color);不是设置窗口的背景色,而是设置文字的背景色。可以在M_CTLCOLOR消息函数中进行操作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
相思丶猫2C
2013-03-14 · TA获得超过1198个赞
知道小有建树答主
回答量:1432
采纳率:50%
帮助的人:953万
展开全部
SetBkColor并不是修改对话框背景色的。
你可以在WM_CTLCOLOR消息函数中:
static HBRUSH br = CreateSolidBrush(RGB(0,0,255));
return br;
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jellycgl
2013-03-14 · TA获得超过417个赞
知道小有建树答主
回答量:1149
采纳率:66%
帮助的人:891万
展开全部
重载这个OnEraseBack()什么也不做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jimy1
2013-03-13 · TA获得超过814个赞
知道小有建树答主
回答量:426
采纳率:100%
帮助的人:234万
展开全部
OnCtColor()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式