VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 869|回复: 13

[已解决]关于MFC中的控件问题

[复制链接]
40_avatar_middle
最佳答案
0 
在线会员 发表于 2020-12-14 11:59:50 | 显示全部楼层 |阅读模式
问题如下:
因为原来的项目中需要把编辑框的属性改为只读,又因为编辑框的个数有点多,所以我想用一个循环来设置。但是发现控件的ID是整形,如何通过控件的ID的那种来查找设置呢?
可能讲的不清楚,代码如下
for(int i=1;i<=26;i++)
{
CString d,str;
d.Format(_T(%d),i);
str="IDC_EDIT"+d;
((CEdit*)GetDlgItem(str))->SetReadOnly(true);

}
上述说str需要整形才可以,问如何通过这个str字符转变成整形呢?
最佳答案
19_avatar_small
2020-12-14 13:53:59
咸鱼李 发表于 2020-12-14 13:43
我看下扽等更能不能发


不好意思  哪个_ttoi()这个是错误的  我看错了IDC_EDIT是不能转成int 的


用下面这这个  我刚才试过了
CString Str;
        int num = 999;
        for (int i = 1; i < 18; i++)
        {
                num += 1;
                GetDlgItem(num)->EnableWindow(false);
        }




上一篇:有关修改内存的,这段代码为啥执行不成功
下一篇:VS2019环境下做MFC开发,OnPaint里会把Microsoft forms的控件覆盖
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-12-14 12:30:34 | 显示全部楼层
本帖最后由 236a 于 2020-12-14 12:38 编辑

你项目的控件id是连号的吗????(IDC_EDIT1,IDC_EDIT2,IDC_EDIT3 ......)如果是这样可以格式化d.Format(L"IDC_EDIT%d",i);
int num = __ttoi(d);//CString 转int

如果不是连号你就老老实实的改吧
40_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-12-14 12:55:15 | 显示全部楼层
236a 发表于 2020-12-14 12:30
你项目的控件id是连号的吗????(IDC_EDIT1,IDC_EDIT2,IDC_EDIT3 ......)如果是这样可以格式化d.Format(L ...

老哥这句话是不是有问题,怎么报错了?
d.Format(L"IDC_EDIT%d",i);
40_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-12-14 12:57:24 | 显示全部楼层
咸鱼李 发表于 2020-12-14 12:55
老哥这句话是不是有问题,怎么报错了?
d.Format(L"IDC_EDIT%d",i);

这边的这个L表示什么意思呢?
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-12-14 13:03:24 | 显示全部楼层
咸鱼李 发表于 2020-12-14 12:57
这边的这个L表示什么意思呢?

和你的_T()一个意思
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-12-14 13:11:13 | 显示全部楼层
236a 发表于 2020-12-14 13:03
和你的_T()一个意思


如果报错 你的版本可能是ANSI版本  把L去掉  或者用TEXT()这个是通用版本的
40_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-12-14 13:19:31 | 显示全部楼层
老哥,按照你这么操作以后我发现程序打不开了,但是也没报错,界面窗口都出不来的那种。
我还是老老实实多敲几次好了,多谢老哥了
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-12-14 13:21:45 | 显示全部楼层
咸鱼李 发表于 2020-12-14 13:19
老哥,按照你这么操作以后我发现程序打不开了,但是也没报错,界面窗口都出不来的那种。
我还是老老实实多 ...

有那么严重吗  方便把代码贴出来吗  我看看怎么回事
87_avatar_middle
最佳答案
16 
在线会员 发表于 2020-12-14 13:28:18 | 显示全部楼层
按照以下思路,改改就行了

为所有子窗口设置字体

BOOL __stdcall SetChildFont(HWND hwnd, LPARAM lparam)
{
   CFont *pFont = (CFont*)lparam;
   CWnd *pWnd = CWnd::FromHandle(hwnd);
   pWnd->SetFont(pFont);
   return TRUE;
}

EnumChildWindows(m_hWnd, ::SetChildFont, &g_Font);
40_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-12-14 13:43:23 | 显示全部楼层
我看下扽等更能不能发

论坛抽风了,说我没有中文字不让上传··

论坛抽风了,说我没有中文字不让上传··
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-12-14 13:53:59 | 显示全部楼层    本楼为最佳答案   
bestAnswer
咸鱼李 发表于 2020-12-14 13:43
我看下扽等更能不能发


不好意思  哪个_ttoi()这个是错误的  我看错了IDC_EDIT是不能转成int 的


用下面这这个  我刚才试过了
CString Str;
        int num = 999;
        for (int i = 1; i < 18; i++)
        {
                num += 1;
                GetDlgItem(num)->EnableWindow(false);
        }
1.jpg
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-12-14 13:57:34 | 显示全部楼层
本帖最后由 236a 于 2020-12-14 13:59 编辑
236a 发表于 2020-12-14 13:53
不好意思  哪个_ttoi()这个是错误的  我看错了IDC_EDIT是不能转成int 的
Str.Foratm()这个没用忘记删了


1000是IDC_EDIT1的编辑框ID号 你的ID号自己看下 就OK了
2.jpg
40_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-12-14 14:00:14 | 显示全部楼层
多谢老哥!关于MFC中的控件问题
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-12-14 14:04:18 | 显示全部楼层

不用客气  是我看错了   不好意思
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-10-1 02:49

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表