MFC设定窗口背景
来源:互联网 发布:电棍在淘宝上怎么搜 编辑:程序博客网 时间:2024/06/10 06:57
SetDialogBkColor()
CWinApp::SetDialogBkColor
This function is obsolete.
这个函数已经被废弃,我在VC++6.o测试的确可以在初始化的时候设置窗口的背景
BOOL CTest_ColorApp::InitInstance(){/*CColorDialog cdlg;if(IDCANCEL != cdlg.DoModal()){COLORREF cl = cdlg.GetColor();SetDialogBkColor( cl, RGB(0, 0, 0) );}*/SetDialogBkColor(RGB(255,255,0),RGB(0,0,0));CTest_ColorDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: Place code here to handle when the dialog is// dismissed with OK}else if (nResponse == IDCANCEL){// TODO: Place code here to handle when the dialog is// dismissed with Cancel}// Since the dialog has been closed, return FALSE so that we exit the// application, rather than start the application's message pump.return FALSE;}
运行效果:
后面我又在VS2012中进行了测试:
BOOL CColorDlgApp::InitInstance(){SetDialogBkColor(RGB(255,255,0),RGB(0,0,0));CShellManager *pShellManager = new CShellManager;CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));SetRegistryKey(_T("应用程序向导生成的本地应用程序"));CColorDlgDlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: 在此放置处理何时用// “确定”来关闭对话框的代码}else if (nResponse == IDCANCEL){// TODO: 在此放置处理何时用// “取消”来关闭对话框的代码}else if (nResponse == -1){TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");}// 删除上面创建的 shell 管理器。if (pShellManager != NULL){delete pShellManager;}// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,// 而不是启动应用程序的消息泵。return FALSE;}
运行效果:
注意上面的那个函数属于CWinAPP;不是属于CDialog下面的;如果你不小心写在了你的派生类对话框的Init函数当中,就会出现未定义的错误
既然这个函数被废弃,那么取而代之的是什么?
WM_CTLCOLOR消息用来完成对EDIT、STATIC、BUTTON等控件设置背景和字体颜色,
利用类向导自动生成OnCtlColor()函数
该函数中设置所需颜色后再返回一个画刷句柄便可重绘控件背景色。OnCtlColor()函数对于控件背景色的处理是通过捕捉相应的控件消息来实现的。常用的此类消息有:
CTLCOLOR_DLG 对话框
CTLCOLOR_EDIT 编辑框
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滑动条
.............
HBRUSH CTest_ColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);if (pWnd->GetDlgCtrlID() == IDC_STATIC){pDC->SetBkMode(TRANSPARENT);pDC->SetTextColor(RGB(255,255,46));HBRUSH B = CreateSolidBrush(RGB(0,0,88));return (HBRUSH)B;}switch (nCtlColor){case CTLCOLOR_BTN: //没有用{pDC->SetBkMode(TRANSPARENT);HBRUSH B = CreateSolidBrush(RGB(0,0,255));return (HBRUSH)B;}case CTLCOLOR_DLG:{ pDC->SetBkMode(TRANSPARENT);HBRUSH B = CreateSolidBrush(RGB(255,0,255));return (HBRUSH)B;}case CTLCOLOR_EDIT: { COLORREF bkColor = RGB(255,255,0); CRect rect; pWnd->GetClientRect(&rect); CBrush br; br.CreateSolidBrush(bkColor); pDC->FillRect(rect, &br); pDC->SetBkColor(bkColor); pDC->SetTextColor(RGB(255,255,0));HBRUSH B = CreateSolidBrush(RGB(125,125,255));}default:return hbr;}return hbr;}
在VS2012下面:
HBRUSH CColorDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){if (pWnd->GetDlgCtrlID() == IDC_COLOR_EDIT){pDC->SetBkMode(TRANSPARENT);pDC->SetTextColor(RGB(0,255,0));HBRUSH B = CreateSolidBrush(RGB(255,255,0));return (HBRUSH)B;}switch (nCtlColor){case CTLCOLOR_BTN:{pDC->SetBkMode(TRANSPARENT);HBRUSH B = CreateSolidBrush(RGB(0,0,255));return (HBRUSH)B;}case CTLCOLOR_DLG:{ pDC->SetBkMode(TRANSPARENT);HBRUSH B = CreateSolidBrush(RGB(0,0,255));return (HBRUSH)B;}case CTLCOLOR_EDIT: { COLORREF bkColor = RGB(255,0,0); CRect rect; pWnd->GetClientRect(&rect); CBrush br; br.CreateSolidBrush(bkColor); pDC->FillRect(rect, &br); pDC->SetBkColor(bkColor); pDC->SetTextColor(RGB(255,255,0));HBRUSH B = CreateSolidBrush(RGB(125,125,255));}default:return CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);}}
但是这个消息不能够设定Button按钮;我尝试了多次都不可以,虽然它有CTLCOLOR_BTN;但是没有效果!!
WM_CTLCOLOR消息对下列五类控件是适用的:
1.Check box, radio button, push button:用选定的brush画出该控件所被放置的矩形区,控件的形状和文本再在其上画出;
2.Edit control:画出编辑区;
3.Group box:画出标题文本之下的矩形区域;
4.Scroll bar:画出滑块的轨迹;
5.List box:画出列表区域。
静态文本、边框和矩形不受该消息的影响。
还须注意的是,虽然WM-CTLCOLOR消息对Push button是适用的,但是从Windows 3.0及其以后的版本的系统中,加入了用户程序不能修改按钮外观颜色的限制,如果要达到您想要的效果的话,您需要使用owner-drawn button。
怎么修改Button按钮的颜色还没有研究,以后需要再研究把,今天只是想修改下背景的颜色,扯出来这么多知识点!
- MFC设定窗口背景
- MFC 窗口背景透明
- MFC 添加窗口背景
- MFC程序窗口标题设定
- MFC初始化窗口大小设定
- Windows窗口默认背景颜色设定
- MFC修改窗口背景颜色
- MFC改变窗口背景颜色
- MFC设置窗口背景颜色
- MFC单文档设定窗口大小固定
- MFC窗口初始化打开时窗口大小的设定
- MFC为子窗口绘制透明背景
- MFC-单文档和多文档程序窗口标题设定
- MFC简易设定通用控制窗口弹出位置
- MFC透明窗口 问题:窗口移动,背景透明解决
- VS2010中如何设置IDE窗口背景颜色、MFC框架背景颜色以及对话框背景颜色?
- MFC设置窗口背景颜色(很全很强大)
- MFC修改窗口的光标、图标和背景
- sql动态分页
- Error:SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
- Java Base64编解码
- Android简便通用的SimpleBaseAdapter
- 备份 个网站注册账号
- MFC设定窗口背景
- Mac终端安装“Install Command Line Developer Tools” (目的:终端使用SVN命令)
- 【问底】徐汉彬:Web系统大规模并发——电商秒杀与抢购
- redmine_people 的中文包
- C#注销关机重启计算机
- Android系统Home应用程序(Launcher)的启动过程源代码分析
- Oracle 安装报错 [INS-06101] IP address of localhost could not be determined 解决方法
- oracle 基线与优化(二)
- 友盟接入,授权失败,redirect_url与应用注册的网址不一致