VS,MFC怎么能点击OK之后进行的一个循环直到点击另一个按钮后停下来

我是想实现点击确定之后执行一个循环截屏的工作,但是点击之后就是死机根本停不下来啊,只能开任务管理器关掉窗口。本人是菜菜,大神们麻烦说的细致一点好吗?感激涕零啊!下面贴代码... 我是想实现点击确定之后执行一个循环截屏的工作,但是点击之后就是死机根本停不下来啊,只能开任务管理器关掉窗口。本人是菜菜,大神们麻烦说的细致一点好吗?感激涕零啊!
下面贴代码:
void CPointoDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码

i=0;

CDialogEx::OnOK();
//CDialogEx::OnCancel();
CRect a;
a.right=GetSystemMetrics(SM_CXFULLSCREEN);
a.left=0;
a.top=0;
a.bottom=GetSystemMetrics(SM_CYFULLSCREEN);
CString timestr;
while (i!=-1)
{
if (i==60)
i=0;
i++;
Sleep(300);
timestr.Format(L"%d",i);
Take(a, timestr+L".bmp");//执行一次截屏,此程序已经编好没有问题。
};
}
就是怎么能让这个函数退出呀>< 我想点击另一个按钮的时候就退出这个不停循环截屏的过程,请问怎么做呀TAT
展开
 我来答
bhtzu
2014-03-28 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4153万
展开全部

循环里面没有等待输入,当然。。停不下来。可以通过OnIdle消息处理、定时器和线程等办法解决,根据你的程序,推荐使用定时器。

void CPointoDlg::OnBnClickedOk()//开始按钮
{
SetTimer(1,300);//300毫秒一次
}
void CPointoDlg::OnBnClickedStop()//停止按钮
{
KillTimer(1);//停止定时器
}
void CPointoDlg::OnTimer()//系统定时器消息响应函数,重载WM_TIMER获得
{
if (nIDEvent==1)
{
         CRect a;
    a.right=GetSystemMetrics(SM_CXFULLSCREEN);
    a.left=0;
    a.top=0;
    a.bottom=GetSystemMetrics(SM_CYFULLSCREEN);
    CString timestr;
    timestr.Format(L"%d",++i);//这里i需要是类成员变量
    if(i>=60) i=0
    Take(a, timestr+L".bmp");//执行一次截屏,此程序已经编好没有问题。
}
CDialogEx::OnTimer(nIDEvent);
}
更多追问追答
追问
是这样的。。。我这个循环。。。也就是提问的那个函数一旦开始了,机器就卡住了。。。根本没法点击cancel按钮了。。不是我没有在另一个按钮里写指令,是这个函数一旦进去就其他的函数统统报废了的感觉
追答
认真看我给你写的代码。
你没有理解windows消息机制,按照DOS下程序的循环来写,当然有问题。
提供你的三个方式都可以解决,代码是定时器方式。
崔之桃j4
2014-03-28 · TA获得超过129个赞
知道小有建树答主
回答量:440
采纳率:0%
帮助的人:204万
展开全部
在这个类里面添加一个成员变量。
比如:
BOOL L=FALSE;

在OK按钮里加

L=TRUE;
while ((i!=-1)&&L)
{
.
.
.

}

在停止按钮里加一句
L=FALSE;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yue_hun_shang
2014-03-28
知道答主
回答量:37
采纳率:0%
帮助的人:14.3万
展开全部
用线程或者定时器做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式