VC中对话框背景颜色设置
1.怎么设置非用户区的颜色?2.如果设置用户区为不同颜色,比如有两个picture控件,一个的背景设置成红色,另一个设置成绿色。3.如果我只在对话框中load一个bitm...
1.怎么设置非用户区的颜色?
2.如果设置用户区为不同颜色,比如有两个picture控件,一个的背景设置成红色,另一个设置成绿色。
3.如果我只在对话框中load一个bitmap,但是这个bitmap没有占完整个用户区,怎么显示这个bitmap,而非用户区和其他的用户区则隐藏?
能提供一份代码最好。 展开
2.如果设置用户区为不同颜色,比如有两个picture控件,一个的背景设置成红色,另一个设置成绿色。
3.如果我只在对话框中load一个bitmap,但是这个bitmap没有占完整个用户区,怎么显示这个bitmap,而非用户区和其他的用户区则隐藏?
能提供一份代码最好。 展开
4个回答
展开全部
1.怎么设置非用户区的颜色?
在需要设置的对话框类中添加WM_CTLCOLOR消息响应,然后在这个函数中return那里注释掉默认的,return你的话刷就可以了!
2.如果设置用户区为不同颜色,比如有两个picture控件,一个的背景设置成红色,另一个设置成绿色。
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
这个函数中有个CWnd类型的指针,用这个指针调用GetDlgCtrlID()函数和当前控件ID做比较!
例子如下:
HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// TODO: Return a different brush if the default is not desired
if(pWnd->GetDlgCtrlID()==IDC_STATIC)
{
return m_mybrush;
}
return m_brush;
// return hbr;
}
3.如果我只在对话框中load一个bitmap,但是这个bitmap没有占完整个用户区,怎么显示这个bitmap,而非用户区和其他的用户区则隐藏?
有两种方法!
第一就是定义一个Rect在里面填充
或者还是在
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
函数中返回当前需要的位图!
可以现定义一个位图的对象和话刷的对象
CBitmap m_bitmap;
CBrush m_Cbrush;
先m_bitmap.LoadBitmap(IDB_BITMAP1);
然后用m_Cbrush创建一个位图话刷
m_Cbrush.CreatePatternBrush(&m_bitmap);//需要的是一个位图指针!
然后在对话框上面画一个picture控件
用前面说的GetDlgCtrlID()函数给这个picture控件填充颜色就可以了!
在需要设置的对话框类中添加WM_CTLCOLOR消息响应,然后在这个函数中return那里注释掉默认的,return你的话刷就可以了!
2.如果设置用户区为不同颜色,比如有两个picture控件,一个的背景设置成红色,另一个设置成绿色。
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
这个函数中有个CWnd类型的指针,用这个指针调用GetDlgCtrlID()函数和当前控件ID做比较!
例子如下:
HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// TODO: Return a different brush if the default is not desired
if(pWnd->GetDlgCtrlID()==IDC_STATIC)
{
return m_mybrush;
}
return m_brush;
// return hbr;
}
3.如果我只在对话框中load一个bitmap,但是这个bitmap没有占完整个用户区,怎么显示这个bitmap,而非用户区和其他的用户区则隐藏?
有两种方法!
第一就是定义一个Rect在里面填充
或者还是在
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
函数中返回当前需要的位图!
可以现定义一个位图的对象和话刷的对象
CBitmap m_bitmap;
CBrush m_Cbrush;
先m_bitmap.LoadBitmap(IDB_BITMAP1);
然后用m_Cbrush创建一个位图话刷
m_Cbrush.CreatePatternBrush(&m_bitmap);//需要的是一个位图指针!
然后在对话框上面画一个picture控件
用前面说的GetDlgCtrlID()函数给这个picture控件填充颜色就可以了!
展开全部
BEGIN_MESSAGE_MAP(CYourDlg, CDialog)
ON_WM_CTLCOLOR()//添加到消息映射
END_MESSAGE_MAP()
HBRUSH OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
COLORREF backColor = RGB(216, 231, 252); //office 2003背景色
pDC->SetBkMode(TRANSPARENT); //设置控件背景透明
// 判断下是不是你要改的控件ID
if( pWnd->GetDlgCtrlID() == IDC_C_CPERSON || pWnd->GetDlgCtrlID() == IDC_C_APERSON )
{
pDC->SetBkColor(RGB(153, 255, 204));
}
return CreateSolidBrush(backColor); //创建背景刷子
}
ON_WM_CTLCOLOR()//添加到消息映射
END_MESSAGE_MAP()
HBRUSH OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
COLORREF backColor = RGB(216, 231, 252); //office 2003背景色
pDC->SetBkMode(TRANSPARENT); //设置控件背景透明
// 判断下是不是你要改的控件ID
if( pWnd->GetDlgCtrlID() == IDC_C_CPERSON || pWnd->GetDlgCtrlID() == IDC_C_APERSON )
{
pDC->SetBkColor(RGB(153, 255, 204));
}
return CreateSolidBrush(backColor); //创建背景刷子
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
学习了
ps:CTLCOLOR怎么设置非系统区的颜色啊?LS可否详细解释一下?
ps:CTLCOLOR怎么设置非系统区的颜色啊?LS可否详细解释一下?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询