📄 subject_38306.htm
字号:
<p>
序号:38306 发表者:陈剑 发表日期:2003-05-02 14:06:57
<br>主题:程序中断的问题!
<br>内容:我在一个动态的演示软件中想用Esc键来中断或暂停这个软件的画图过程。<BR>原来的c程序是这样写的<BR>if(kbhit()){<BR><BR> aa=getch();<BR> if(aa==ESCKEY)<BR> {<BR> i=121;<BR> m=2;<BR> break;<BR> }<BR>}作用是按一下Esc键就停止画图,但这个移到vc下后,这个键起不了作用了。请问各位前辈<BR>如果用mfc来写应该怎么写。<BR>还有如果想用一个键来控制整个画图过程,比如你按一下空格键,他就暂停画再按一下,又<BR>继续。请问该怎么做啊!<BR>说明一下,主要的控制函数就是上面这个(原来的c程序里,只有中断的没有暂停的)。<BR>请各位帮个忙。谢了!<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:huza 回复日期:2003-05-02 14:34:56
<br>内容:有点像是做游戏,你可以响应Onidle()<BR>然后在里边截获键盘操作就可以了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:moli 回复日期:2003-05-02 15:20:36
<br>内容:设计一个OnKeyDown函数,具体可查阅msdn,因为具体我也不是很清楚,在这个函数中可以处理任何的键盘消息。如下:<BR>void CyourclassView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) <BR>{<BR> switch(nChar)<BR> { <BR> case VK_SPACE :{按要求写出你自己的代码<BR> }<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:西北狼 回复日期:2003-05-02 16:57:48
<br>内容:好像不行的,如果你的画图工作量很大的话,是不是就不会响应中断了(必须使用多线程),向线程发送退出消息或者强行中断喔
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:moli 回复日期:2003-05-02 17:10:58
<br>内容:我做的是三维显示呀,我的程序在三维显示的时候各种情况都是靠键盘触发的呀,就是一按下space键三维景观就自动旋转呀。再一按下就停止,好像还挺好用的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:陈剑 回复日期:2003-05-02 17:21:04
<br>内容:请教楼上的,请问楼上的,怎么实现这样的键盘功能。就是以你上一个答复的OnKeyDown()函数来做吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syosinsya 回复日期:2003-05-02 17:38:35
<br>内容:如果你觉得现在用多线程干还有些困难的话,就用SetTimer()设定一个很短的时间间隔,在OnTimer()中画图并检查是否有Esc按下(画图速度当然是要降低了)。然后重载PreTranslateMessage(MSG* pMsg),在其中加入:<BR> if(pMsg->message == WM_KEYDOWN) {<BR> switch(pMsg->wParam) {<BR> case VK_ESCAPE: // Esc key<BR> 设置Esc按下的Falg以便OnTimer()中判断<BR> return TRUE;<BR> break;<BR> }<BR> }<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:moli 回复日期:2003-05-02 23:10:44
<br>内容:对呀,楼上的也说得很对,我的OnKeyDown里面也有SetTimer函数,格式是<BR>case VK_SPACE :{flag= !flag;//就是你的标志<BR> <BR> if(flag)<BR> SetTimer(1,40,0);<BR> else<BR> KillTimer(1);<BR> Invalidate(FALSE);<BR> break;}。<BR>然后在OnTimer中,有如下if(flag){//加入你想要实现的代码},不知道我有没有说清楚,也可能有点走弯路了,其实我也不怎么会的,楼上的老兄说的也挺对的。你可以在msdn里面查到关于SetTimer 函数。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -