热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用多GroupBox,里面大大小小包括了40多个控件,我想能一次只显示一个GroupBox。

我的需求自我感觉相当简单[如果能把程序所有控件位置不动,把主窗口下移]就实现了。但setwindowspos没这功能。我就得隐藏控件了,我一开始把控件设为GroupBox的子控件,设置完
我的需求自我感觉相当简单[如果能把程序所有控件位置不动,把主窗口下移]就实现了。
但setwindowspos没这功能。

我就得隐藏控件了,我一开始把控件设为Group Box的子控件,设置完以后updateata(false)就出错了。 我也不想一个一个控件的隐藏移动,那会累死人的。难道VC就真的这么软蛋,连个小界面也弄不好吗。 大家给点代码,例子,或思路都有分。


13 个解决方案

#1


GROUPBOX是一个容器,其中可以放置其它控件,当设置这个GROUPBOX的ENABLED=FALSE时,其中的控件一起隐藏;

如何能实现上面所说的在BCB中可以实现的功能呢?

#2


关注

#3


做一个父窗口,把要控制的控件作为子窗口,然后Enable/Disable父窗口。

#4


CButton-derived control associated with a groupbox to enable/disable controls inside

http://www.codeproject.com/buttonctrl/groupcheck123.asp

#5


是的,我是把GROUPBOX做为父窗口,但是出现了问题。
问题如下:
         1.所有控件显示不正常,只有Group1---Group5中的控件,只有Group1中的能正常显示,我是确认我每个父窗口都设的不错,Group2-5只显示GroupBox一个控件,他的孩子都不显示

void CMyDlg::SetGroupBoxParent()
{

pFrameGroup1=(CWnd*)GetDlgItem(IDC_FRAME1);
(CWnd*)GetDlgItem(IDC_STATIC1_1)->SetParent(pFrameGroup1);
(CWnd*)GetDlgItem(IDC_STATIC1_2)->SetParent(pFrameGroup1);
(CWnd*)GetDlgItem(IDC_STATIC1_3)->SetParent(pFrameGroup1);
(CWnd*)GetDlgItem(IDC_LOGIN_USERNAME)->SetParent(pFrameGroup1);
(CWnd*)GetDlgItem(IDC_LOGIN_PASSWORD)->SetParent(pFrameGroup1);
(CWnd*)GetDlgItem(IDC_SERVER_IP)->SetParent(pFrameGroup1);
(CWnd*)GetDlgItem(IDOK)->SetParent(pFrameGroup1);
(CWnd*)GetDlgItem(IDCANCEL)->SetParent(pFrameGroup1);

pFrameGroup2=(CWnd*)GetDlgItem(IDC_FRAME2);
(CWnd*)GetDlgItem(IDC_LISTBOX_TASKLIST)->SetParent(pFrameGroup2);
(CWnd*)GetDlgItem(IDC_TASKLIST_DEL)->SetParent(pFrameGroup2);


pFrameGroup3=(CWnd*)GetDlgItem(IDC_FRAME3);
(CWnd*)GetDlgItem(IDC_STATIC3_1)->SetParent(pFrameGroup3);
(CWnd*)GetDlgItem(IDC_STATIC3_2)->SetParent(pFrameGroup3);
(CWnd*)GetDlgItem(IDC_STATIC3_3)->SetParent(pFrameGroup3);
(CWnd*)GetDlgItem(IDC_LISTBOX_ADDTASK)->SetParent(pFrameGroup3);
(CWnd*)GetDlgItem(IDC_EDIT_ADDTASK_STARTDATE)->SetParent(pFrameGroup3);
(CWnd*)GetDlgItem(IDC_BUT_ADDTASK)->SetParent(pFrameGroup3);
(CWnd*)GetDlgItem(IDC_EDIT_ADDTASK_ENDDATE)->SetParent(pFrameGroup3);


pFrameGroup4=(CWnd*)GetDlgItem(IDC_FRAME4);
(CWnd*)GetDlgItem(IDC_STATIC4_1)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_STATIC4_2)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_STATIC4_3)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_STATIC4_4)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_STATIC4_5)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_STATIC4_6)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_STATIC4_7)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_LISTBOX_GWLIST)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_EDIT_GW_SPNUMBER)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_EDIT_GW_SEND)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_EDIT_GW_RECV)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_EDIT_GW_OTHERSPNUMBER)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_EDIT_GW_OTHERSEND)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_EDIT_GW_OTHERSPRECV)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_BUT_GW_ADD)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_BUT_GW_UPDATE)->SetParent(pFrameGroup4);
(CWnd*)GetDlgItem(IDC_BUT_GW_DEL)->SetParent(pFrameGroup4);

pFrameGroup5=(CWnd*)GetDlgItem(IDC_FRAME5);
(CWnd*)GetDlgItem(IDC_EDIT_SETTING_SPACE)->SetParent(pFrameGroup5);
(CWnd*)GetDlgItem(IDC_EDIT_SETTING_OUTTIME)->SetParent(pFrameGroup5);
(CWnd*)GetDlgItem(IDC_EDIT_SETTING_EXCEPTION)->SetParent(pFrameGroup5);
(CWnd*)GetDlgItem(IDC_SETTING_UPDATE)->SetParent(pFrameGroup5);
(CWnd*)GetDlgItem(IDC_STATIC5_1)->SetParent(pFrameGroup5);
(CWnd*)GetDlgItem(IDC_STATIC5_2)->SetParent(pFrameGroup5);
(CWnd*)GetDlgItem(IDC_STATIC5_3)->SetParent(pFrameGroup5);

pFrameGroup6=(CWnd*)GetDlgItem(IDC_FRAME6);
(CWnd*)GetDlgItem(IDC_LISTBOX_RECVMOBILE)->SetParent(pFrameGroup6);
(CWnd*)GetDlgItem(IDC_ADD_RECVTEL)->SetParent(pFrameGroup6);
(CWnd*)GetDlgItem(IDC_DEL_RECVTEL)->SetParent(pFrameGroup6);
(CWnd*)GetDlgItem(IDC_ADD_UPDATETEL)->SetParent(pFrameGroup6);

//设置分组
}


#6


我采用vcfans的类试一下。

#7


帮楼主顶!

#8


搞定了,
写了一个移动函数,把ID设为连续的,
传ID开始,ID结束,然后循环移动。
VCFans的类我不太会用,我对checkbox邦定变量时没有groupboxcheck这一项,但我看那个demo上有,我也不知道如何把类型绑定自已的类上。所以没有用,唉。

#9


1. 可以用对话框中嵌入对话框来做,以后其他地方也可以很方便使用:
http://218.108.41.12/vchome/book/download/SuperWorld.rar

2. 还可以用属性页来做:
http://www.vckbase.com/document/viewdoc/?id=398

#10


一个For循环做!前提是你的Group的控件的ID是相连的
直接:
int Group1First;// = IDC_BITTON_1;Group1中的第一个控件 
int Group1Last;// = IDC_BITTON_N; Group1中的最后一个控件
//你可以直接修改resource.h中的控件ID值,使这些ID相连
for(Group1First = IDC_BITTON_1;Group1First <= Group1Last;Group1Fisrt++)
GetDlgItem(Group1First)->ShowWindow(SW_HIDE);

#11


用属性页

#12


后来的分就少了呵呵.
用属性页好像是个不错的主意.下回试试.

#13


http://www.codeproject.com/buttonctrl/groupcontrol.asp

看看这个吧,这才知真正的解决之道。我找了一整天,国内的网站上实在是找不到像样的答案。

推荐阅读
author-avatar
EGO-Underwear
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有