CFromView中窗体的美化
来源:互联网 发布:网络是一把双刃剑英语 编辑:程序博客网 时间:2024/06/17 18:15
更改颜色常需调用的消息:
更改对话框的的控件的颜色:
afx_msg hbrush onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor);
更改对话框背景:
afx_msg BOOL OnEraseBkgnd(CDC* pDC);//对话框背景
BEGIN_MESSAGE_MAP(CButtonDlg, CDialog)
ON_WM_CTLCOLOR() //建立消息映射 *.cpp
ON_WM_ERASEBKGND() //设置对话框图片背景
END_MESSAGE_MAP()
一、设置整个窗体的背景色
调用WM_ERASEBKGND消息来设置除了控件以外的窗体的背景色。
代码如下:
BOOL Cyonghu1::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBrush backBrush(RGB(104, 221, 154)); //要设置的颜色
// 保存旧画刷
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect); // 擦掉所要画的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(),
rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);
return TRUE;
//return CFormView::OnEraseBkgnd(pDC);
}
二、设置控件的背景色和字体颜色
改变对话框背景颜色后,如何使控件的背景颜色和对话框背景颜色统一?
调用WM_OnCtlColor消息,代码如下:主要是设置static text控件的颜色。
HBRUSH Cyonghu1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
switch (nCtlColor)
{ case CTLCOLOR_BTN://按钮?
case CTLCOLOR_STATIC://我们所需要改画的静态
{ static HBRUSH hbrEdit = ::CreateSolidBrush(RGB(104, 221, 154)); //设置背景色
//设置文字的背景色,否则与最初的相同,注意不是和背景色相同
pDC->SetBkColor(RGB(104,221,154));
pDC->SetTextColor(RGB(0, 0, 255)); //设置文字的颜色
return hbrEdit;
}
case CTLCOLOR_DLG:
{
CBrush* back_brush;
COLORREF color;
color = (COLORREF) GetSysColor(COLOR_BTNFACE);
back_brush = new CBrush(color);
return (HBRUSH) (back_brush->m_hObject);
}
}
//return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));
return hbr;
}
三、修改控件的背景色和底色相同
pDC->SetBkMode(TRANSPARENT);//设置字体的背景色和控件的背景色相同
hbr= (HBRUSH)::GetStockObject(HOLLOW_BRUSH); //设置控件的背景色和窗体的颜色相同
return hbr;
四、改变背景色的同时改变字体的大小
如果我们的程序上这样的:
HBRUSH Cyonghu1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{ //设置字体大小
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
CFont * cFont=new CFont;
cFont->CreateFont(30,0,0,0,FW_SEMIBOLD,TRUE,FALSE,0, ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,"黑体");
switch(pWnd->GetDlgCtrlID())
{
case IDC_STATIC3: //针对“注册用户”几个字进行放大
pWnd->SetFont(cFont);
}
//设置背景色和窗体的颜色相同
switch (nCtlColor)
{
case CTLCOLOR_BTN://按钮?
case CTLCOLOR_STATIC://我们所需要改画的静态
{ pDC->SetTextColor(RGB(0, 0, 255)); //设置文字的颜色
pDC->SetBkMode(TRANSPARENT); //设置文字的背景色和文本框体的背景色相同
return (HBRUSH)::GetStockObject(HOLLOW_BRUSH); //设置文本框体的背景色和窗体颜色相同
}
case CTLCOLOR_DLG:
{
CBrush* back_brush;
COLORREF color;
color = (COLORREF) GetSysColor(COLOR_BTNFACE);
back_brush = new CBrush(color);
return (HBRUSH) (back_brush->m_hObject);
}
}
return hbr;
}
注:如果在OnCtlColor消息中同时添加来处理字体大小和处理背景的程序,则得到的结果会使改变字体的静态文本的背景变为白色,如下图所示:
可见窗体中没有改变字体(比如用户名等)大小的背景色与窗体的颜色相同,但是改变类字体大小的用户注册的背景色为白色。
五、改变控件的字体大小
同样也是在OnCtlColor消息函数中,进行字体的设置,可以针对固定的某个ID号进行设置。程序如下:
CFont * cFont=new CFont;
cFont->CreateFont(30,0,0,0,FW_SEMIBOLD,TRUE,FALSE,0, ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,"黑体");
switch(pWnd->GetDlgCtrlID())
{
case IDC_STATIC3:
pWnd->SetFont(cFont);
}
六、修改窗体的背景图片
调用OnPaint()消息。首先通过添加资源,选择导入要显示的图片。
在该消息下添加如下代码:
void CshiyanView::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP2); //位图的ID号
//IDB_BITMAP是你自己的图对应的ID
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}
- CFromView中窗体的美化
- C#中窗体Form的美化
- C# Winform中窗体的美化
- C#中窗体Form的美化
- C#中窗体Form的美化
- C#Winform中窗体的美化
- C#中窗体Form的美化
- C#中winform窗体的美化控件 iriskin(一)
- C#中winform窗体的美化控件 iriskin(二)
- C# Winform中窗体的美化——用IrisSkin4.dll美化你的WinForm
- 用IrisSkin2.dll美化你的窗体
- 无标题窗体的移动及其简单美化
- Winform的窗体美化心酸路
- 实现窗体皮肤美化后进行窗体的移动
- 美化窗体——VB窗体的背景图充满整个窗体
- C#窗体美化
- C# 窗体美化原理
- winform窗体美化
- Spring 总结(一)
- ubuntu下samba服务器配置
- 亿图图示专家 - 专业流程图,网络拓扑图,组织结构图设计软件
- DShield Web Honeypot Project
- Linux图形界面中客户端、服务器、窗口管理器之间的关系
- CFromView中窗体的美化
- OWASP NYC AppSec 2008 Video
- 很累
- Windows 7(32位)简体中文旗舰版OEM光盘
- 使用BCDEdit修改Windows Vista以及以上操作系统的系统启动菜单
- C#常用小例子 zz
- 该下载i386.rpm还是i686.rpm?
- 最重要的事情 一 、消息通信机制(1)ant 打包方法(2) system.out.println()用法 二、UML学习
- 好书 《古代的中医》 《麦肯锡卓越工作方法》