请教MFC的StaticText控件一些问题,求做法 有一个CString对象的文字内容,想在Static Text控件内以宋体二号字大小,字体颜色是绿色,从控件的右边飘到左边(类似跑马灯)靠停下来希望有变量阀值可以调速...ID是IDC_STATIC1感谢了,100分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.控制字体和颜色------从CStatic派生一个类,添加CFont和COLORREF成员变量,同时添加两个函数,用于设置字体和颜色,重载OnPaint函数,在里面改变字体和颜色即可2.从左边到右边,并能控制速度--------控制速度,用一个整型变量就行了,并用这个变量作为SetTimer的时间间隔;更改窗口位置,可以用SetWindowPos;从左边到右边,在OnTimer里面,SetWindowPos从左边的坐标到右边的坐标,搞定。无需另开线程,增加难度。 最简单的办法是用SetWindowsText来实现,方法如下:给你一个函数吧,比如:你的Static控件的ID是IDC_STATIC_HINT,则用如下函数void RunHorseLight(CString strText, int nSpeed){ for(int i = 1; i < strText.GetLength(); i++) { CString strOneWord = strText.Mid(i - 1, 1);//注意这里只是对英文,如果是中文还得另处理,因为中文是两个字节 CString strShowText; if(i > 1) strShowText = strText.Left(i - 1); CString strBlankSpace = ""; for(int j = 0; j < nSpeed - i; j++) strBlankSpace += " ";//用空格补上能看到从右向左跑马灯的效果 for(int j = nSpeed; j > 0; j--) { CString strMid = strBlankSpace.Left(j); strShowText = strShowText + strMid + strOneWord; GetDlgItem(IDC_STATIC_HINT)->SetWindowText(strShowText); Sleep(600); } }} 谢谢,再请教:1、CString strOneWord = strText.Mid(i - 1, 1);//注意这里只是对英文,如果是中文还得另处理,因为中文是两个字节如果strText是中文字应该如何处理呢? 2、编译好像有点问题,不过我只是把函数先到了dlg.h先,暂时没做用处编译提示:elworddlg.h(44) : error C2440: “初始化”: 无法从“const char [1]”转换为“ATL::CStringT<BaseType,StringTraits>”1> with1> [1> BaseType=wchar_t,1> StringTraits=StrTraitMFC<wchar_t>1> ]1> class“ATL::CStringT<BaseType,StringTraits>”的构造函数声明为“explicit”1> with1> [1> BaseType=wchar_t,1> StringTraits=StrTraitMFC<wchar_t>1> ]1>f:\codetest\elword\elword\elworddlg.h(51) : error C2660: “GetDlgItem”: 函数不接受 1 个参数1>f:\codetest\elword\elword\elworddlg.h(51) : error C2227: “->SetWindowTextW”的左边必须指向类/结构/联合/泛型类型1>elwordDlg.cpp1>f:\codetest\elword\elword\elworddlg.h(44) : error C2440: “初始化”: 无法从“const char [1]”转换为“ATL::CStringT<BaseType,StringTraits>”1> with1> [1> BaseType=wchar_t,1> StringTraits=StrTraitMFC<wchar_t>1> ]1> class“ATL::CStringT<BaseType,StringTraits>”的构造函数声明为“explicit”1> with1> [1> BaseType=wchar_t,1> StringTraits=StrTraitMFC<wchar_t>1> ]1>f:\codetest\elword\elword\elworddlg.h(51) : error C2660: “GetDlgItem”: 函数不接受 1 个参数1>f:\codetest\elword\elword\elworddlg.h(51) : error C2227: “->SetWindowTextW”的左边必须指向类/结构/联合/泛型类型1>f:\codetest\elword\elword\elworddlg.cpp(72) : error C2509: “PreTranslateMessage”: 成员函数没有在“CelwordDlg”中声明1> f:\codetest\elword\elword\elworddlg.h(8) : 参见“CelwordDlg”的声明1>正在生成代码...1>生成日志保存在“file://f:\codetest\elword\elword\Debug\BuildLog.htm”地44行是这个函数的:CString strBlankSpace = ""; 与其控制static里面的字移动,还不如控制static控件移动,你可以外面用一个带边框的static,里面用一个不带边框的static.CString strBlankSpace = L""; 楼主自己动手写一个吧。可通过SetTimer来设置定时器,然后在OnTimer中进行处理。如果你用Static控件,为了通用你可以自己派生一个类。 谢谢两位,折腾了一下,算是明白了原理....貌似CString strBlankSpace = L""和CString strBlankSpace = (_T(""));都可以?GetDlgItem(IDC_STATIC1)->SetWindowText(strShowText);我控件的ID的确是IDC_STATIC1,第二个参数不知道是什么问题?GetDlgItem能接受一个以上参数吗?貌似没有SetWindowText,只有SetWindoTextW,又要怎么转换呢?1>f:\codetest\elword\elword\elworddlg.h(50) : error C2660: “GetDlgItem”: 函数不接受1 个参数1>:\codetest\elword\elword\elworddlg.h(50) : error C2227: “->SetWindowTextW”的左边必须指向类/结构/联合/泛型类型后面处理的事情关键在这些变化的CString上,控件移动超出我能力范围了囧太累,明天再折腾了 activeX在网页中何时加载完?~ 关于域名解释的问题? 怎么确定按钮被按下了(API) 写bmp的问题,大家帮忙看看! 【散分】系分45/45/45, 太高兴了。散分1000 -- 之三 怎样用MFC实现以下功能? 两个问题:socket的10061错误和加载bmp文件的问题,socket入不了门,焦急中... 怎么实现表格中的数据树状显示 赚分问题 没人能解决吗? WAVEFORMATEX.wBitsPerSample 连接成功,但发送数据时,send返回-1是为什么?
从CStatic派生一个类,添加CFont和COLORREF成员变量,同时添加两个函数,用于设置字体和颜色,重载OnPaint函数,在里面改变字体和颜色即可
2.从左边到右边,并能控制速度--------
控制速度,用一个整型变量就行了,并用这个变量作为SetTimer的时间间隔;更改窗口位置,可以用SetWindowPos;从左边到右边,在OnTimer里面,SetWindowPos从左边的坐标到右边的坐标,搞定。无需另开线程,增加难度。
给你一个函数吧,比如:你的Static控件的ID是IDC_STATIC_HINT,则用如下函数void RunHorseLight(CString strText, int nSpeed)
{
for(int i = 1; i < strText.GetLength(); i++)
{
CString strOneWord = strText.Mid(i - 1, 1);//注意这里只是对英文,如果是中文还得另处理,因为中文是两个字节
CString strShowText;
if(i > 1)
strShowText = strText.Left(i - 1); CString strBlankSpace = "";
for(int j = 0; j < nSpeed - i; j++)
strBlankSpace += " ";//用空格补上能看到从右向左跑马灯的效果
for(int j = nSpeed; j > 0; j--)
{
CString strMid = strBlankSpace.Left(j);
strShowText = strShowText + strMid + strOneWord;
GetDlgItem(IDC_STATIC_HINT)->SetWindowText(strShowText);
Sleep(600);
}
}
}
谢谢,再请教:1、CString strOneWord = strText.Mid(i - 1, 1);//注意这里只是对英文,如果是中文还得另处理,因为中文是两个字节如果strText是中文字应该如何处理呢? 2、编译好像有点问题,不过我只是把函数先到了dlg.h先,暂时没做用处编译提示:elworddlg.h(44) : error C2440: “初始化”: 无法从“const char [1]”转换为“ATL::CStringT<BaseType,StringTraits>”
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC<wchar_t>
1> ]
1> class“ATL::CStringT<BaseType,StringTraits>”的构造函数声明为“explicit”
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC<wchar_t>
1> ]
1>f:\codetest\elword\elword\elworddlg.h(51) : error C2660: “GetDlgItem”: 函数不接受 1 个参数
1>f:\codetest\elword\elword\elworddlg.h(51) : error C2227: “->SetWindowTextW”的左边必须指向类/结构/联合/泛型类型
1>elwordDlg.cpp
1>f:\codetest\elword\elword\elworddlg.h(44) : error C2440: “初始化”: 无法从“const char [1]”转换为“ATL::CStringT<BaseType,StringTraits>”
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC<wchar_t>
1> ]
1> class“ATL::CStringT<BaseType,StringTraits>”的构造函数声明为“explicit”
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC<wchar_t>
1> ]
1>f:\codetest\elword\elword\elworddlg.h(51) : error C2660: “GetDlgItem”: 函数不接受 1 个参数
1>f:\codetest\elword\elword\elworddlg.h(51) : error C2227: “->SetWindowTextW”的左边必须指向类/结构/联合/泛型类型
1>f:\codetest\elword\elword\elworddlg.cpp(72) : error C2509: “PreTranslateMessage”: 成员函数没有在“CelwordDlg”中声明
1> f:\codetest\elword\elword\elworddlg.h(8) : 参见“CelwordDlg”的声明
1>正在生成代码...
1>生成日志保存在“file://f:\codetest\elword\elword\Debug\BuildLog.htm”
地44行是这个函数的:CString strBlankSpace = "";
你可以外面用一个带边框的static,里面用一个不带边框的static.CString strBlankSpace = L"";
如果你用Static控件,为了通用你可以自己派生一个类。
CString strBlankSpace = L""
和
CString strBlankSpace = (_T(""));
都可以?
GetDlgItem(IDC_STATIC1)->SetWindowText(strShowText);
我控件的ID的确是IDC_STATIC1,第二个参数不知道是什么问题?
GetDlgItem能接受一个以上参数吗?貌似没有SetWindowText,只有SetWindoTextW,又要怎么转换呢?
1>f:\codetest\elword\elword\elworddlg.h(50) : error C2660: “GetDlgItem”: 函数不接受1 个参数
1>:\codetest\elword\elword\elworddlg.h(50) : error C2227: “->SetWindowTextW”的左边必须指向类/结构/联合/泛型类型后面处理的事情关键在这些变化的CString上,控件移动超出我能力范围了囧
太累,明天再折腾了