vc根据字体对话框和颜色对话框设置控件里的字体和颜色
VCMFC如何设置对话框背景颜色_paul的梦想天堂

VCMFC如何设置对话框背景颜色_paul的梦想天堂VC/MFC如何设置对话框背景颜色2007-06-19 19:571.重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColo r),即WM_CTLCOLOR消息。
---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:class CExampleDlgDlg : public CDialog{...protected:CBrush m_brush;...};---- ②在OnInitDialog()函数中添加如下代码:BOOL CExampleDlgDlg::OnInitDialog(){...// TODO: Add extra initialization herem_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子...}---- ③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:HBRUSH CExampleDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){/*** 这里不必编写任何代码!**下行代码要注释掉** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);*/return m_brush; //返加绿色刷子}2.修改对话框的OnPaint,在else中添加如下代码CPaintDC dc(this);CRect rect;GetClientRect(rect);dc.FillSolidRect(rect, RGB(0,0,0));CDialog::OnPaint();3.在对话框的应用类(App)的.cpp的Initinstance()中加入代码: //加在int nResponse=dlg.DoModal();前一个RGB设置背景色,第二个设置字体颜色SetDialogBkColor(RGB(0,0,255),RGB(0,255,0));4.1.在对话框类中添加成员变量:public:CBrush m_brushBlue;2.在对话框类的OnInitDialog()中添加代码:m_brushBlue.CreateSolidBrush(RGB(0,0,255));3.用ClassWizard在对话框类中添加成员函数OnCtlCollor(),并在其中添加代码:if(nCtlColor==CTLCOLOR_DLG) return m_brushBlue;。
使用RichEdit使文本框显示颜色和字体

Environment: VC6 SP4, 2000.Follow these 10 easy steps to build the OutLookRichEdit control:1. Insert a rich edit control into the dialog.2. Call AfxInitRichEdit() in the InitInstance of the App class or in InitDialog.3. If it does not exist, copy OutLookRichEdit.cpp and OutLookRichEdit.h to theproject directory.4. Click the menu choice Project-Add to Project-Files and select the above-copiedfiles to add the wrapper class to your project.5. Import the hand cursor into the resource and rename it "IDC_LINK".6. Use Classwizard to add a member variable of the rich edit control (CRichEditCtrl).7. Include the OutLookRichEdit.h file in the dialog's header file and change thedeclaration of rich edit member variable, as inCRichEditCtrl m_ctrlText1;toCOutLookRichEdit m_ctrlText1;8. In InitDialog(), add the following code.9.m_ctrlText1.SetRawHyperText(_T("Click <%$here$#100#%>to see the about box."));At this level, if you build the project and run it, you can see the rich edit control with linked text, but nothing would happen if you clicked on the link.To Show a dialog while the link is clicked, you have to add some more code in the dialog class. Before that, have a closer look at the preceding code and hypertext syntax. The link text is enclosed between the "$" symbols and the corresponding dialog's resource value 100 (About Box), enclosed in "#" symbols.You can find the #define values of dialogs in the resource.h file.10. Use ClassWizard to map OnNotify of the dialog and write the correspondingimplementation code in .cpp file, like:11.BOOL CDEMODlg::OnNotify(WPARAM wParam,12. LPARAM lParam,13. LRESULT* pResult)14.{15. NMHDR* pNmHdr = (NMHDR*) lParam;16. if(IDC_RICHEDIT1 == pNmHdr->idFrom){17. switch(pNmHdr->code)18. {19. case IDD_ABOUTBOX:20. CAboutDlg oDlg;21. oDlg.DoModal ();22. break;23. }24. }25. return CDialog::OnNotify(wParam, lParam, pResult);}26. Now, build and run the project. It is recommended that you set the read-onlyattribute to the rich edit control.DownloadsDownload demo project - 23 KbDownload source - 6 Kb在RichEdit中插入BitmapCOleDataSource src;STGMEDIUM sm;sm.tymed=TYMED_GDI;sm.hBitmap=hbmp;sm.pUnkForRelease=NULL;src.CacheData(CF_BITMAP, &sm);LPDATAOBJECT lpDataObject =(LPDATAOBJECT)src.GetInterface(&IID_IDataObject);pRichEditOle->ImportDataObject(lpDataObject, 0, NULL);lpDataObject->Release();字体设置代码最后添加字体变换函数:CHARFORMAT cf;LOGFONT lf;memset(&cf, 0, sizeof(CHARFORMAT));memset(&lf, 0, sizeof(LOGFONT));//判断是否选择了内容BOOL bSelect = (GetSelectionType() != SEL_EMPTY) ? TRUE : FALSE;if (bSelect){GetSelectionCharFormat(cf);}else{GetDefaultCharFormat(cf);}//得到相关字体属性BOOL bIsBold = cf.dwEffects & CFE_BOLD;BOOL bIsItalic = cf.dwEffects & CFE_ITALIC;BOOL bIsUnderline = cf.dwEffects & CFE_UNDERLINE;BOOL bIsStrickout = cf.dwEffects & CFE_STRIKEOUT;//设置属性lf.lfCharSet = cf.bCharSet;lf.lfHeight = cf.yHeight/15;lf.lfPitchAndFamily = cf.bPitchAndFamily;lf.lfItalic = bIsItalic;lf.lfWeight = (bIsBold ? FW_BOLD : FW_NORMAL);lf.lfUnderline = bIsUnderline;lf.lfStrikeOut = bIsStrickout;sprintf(lf.lfFaceName, cf.szFaceName);CFontDialog dlg(&lf);dlg.m_cf.rgbColors = cf.crTextColor;if (dlg.DoModal() == IDOK){dlg.GetCharFormat(cf);//获得所选字体的属性if (bSelect)SetSelectionCharFormat(cf); //为选定的内容设定所选字体elseSetWordCharFormat(cf); //为将要输入的内容设定字体}在RichEdit中实现超链接在RichEdit中实现超链接责任编辑:admin 在CBuilder上制作更新日期:2005-8-6首先在Form上放置一个RichEdit。
VC++更改对话框背景色和字体颜色

VC++更改对话框背景色和字体颜色方法一:设置所有窗口的颜色MFC程序修改对话框的背景和文字颜色最简单的方法就是调用SetDialogBkColor函数,SetDialogBkColor是CWinApp类的成员函数,以下是该函数的原型:void CWinApp::SetDialogBkColor(COLORREF clrCtlBk, COLORREF clrCtlText);请注意,SetDialogBkColor函数并不是对Windows的某个API 的封装,他是MFC框架的一部分,所以不使用MFC的程序也就不能享受这种方便。
这个函数的使用很简单,在程序的CWinApp派生类的InitInstance函数中,添加一行代码就行了,写在domodal()的上一句:SetDialogBkColor(RGB(188,197,230),RGB(13,125,188));注:前一个为背景色,后一个为字体颜色。
方法二:设置当前窗口改变对话框的背景颜色的原理很简单,就是响应WM_ERASEBKGND消息,用自定义的颜色填充对话框的客户区背景,代替对话框窗口默认的背景填充动作。
改变控件和字体的颜色同理,是响应WM_CTLCOLOR这一消息。
具体操作,方法如下:首先://消息映射BEGIN_MESSAGE_MAP(CHelloDlg, CDialog)//{{AFX_MSG_MAP(CHelloDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_CTLCOLOR() //字体颜色ON_WM_ERASEBKGND() //背景色ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPEND_MESSAGE_MAP()其次:定义两个函数afx_msg BOOL OnEraseBkgnd(CDC* pDC);afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);第三:重载OnEraseBkgnd和OnCtlColor其中预先定义:protected:CBrush m_brBkgnd;//设置对话框背景色方法一:可以实现(但有点问题)BOOL CHelloDlg::OnEraseBkgnd(CDC* pDC){CRect rect;GetClientRect(&rect);m_brBkgnd.CreateSolidBrush(RGB(183,213,213)); //背景色pDC->FillRect(&rect,&m_brBkgnd);return TRUE;}方法二:可行BOOL CClientDlg::OnEraseBkgnd(CDC* pDC){CBrush back(RGB(220,215,254));CBrush* pold=pDC->SelectObject(&back);CRect rect;pDC->GetClipBox (&rect);pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);pDC->SelectObject(pold);return TRUE;方法三:也可行BOOL CHelloDlg::OnEraseBkgnd(CDC* pDC){CBrush MyBrush;MyBrush.CreateSolidBrush(RGB(0,255,0));CBrush *pOldBrush=pDC->SelectObject(&MyBrush);CRect Rect;GetClientRect(&Rect);pDC->Rectangle(&Rect);pDC->SelectObject(pOldBrush);return TRUE;}//设置对话框中控件的字体颜色HBRUSH CHelloDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);if(pWnd->GetDlgCtrlID() == IDC_EDIT_MULLINE) //多行edit 控件{pDC->SetT extColor(RGB(13,125,188)); //设置字体颜色return hbr;}else{pDC->SetBkMode(TRANSPARENT);pDC->SetT extColor(RGB(255,125,188));return (HBRUSH)m_brBkgnd; //因为CBrush类实现了HBRUSH 类型转换操作符}。
VC中修改字体

VC中设置对话框中控件的字体1.新建一个基本对话框的工程,建立几个基本的控件:按钮,静态文本,分组框,文本框。
如图1。
2.在对话框类的OnInitDialog()中修改字体属性,其中要用到CWnd类中的CreateFont和SetFont函数。
CreateFont函数功能:该函数创建一种有特殊性的逻辑字体,此逻辑字体可以在后面被任何设备选择。
函数原型:HFONT CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwltalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace);nHeight:指定字体的字符单元或字符的逻辑单位高度,字符的高度值(也被称为em高度)是指字符单元高度值减去内部标头值。
0:字体映射器转换在选择匹配时用一个缺省的高度值。
nWidth:指定所要求字体的字符的逻辑单位的平均宽度。
如果此值为0,字体映射器选择一个closest match值,closest match值是由比较当前设备的特征系数与可使用字体的数字化特征系数之差的绝对值而确定的。
nEscapement:指定移位向量和设备X轴之间的一个角度,以十分之一度为单位。
移位向量平行于正文行的基线。
nOrientation:指定每个字符的基线和设备X轴之间的角度。
FnWeight:在0到1000之间指定字体的权值,如400表示标准体,700表示黑(粗)体,如果此值为0,则使用缺省的权值。
为方便定义,可使用如下值:FW_DONTCARE:0;FW_THIN;100;FW_EXTRALIGHT;200;FW_ULTRALIGHT;200;FW_LIGHT;300;FW_NORMAL:400;FW_REGULAR;400;FW_MEDIUM;500;FW_SEMIBOLD;600;FW_DEMIBOLD;600;FW_BOLD:700;FW_EXTRABOLD;800;FW_ULTRABOLD;800;FW_HEA VY;900;FW_BLACK;900。
VC++之控件之改变编辑框内字体颜色

VC++之控件之改变编辑框内字体颜色2010年05月08日星期六下午 07:38一、创建工程点“文件”,点“新建”点“MFC AppWizard.exe”,选择存储路径,输入工程名“颜色选择”二、设计对话框添加组框、单选按钮、编辑框添加类内变量colour添加m_edit、m_CsEdit变量添加WM_CTLCOLOR消息的响应函数添加单选按钮的响应函数;于初始化函数内添加编辑框之代码三、编辑代码双击OnRadio1函数,进入代码编辑区,编辑代码(输入红色代码)为:HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereif(nCtlColor == CTLCOLOR_EDIT)pDC->SetTextColor(colour);// TODO: Return a different brush if the default is not desired return hbr;}void CMyDlg::OnRadio1(){// TODO: Add your control notification handler code herecolour = RGB(255,0,0);m_edit.SetFocus();}void CMyDlg::OnRadio2(){// TODO: Add your control notification handler code herecolour = RGB(0,0,255);m_edit.SetFocus();}void CMyDlg::OnRadio3(){// TODO: Add your control notification handler code herecolour = RGB(0,255,0);m_edit.SetFocus();}void CMyDlg::OnRadio4(){// TODO: Add your control notification handler code herecolour = RGB(255,255,0);m_edit.SetFocus();}四、编译五、函数说明1、CDC::SetTextColor函数声明viod COLORREF SetTextColor(COLORREF crClor)crColor:以RGB形式设置颜色参数功能:设置文本颜色,返回值为文本颜色改变前的RGB值。
CStatic设置文字、字体、颜色和OnCtlColor的使用

CStatic设置文字、字体、颜色和OnCtlColor的使用BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet,BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );参数说明:nHeight :字体高度.>0:字体的高度值;=0:字体采用缺省直.<0:此值的绝对值为高度.nWidth :字体宽度.nEscapement :文本行的倾斜度.nOrientation :字符基线的倾斜度.nWeight:指定字体磅数(用每1000点中墨点像素数计)。
尽管nWeight 可为0到1000中的任意整数值,常用值和常数如下:以上各值是大约数,实际外观依赖字体大小,有的字体仅有FW_NORMAL,FW_REGULAR,FW_BOLD磅数。
如果FW_DONTCARE被指定,则使用缺省磅数。
bItalic :字体是否为斜体bUnderline :字体是否带下划线cStrikeOut :字体是否带删除线nCharSet :字体的字符集.ANSI_CHARSET.DEFAULT_CHARSET.SYMBOL_CHARSET.....nOutPrecision :字符的输出精度nClipPrecision :字符裁剪的精度nQuality :字符的输出质量nPitchAndFamily :字符间距和字体族(低位说明间距,高位说明字符族)lpszFacename :字体名称/v/mfcshouce/Class/CFont_CreateFont.htm设置字体BOOL CTMyDlg::OnInitDialog(){CDialog::OnInitDialog();//CFont m_Font;m_Font.CreateFont(-12,0,0,0,700,0,1,0,0,0,0,0,0,_T( "宋体 "));CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1);m_Edit->SetFont(&m_Font,FALSE);return TRUE; // return TRUE unless you set the focus to a control}小小说明:在OnInitDialog()中的//CFont m_Font;前的"//"号去掉,将类声明中的CFont m_Font;去掉会是什么结果?请自己试试.设置字体SetDlgItemT ext(IDC_STATIC1,"你好"); //设置文本设置颜色由于CStatic没有现成的接口,要么自己继承CStatic然后重写WM_CTLCOLOR的响应函数。
VC++简单应用指南三——控件的使用
VC++简单应用指南三——控件的使用一.静态文本控件1.设置静态文本控件显示文字2.通过函数修改静态文本显示内容/2.1修改ID2.2给文本框添加变量 2.3变量调用函数2.4程序m_m.SetWindowText("函数修改文本显示内容");3.设置文本颜色/3.1添加窗口消息句柄 3.2添加程序3.3程序if(nCtlColor==CTLCOLOR_STATIC)pDC->SetTextColor(RGB(255,0,0));4.给静态文本添加单击事件/4.1修改ID 4.2选择Notify属性(属性-样板-通知)4.3创建单击事件函数 4.4程序void CWenbenDlg::OnStatic1(){// TODO: Add your control notification handlercode hereMessageBox("成功");}二、编辑框控件1.1密码输入编辑框 1.2使编辑框内容只读(用户不可修改)1.3让编辑框内容多行显示 1.4在编辑框中Enter键换行1.5效果显示2.获取编辑框内容/2.1给编辑框添加变量2.2添加按钮控件并为其添加函数 2.3程序CString str;m_v.GetWindowText(str);MessageBox(str);2.4显示效果三、图像控件1.1创建图像控件 1.2为图像控件添加图像/1.2.1在资源视图中导入图像1.2.2显示图像 1.2.3排列控件上下显示顺序1.2.4显示效果 2.设置边框颜色和填充颜色只有类型是框架或者矩形时,可调控颜色;类型为位图时,是无法调控的3.居中显示位图四、按钮控件1.按钮控件显示图标/1.1先设置图标属性 1.2添加图标/1.3程序m_b.SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME));1.4显示效果2.为按钮控件添加单击事件/2.1双击添加函数2.2通过类向导添加函数五、复选框控件1.设置复选框选中状态/1.1创建对话框 1.2创建2个群组框控件和6个复选框控件1.3给复选框设置变量 1.4.1在OnInitDialog函数中设置复选框1.4.1程序 1.4.2属性中设置复选框不可修改m_Chinese.EnableWindow(FALSE);//复选框不可修改m_Chinese.SetCheck(1);//复选框选中状态m_Arith.EnableWindow(FALSE);m_Arith.SetCheck(1);2.用复选框统计信息/2.1在案例一的基础上加控件 2.2给提交按键添加单击事件2.2程序 2.3测试CString ID,Name,str,text;GetDlgItem(IDC_EDIT1)->GetWindowText(Name);GetDlgItem(IDC_EDIT2)->GetWindowText(ID);str="姓名:"+Name+"编号:"+ID+"\r\n";str+="必修课:语文、数学\r\n选修课:";for(int i=0;i<4;i++){CButton*but=(CButton*)GetDlgItem(IDC_CHECK3+i);if(but->GetCheck()==1){but->GetWindowText(text);str+=text+"、";}}str=str.Left(str.GetLength()-2);MessageBox(str);六、单选按钮控件1.单选按钮分组/1.1创建对话框 1.2创建单选按钮控件1.3属性对单选进行分组 1.4效果语文单选按钮以后为一组;英语单选按钮以后为一组;遵循Tab键顺序2.使用Tab键重建分组/2.1打乱上例的单选按钮顺序 2.2使用Tab顺序重新排列顺序3.获得单选按钮控件文本/3.1创建按钮控件 3.2创建变量3.3为四个单选按钮创建单选事件 3.3程序void CDfsqerDlg::OnRadio1(){ m_Radio=1;}void CDfsqerDlg::OnRadio2(){ m_Radio=2;}void CDfsqerDlg::OnRadio3(){ m_Radio=3;}void CDfsqerDlg::OnRadio4(){ m_Radio=4;}3.4提交按键的单击事件创建 3.4程序CString str;CButton *Radiobutton=(CButton*)GetDlgItem(IDC_RADIO1+m_Radio-1);Radiobutton->GetWindowText(str);MessageBox(str);1.创建组合框/1.1创建对话窗口 1.2添加组合框控件1.3在属性中添加下拉内容 1.3显示效果如果下拉无法显示,就增大组合框控件的大小1.4调整数据显示顺序 1.5类型为简单显示2.获取选择的数据/2.1以上例,为组合框添加变量 2.2为组合框添加选择改变事件2.3为组合框添加选择改变事件添加函数 2.3程序int pos=m_Combo.GetCurSel();//获得当前选择的列表项索引CString str;m_Combo.GetLBText(pos,str);//根据索引获得数据MessageBox(str);1.在列表框中指定位置插入内容/1.1创建对话框 1.2添加2个静态文本,2个编辑框,1个列表框和按键1.3对编辑框和列表框添加变量 1.4在对话框初始化时向列表框插入数据程序:m_List.AddString("语文");m_List.AddString("数学");m_List.AddString("英语");m_List.AddString("物理");1.5给插入按键添加单击事件 1.5程序UpdateData(TRUE);m_List.InsertString(m_Num,m_Text);2.实现避免插入重复数据/2.1修改上例,删除编辑框等 2.2修改编辑框变量的属性2.3处理插入按钮的点击事件CString str;m_Text.GetWindowText(str);int num=m_List.GetCount();//获得列表框的行数for(int i=0;i<num;i++){CString Text;m_List.GetText(i,Text);if(Text == str){MessageBox("数据已存在!");return;}} m_List.AddString(str);3.在列表框中实现复选功能/3.1修改2例; 3.2对列表框设置变量;是控件型3.3双击类文件,打开头文件,修改CListBox为CCheckListBox 3.4确定按键添加函数3.5程序 3.6修改列表框属性CString strText="";int num=m_List.GetCount();//获得列表框的行数for(int i=0;i<num;i++){if(m_List.GetCheck(i)){CString str;m_List.GetText(i,str);strText += str;}}MessageBox(strText);九.进度条控件1.1创建一个对话框 1.2添加一个进度条控件1.3对进度条控件添加变量 1.4在初始化方法中添加进度条范围m_p.SetRange(1,100);//设置进度条范围SetTimer(1,100,NULL);//100是一秒,一秒发生一次事件1.5建立计时器事件 1.6在计时器函数中添加程序static int i;//定义局部变量m_p.SetPos(i++);//定义进度条位置1.6效果:1.7设置显示风格。
VC中动态改变控件和对话框字体(大小)
VC中动态改变控件和对话框字体(大小)VC中动态改变控件和对话框字体(大小)1 VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体。
对于你的问题,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了。
例子:1、改静态文体的ID,如:IDC_STATIC12、添加一个Edit控件,建立一个关联的控件m_editControl。
3、在OnInitDialog中添加如下代码:CFont局部变量, 在非MFC程序,首先用CreateFont来建立一个字体句柄,然后再用SendMessage发给控件WM_SETFONT消息,将建立的字体句柄赋值过去,就可以了。
实例下载:/download/CtrlFont.zip2 但是整个对话框或窗口的字体的大小,使用对话框或窗口的SetFont()函数却没有任何的作用.可以在初始化时遍历每个控件分别设置来处理,但这里说另一种使用回调函数的简单方法::调用系统的API:::EnumChildWindows(). ,传入回调函数和重新定义的字体.(第一个参数不用管啊,本来就有啊))1)在文档视图结构中CMainFrame::OnCreate().中调用::EnumChildWindows(). 实现所有窗口和子窗口字体改变2) 在对话框的OnInitDialog(). 中调用::EnumChildWindows(). 改变对话窗上的所有控件.回调函数如下:使用1:使用2:实例下载:/gdi/SetFont/SetFont_demo.zip3 如何在mfc中实现,当系统的字体变大的时候,对话框上面的字体也相应的变大?(非常感谢)//::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)f);以上是取得系统字体的大小,然后再调用上面的第二种方法,哈哈哈哈哈!窗体上的所有字体都会跟着系统字体的大小改变,哈哈哈哈!主要使用API:SystemParametersinfo该函数查询或设置系统级参数。
如何改变对话框中控件及其文本的颜色
如何改变对话框中控件及其文本的颜色
河南理工大学/韦未来
相信各位刚接触VC的朋友也和我一样想知道如何把控件设置得更漂亮些,但由于所学有限,在这篇文章中,我们只来探讨如何改变ListBox控件及其文本的颜色。
这是我从别人那学过来的,演练了一遍并稍加整理,现贴出来,献给和我一样在学习的道路上苦苦求索的各位友友们。
第一步:
创建一个基于对话框的工程(这里我们将其命名为“控件练习”),然后在对话框中加入一个ListBox控件。
如图所示:
第二步:
在“控件练习Dlg.h”中加入一个成员变量:CBrush m_brush;
第三步:
在OnInitDialog 中加入如图所示代码:
其中RGB(144,101,210)是设置ListBox 的背景色。
接下来我们利用类向导给LisBox 控件添加一个Control 类型的成员变量m_ctrlListBox
,如图:
再在OnInitDialog()中添加如图所示代码:
其中括号内中文字符为控件中显示的内容,可以随意改动。
第四步:
利用类向导给对话框“控件练习Dlg”添加WM_CTLCOLOR 事件,如图:
然后进入OnCtlColor(),添加如图所示代码:
最后编译运行,结果如下:。
在VC中改变树状控件子项Item字体和颜色
在VC中改变树状控件子项Item字体和颜色在VC++中改变树状控件子项Item字体和颜色Setting color and font attribute of the item for CTreeCtrl in VC++.翻译Zafir Anjum 的文章Setting color and font attribute for individual items原文通过定义一个继承CTreeCtrl的类来实现改变子项字体和颜色:首先定义一个字体、颜色的结构体:protected:struct Color_Font{COLORREF color;LOGFONT logfont;};使用CMap来保存各个Item对应的字体、颜色信息CMap< void*, void*, Color_Font, Color_Font& > m_mapColorFont ;添加设置字体、颜色、粗体的函数void CTreeCtrlX::SetItemFont(HTREEITEM hItem, LOGFONT& logfont){Color_Font cf;if( !m_mapColorFont.Lookup( hItem, cf ) )cf.color = (COLORREF)-1;cf.logfont = logfont;m_mapColorFont[hItem] = cf;}void CTreeCtrlX::SetItemBold(HTREEITEM hItem, BOOL bBold) {SetItemState( hItem, bBold ? TVIS_BOLD: 0, TVIS_BOLD );}void CTreeCtrlX::SetItemColor(HTREEITEM hItem, COLORREF color){Color_Font cf;if( !m_mapColorFont.Lookup( hItem, cf ) )cf.logfont.lfFaceName[0] = '/0';cf.color = color;m_mapColorFont[hItem] = cf;}BOOL CTreeCtrlX::GetItemFont(HTREEITEM hItem, LOGFONT * plogfont){Color_Font cf;if( !m_mapColorFont.Lookup( hItem, cf ) )return FALSE;if( cf.logfont.lfFaceName[0] == '/0' )return FALSE;*plogfont = cf.logfont;return TRUE;}BOOL CTreeCtrlX::GetItemBold(HTREEITEM hItem){return GetItemState( hItem, TVIS_BOLD ) & TVIS_BOLD;}COLORREF CTreeCtrlX::GetItemColor(HTREEITEM hItem){// Returns (COLORREF)-1 if color was not setColor_Font cf;if( !m_mapColorFont.Lookup( hItem, cf ) )return (COLORREF)-1;return cf.color;}添加WM_PAINT 信息监控,重载OnPaint()函数来实现绘制afx_msg void CMyTreeCtrl::OnPaint(){//获取当前绘制对象的DCCPaintDC dc(this);// 使用将要绘制的对象的DC创建一个memory DC//memory device context的概念:是在内存中创建一个结构来反映一个显示(屏幕区域、窗口、//打印机等)的表面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vc 根据字体对话框和颜色对话框设置控件里的字体和颜色vc 根据字体对话框和颜色对话框设置控件里的字体和颜色2009-05-23 10:13:25| 分类:VC&MFC|字号订阅视频教程及其源码下载地址/source/780472 题目:编写一个基于对话框的应用程序,要求其能实现如下功能:(1)可以用来打开及显示文本文件。
(2)可以设置所显示的文本的字体颜色。
★打开Microsoft Visual C++ 6.0 文件->新建选择MFC AppWizard(exe) 输入工程文件名。
这里填写09 点击确定按钮,程序将自动出现MFC应用程序向导选择基本对话框点击完成按钮出现新建工程信息对话框。
点击确定按钮★★★★首先是定义颜色类★★★★★ ★点工具栏->插入->类name 任意填写这里填的是CStatic09 Base class选择CStatic 点击确定按钮。
★鼠标切换左边的类视图区出现09 classes 鼠标左键双击CStatic09 左边将出现N行代码找到class My09Static : public CStatic { // Construction public: My09Static(); 。
在下面输入:private: COLORREF m_ForeColor; //文本颜色COLORREF m_BackColor; //背景色CBrushm_BkBrush; //背景刷public: voidSetForeColor(COLORREF color);//设置文本颜色void SetBkColor(COLORREF color);//设置背景颜色找到protected: //{{AFX_MSG(My09Static) // NOTE - the ClassWizard will add and remove member functions here. /}}AFX_MSG DECLARE_MESSAGE_MAP() 在中间加入afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);//消息响应函数效果如下:protected://{{AFX_MSG(My09Static) // NOTE - the ClassWizard will add and remove member functions here. afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);//消息响应函数/}}AFX_MSG DECLARE_MESSAGE_MAP() ★点击CStatic09左边的+号按钮出现CStatic09() 右键双击CStatic09() 左边将出现N行代码找到CStatic09::CStatic09() { } 在大括号与小括号之间输入://文字颜色m_ForeColor =GetSysColor( COLOR_BTNTEXT ); //背景色m_BackColor = GetSysColor( COLOR_BTNFACE ); //背景刷m_BkBrush.CreateSolidBrush(m_BackColor); 找到BEGIN_MESSAGE_MAP(My09Static, CStatic)//{{AFX_MSG_MAP(My09Static) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP END_MESSAGE_MAP() 在中间输入ON_WM_CTLCOLOR_REFLECT()//颜色宏定义效果如下BEGIN_MESSAGE_MAP(My09Static, CStatic)//{{AFX_MSG_MAP(My09Static) // NOTE - the ClassWizard will add and remove mapping macros here. ON_WM_CTLCOLOR_REFLECT()//颜色宏定义//}}AFX_MSG_MAP END_MESSAGE_MAP() 最后找到///////////////////////////////////////////////////////////////////////////// // CStatic09 message handlers 在下面输入HBRUSH CStatic09::CtlColor(CDC* pDC, UINT nCtlColor){ pDC->SetTextColor( m_ForeColor );pDC->SetBkColor( m_BackColor ); return (HBRUSH)m_BkBrush.GetSafeHandle(); } void CStatic09::SetForeColor(COLORREF color) //设置文本颜色{ m_ForeColor = color; } voidCStatic09::SetBkColor(COLORREF color) //设置背景颜色{ m_BackColor = color; m_BkBrush.Detach();m_BkBrush.CreateSolidBrush( m_BackColor ); } 设置对话框代码找到类视图中的CMu09Dlg,双击后显示代码。
在文件前面加入头文件#include "Static09.h" 找到class CMy09Dlg : public CDialog { // Construction public:CMy09Dlg(CWnd* pParent = NULL); // standard constructor 在下面声明变量CStatic09 m_Edit1; CFont m_Font; //控件字体COLORREF m_clrTxtColor;//字体颜色控制点击类视图中CMy09Dlg后单击CMy09Dlg右边的+号找到DoDataExchange(CDataExchange* pDX)双击后找到voidCMy09Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMy09Dlg) // NOTE: the ClassWizard will add DDX and DDV calls here//}}AFX_DATA_MAP } 在之间输入DDX_Control(pDX, IDC_EDIT1, m_Edit1);//关联一个控件效果如下void CMy09Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMy09Dlg) // NOTE: the ClassWizard will add DDX and DDV calls hereDDX_Control(pDX, IDC_EDIT1, m_Edit1);//}}AFX_DATA_MAP } 在类视图中找到OnlnitDialog()双击后找到// TODO: Add extra initialization here returnTRUE; // return TRUE unless you set the focus to a control } 在之间输入m_Edit1.SetBkColor( RGB(255,255,255) );//设置字体背景为白色效果如下:// TODO: Add extra initialization here m_Edit1.SetBkColor( RGB(255,255,255) );//设置编辑框字体背景为白色return TRUE; // return TRUE unless you set the focus to a control ☆☆☆设置主对话框☆☆☆ ☆点击资源视图找到09 resources 下面的Dialog 点击Dialog 左边的+号,找到IDD_MY09_DIALOG 双击该对话框左边出现对话框视图删除“TODO: 在这里设置对话控制。
”这个标签然后分别添加三个按钮控件和Edit文本框控件分别将三个按钮改名为打开文件改变字体大小和改变字体颜色☆双击打开文件按钮将弹出一个对话框点击ok 出现void CMy09Dlg::OnButton1() { // TODO: Add your control notification handler code here } 在括号中添加打开文件的代码char szFilters[]= "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||"; //设置打开后缀名为txt的文件CFileDialog fileDlg (TRUE, "txt", "*.txt", OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this); // Display the file dialog. When user clicks OK, fileDlg.DoModal() // returns IDOK. if( fileDlg.DoModal()==IDOK ){ CString pathName = fileDlg.GetPathName();CStdioFile out; out.Open(pathName, CFile::modeRead); CString sSql="",s; //读取文件do{ out.ReadString(s); sSql=sSql+s+(char)10; } while (out.GetPosition()!=out.GetLength()); out.Close(); GetDlgItem(IDC_EDIT1)->SetWindowText(sSql); //显示文本UpdateData(FALSE); } 然后返回对话框设计界面☆双击打开改变字体大小按钮将弹出一个对话框点击ok 出现void CMy09Dlg::OnButton2() { // TODO: Add your control notification handler code here } 在括号中添加改变字体大小的代码LOGFONT lf;GetDlgItem(IDC_EDIT1)->GetFont()->GetLogFont(& amp;lf); //使用按钮的当前字体初始化字体对话框CFontDialog dlgFontDlg(&lf); //显示字体选择对话框if (dlgFontDlg.DoModal() == IDOK) { //如果用户在字体选择对话框中单击了“确定”按钮//则将按钮ID_BUTTON_DEMODE的标题文本字体设置为所选定的字体static CFont font;dlgFontDlg.GetCurrentFont(&lf);font.DeleteObject(); font.CreateFontIndirect(&lf); GetDlgItem(IDC_EDIT1)->SetFont(&font); } ☆然后返回对话框设计界面双击打开改变字体颜色按钮将弹出一个对话框点击ok 出现void CMy09Dlg::OnButton3(){ // TODO: Add your control notification handler code here } 在括号中添加改变字体颜色的代码CColorDialog colorDlg; //显示if(colorDlg.DoModal()) { CString m_str; char TempStr1[10]; //定义char TempStr2[10]; char TempStr3[10]; int x,y,z; memset(TempStr1,'\0',10); memset(TempStr2,'\0',10); memset(TempStr3,'\0',10); //获得颜色m_clrTxtColor = colorDlg.GetColor(); static CString sMessage; sMessage.Format("%03d, %03d, %03d",GetRValue( m_clrTxtColor ),GetGValue( m_clrTxtColor ),GetBValue( m_clrTxtColor ));sscanf(sMessage,"%s %s %s",TempStr1,TempStr2,Temp Str3); //赋值变量x=atoi(TempStr1);//类型转换y=atoi(TempStr2); z=atoi(TempStr3);m_Edit1.SetForeColor(RGB(x,y,z) ); //刷新窗口Invalidate(); } 2008-11-16 河边杨柳/。