作者:EGO-Underwear | 来源:互联网 | 2023-09-01 05:20
我的需求自我感觉相当简单[如果能把程序所有控件位置不动,把主窗口下移]就实现了。但setwindowspos没这功能。我就得隐藏控件了,我一开始把控件设为GroupBox的子控件,设置完
我的需求自我感觉相当简单[如果能把程序所有控件位置不动,把主窗口下移]就实现了。
但setwindowspos没这功能。
我就得隐藏控件了,我一开始把控件设为Group Box的子控件,设置完以后updateata(false)就出错了。 我也不想一个一个控件的隐藏移动,那会累死人的。难道VC就真的这么软蛋,连个小界面也弄不好吗。 大家给点代码,例子,或思路都有分。
13 个解决方案
GROUPBOX是一个容器,其中可以放置其它控件,当设置这个GROUPBOX的ENABLED=FALSE时,其中的控件一起隐藏;
如何能实现上面所说的在BCB中可以实现的功能呢?
做一个父窗口,把要控制的控件作为子窗口,然后Enable/Disable父窗口。
CButton-derived control associated with a groupbox to enable/disable controls inside
http://www.codeproject.com/buttonctrl/groupcheck123.asp
是的,我是把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);
//设置分组
}
搞定了,
写了一个移动函数,把ID设为连续的,
传ID开始,ID结束,然后循环移动。
VCFans的类我不太会用,我对checkbox邦定变量时没有groupboxcheck这一项,但我看那个demo上有,我也不知道如何把类型绑定自已的类上。所以没有用,唉。
1. 可以用对话框中嵌入对话框来做,以后其他地方也可以很方便使用:
http://218.108.41.12/vchome/book/download/SuperWorld.rar
2. 还可以用属性页来做:
http://www.vckbase.com/document/viewdoc/?id=398
一个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);
后来的分就少了呵呵.
用属性页好像是个不错的主意.下回试试.
http://www.codeproject.com/buttonctrl/groupcontrol.asp
看看这个吧,这才知真正的解决之道。我找了一整天,国内的网站上实在是找不到像样的答案。