MFC控件显示和隐藏的问题
我想动态的使一串按钮从左到右的显示,达到流水的效果for(inti=14;i>1;i--){GetDlgItem(array[i])->ShowWindow(true);...
我想动态的使一串按钮从左到右的显示,达到流水的效果
for(int i=14;i>1;i--){
GetDlgItem(array[i])->ShowWindow(true);
MessageBox("fdsafds");
GetDlgItem(array[i])->ShowWindow(false);
}
其中 array是我的ID的数组,上面这个能实现
下面这种代码却不能实现
for(int i=14;i>1;i--){
GetDlgItem(array[i])->ShowWindow(true);
Sleep(1000);
GetDlgItem(array[i])->ShowWindow(false);
}
这种达不到效果,请教高人,这之中的区别是什么啊 ?
重心不在Sleep函数上。
采纳后再加50. 展开
for(int i=14;i>1;i--){
GetDlgItem(array[i])->ShowWindow(true);
MessageBox("fdsafds");
GetDlgItem(array[i])->ShowWindow(false);
}
其中 array是我的ID的数组,上面这个能实现
下面这种代码却不能实现
for(int i=14;i>1;i--){
GetDlgItem(array[i])->ShowWindow(true);
Sleep(1000);
GetDlgItem(array[i])->ShowWindow(false);
}
这种达不到效果,请教高人,这之中的区别是什么啊 ?
重心不在Sleep函数上。
采纳后再加50. 展开
4个回答
2011-04-15
展开全部
,TypeA分栏显示,TypeB分栏被隐藏; 之后,根据点选的按钮来隐藏和显示各自的分栏。
首先每一个控件都必须有特定的ID号,所有控件都是,包括静态文本控件,所有ID号都不能一样
在对话框类的OnInitDialog函数中添加如下代码:
CButton* pButton=(CButton*)GetDlgItem(IDC_RADIO1); //假设按钮TypeA的ID为IDC_RADIO1
pButton->SetCheck(1);
以上两句是得到单选按钮TypeA的句柄,然后用SetCheck函数设定它的状态为选定
另外,隐藏静态文本控件和GroupBox控件的代码是:
CStatic* pStatic=(CStatic*)GetDlgItem(IDC_ID);//IDC_ID为要隐藏的控件的ID号
pStatic->ShowWindow(false);
隐藏编辑框控件的代码是:
CEdit* pStatic=(CEdit*)GetDlgItem(IDC_ID);//IDC_ID为要隐藏的控件的ID号
pEdit->ShowWindow(false);
从上面这些应该能看出规律吧,其实都是先得到控件的句柄,然后用相应的函数操作它。仿照这些就能完成你的要求。
要使单选按钮处于未选定状态,只需要将SetCheck函数的参数设为0即可。
要显示某控件,只需要将ShowWindow函数的参数设为true即可。
你的另一个要求:选择TypeA单选按钮时,显示A分栏,隐藏B分栏
大概实现如下:
先为TypeA单选按钮添加BN_CLICKED消息响应函数,在VC6.0的添加类向导中的选择对话框类,然后在左边的列表中点击TypeA按钮的ID号,右边会列出它的所有消息函数,选择BN_CLICKED,然后点击添加函数按钮即可
在添加好的消息函数中,也是用上面提到的代码来实现隐藏和显示控件
对于TypeB按钮也用同样的方法
详细的步骤很麻烦,就不写了。主要的东西都说了,具体怎么安排,就看你自己去布置了,只有自己摸索了,才能记得住,以后想用时才能随手拈来
另外,团IDC网上有许多产品团购,便宜有口碑
首先每一个控件都必须有特定的ID号,所有控件都是,包括静态文本控件,所有ID号都不能一样
在对话框类的OnInitDialog函数中添加如下代码:
CButton* pButton=(CButton*)GetDlgItem(IDC_RADIO1); //假设按钮TypeA的ID为IDC_RADIO1
pButton->SetCheck(1);
以上两句是得到单选按钮TypeA的句柄,然后用SetCheck函数设定它的状态为选定
另外,隐藏静态文本控件和GroupBox控件的代码是:
CStatic* pStatic=(CStatic*)GetDlgItem(IDC_ID);//IDC_ID为要隐藏的控件的ID号
pStatic->ShowWindow(false);
隐藏编辑框控件的代码是:
CEdit* pStatic=(CEdit*)GetDlgItem(IDC_ID);//IDC_ID为要隐藏的控件的ID号
pEdit->ShowWindow(false);
从上面这些应该能看出规律吧,其实都是先得到控件的句柄,然后用相应的函数操作它。仿照这些就能完成你的要求。
要使单选按钮处于未选定状态,只需要将SetCheck函数的参数设为0即可。
要显示某控件,只需要将ShowWindow函数的参数设为true即可。
你的另一个要求:选择TypeA单选按钮时,显示A分栏,隐藏B分栏
大概实现如下:
先为TypeA单选按钮添加BN_CLICKED消息响应函数,在VC6.0的添加类向导中的选择对话框类,然后在左边的列表中点击TypeA按钮的ID号,右边会列出它的所有消息函数,选择BN_CLICKED,然后点击添加函数按钮即可
在添加好的消息函数中,也是用上面提到的代码来实现隐藏和显示控件
对于TypeB按钮也用同样的方法
详细的步骤很麻烦,就不写了。主要的东西都说了,具体怎么安排,就看你自己去布置了,只有自己摸索了,才能记得住,以后想用时才能随手拈来
另外,团IDC网上有许多产品团购,便宜有口碑
展开全部
这个问题是这样子的,当你调用GetDlgItem(array[i])->ShowWindow(true);它会调用onpaint函数去进行一次窗口重绘,但是,它并非立即进行重绘,它有可能先处理这个循环体,处理完了,再进行重绘,这样的话,给你的感觉是,控件并没有什么变化……
解决办法:调用UpdateWindow();函数,可以立即重绘窗口。。。。也就是把你的程序改成
for(int i=14;i>1;i--){
GetDlgItem(array[i])->ShowWindow(true);
UpdateWindow();
Sleep(1000);
GetDlgItem(array[i])->ShowWindow(false);
UpdateWindow();
}
这样就OK了,你自己去试一下吧,不懂的继续追问~~
解决办法:调用UpdateWindow();函数,可以立即重绘窗口。。。。也就是把你的程序改成
for(int i=14;i>1;i--){
GetDlgItem(array[i])->ShowWindow(true);
UpdateWindow();
Sleep(1000);
GetDlgItem(array[i])->ShowWindow(false);
UpdateWindow();
}
这样就OK了,你自己去试一下吧,不懂的继续追问~~
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将这些操作放在单独的一个线程里就可以得到你想要的效果了
如果把循环放在主线程里做的话,会阻塞主线程的消息队列,界面不会及时更新,所以没有效果
创建线程可以使用AfxBeginThread,CreateThread,_beginthread。。。方法很多~
如果把循环放在主线程里做的话,会阻塞主线程的消息队列,界面不会及时更新,所以没有效果
创建线程可以使用AfxBeginThread,CreateThread,_beginthread。。。方法很多~
更多追问追答
追问
这个具体是什么意思呢?
追答
起一个线程CreateThread(....,ThreadProc);
线程的callback函数里做你写的那些代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
添加定时器消息(WM_TIMER),在OnTimer中处理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询