
//全局变量或是类成员变量
CFont font;
COLORREF color=RGB(255,0,0); //初始颜色
//在OnInitDialog( )中
SetDlgItemText(IDC_EDIT1,"微软"); //设置edit控件文字
//在第一个按钮(颜色选择按钮)单击响应函数中
CColorDialog cc(RGB(255,0,0),0,this);
if(IDOK==ccDoModal())
{
color=ccGetColor();
CDC dc=GetDC();
Invalidate();
dc->FillSolidRect(0,0,50,50,color);
}
//在第二个按钮(字体选择按钮)单击响应函数中
LOGFONT lf;
CFontDialog ff;
memset(&lf,0,sizeof(LOGFONT));
if(IDOK==ffDoModal())
{
fontCreateFontIndirect(ffm_cflpLogFont);
GetDlgItem(IDC_EDIT1)->SetFont(&font);
}
//增加WM_CTLCOLOR消息响应
if(pWnd->GetDlgCtrlID()==IDC_EDIT1)
{
pDC->SetTextColor(color);
}
错误提示是说函数不能接受两个参数。这是因为命名控件造成的。MFC中很多函数名跟SDK里的都是重复的。如果你在MFC中要用API那么建议养成良好习惯在函数前面加:: 也就是改为"::GetDlgItemText(xxx,xxx)"对于第一个句柄参数你可以用this指针。::GetDlgItemText(this->m_hWnd,xxx,xxx,xxx)第二个参数是控件ID,第三个是接受的字符的缓存指针,第四个是最大接受几个字符的个数;如果你省略了"::"那么默认是使用的 MFC的CWnd类的方法。可以这样调用:CString str;this->GetDlgItemText(IDC_TEXT,str); 补充: 完蛋了,现在才发现原来已经回答了好几个你的相关问题,不知道会不会被举报刷分。 追问: 不好意思,还是不行。说明下:我把上面的GetDlgItemText和SetDlgItemText函数写在线程里了。为什么不行呢?还是有错误提示!谢谢! 回答: 错误提示是什么你也不贴上来 不过我已经大致猜出来了 既然你是写在线程函数里 那么错误提示 应该是说this不是静态变量什么的。当然啊,线程函数是不能使用类的成员的。解决方法有两个第一:定义一个全局变量保存窗口句柄,在线程函数里用全局变量。第二:把类的指针当做参数传递给线程函数。你创建线程的时候 CreateThread(NULL,0,NULL,this,0,NULL);线程处理函数:DWORD WINAPI ThreadPro(LPVOID lpvoid){ xxxxxx p = (xxxxxx )lpvoid;//关键就是这句代码了,把传进来的参数转换成类指针。"XXXXXX"是你的类名。
首先m_font要作为类成员变量。
在m_fontCreateFontIndirectW(&lf)这句之后调用Invalidate();
上面一段代码应该是在OnDraw函数中,那么在TextOut前后加上字体选择即可:
CFont oldfont = pDC->SelectObject(&m_font);pDC->TextOutW(rectWidth()/2,rectHeight()/2,L"菜单实例");
pDC->SelectObject(oldfont);
大概就是这样,因为你没有描述更多信息,可能具体步骤需要调整。
设置字体类型可以使用CFontDialog,代码如下,LOGFONT m_Font,COLORREF m_ColorFont为对话框成员变量
CFontDialog fontDlg(&m_Font);
fontDlgm_cfrgbColors = m_ColorFont;
if ( IDOK == fontDlgDoModal() )
{// 字体选择对话框
fontDlgGetCurrentFont( &m_Font );
m_ColorFont = fontDlgGetColor();
}
获取信息后可以派生CEdit自绘完成edit的字体和颜色
如果是在头文件定义的,直接包含该头文件即可。
如果是在cpp文件定义的,需要使用extern关键字声明引用,但这种方式在MFC程序中不推荐使用。
MFC下,推荐使用的全局变量,是在APP类定义成员变量,这样在任意框架内位置,只需通过AfxGetApp函数都可以获取全局APP并访问变量。
这是我利用字体对话框设置编辑控件字体的代码,你可以参考一下:
LOGFONT LogFont;
CFont font=this->GetFont();
if(font==NULL)
{
font=new CFont;
font->CreatePointFont(120, "隶书");
font->GetLogFont(&LogFont);
delete font;
}
else
{
font->GetLogFont(&LogFont);
}
CFontDialog FontDlg(&LogFont);//字体对话框
if(FontDlgDoModal()==IDOK)
{
m_fontDeleteObject();
m_fontCreateFontIndirect(&LogFont);
SetFont(&m_font);//这样设置不能改变编辑框文字颜色,仅能改变字体其他属性
//改变文字颜色必须响应WM_CTLCOLOR消息
//在消息函数处理
//CHARFORMAT cf;
//cfdwMask=CFM_CHARSET|CFM_COLOR;
//cfcrTextColor=FontDlgGetColor();
crTextColor=FontDlgGetColor();//crTextColor在WM_CTLCOLOR消息函数中用于设
//置文字颜色
InvalidateRect(NULL);
//cfdwEffects=~CFE_AUTOCOLOR;
//SetDefaultCharFormat(cf);
}
下面例子是装(调)入MS Song 中文字体。
关键语句:
fontCreateFontIndirect(&lf); // 建字体
oldfont = pDC->SelectObject(&font); //用字体
LOGFONT
lf;
lflfHeight = 240;
lflfWidth = 120;
lflfEscapement = m_ang;
lflfOrientation = m_ang;
lflfWeight = 520;
lflfItalic = 0;
lflfUnderline = 0;
lflfStrikeOut = 0;
lflfCharSet = GB2312_CHARSET;
lflfOutPrecision = 0;
lflfClipPrecision = CLIP_STROKE_PRECIS;
lflfQuality = 0;
lflfPitchAndFamily = 0;
strcpy(lflfFaceName, "MS Song");
fontCreateFontIndirect(&lf);
oldfont = pDC->SelectObject(&font);
TextOut后,就是 MS Song 中文 字符。
static CFont font; //定义静态变量,也可以定义全局变量或者对话框的成员变量,临时变量或者局部变量是不行的
fontCreatePointFont(120, "隶书");
GetDlgItem(IDC_STATIC1)->SetFont(&font);
可将静态文本控件IDC_STATIC1的字体设置为隶书
以上就是关于求代码VC6.0 MFC 实现按钮d出的颜色对话框和字体对话框,选择确定后改变编辑框中的输入文字颜色 和字体全部的内容,包括:求代码VC6.0 MFC 实现按钮d出的颜色对话框和字体对话框,选择确定后改变编辑框中的输入文字颜色 和字体、MFC获取控件文本和显示控件文本谢谢~~、我想在mfc视图中输出一段文字,然后调用系统的字体来更改这段文字的字体等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)