屏保程序中的“预览”窗体怎么一闪而过,求教?(100分)

  • 主题发起人 主题发起人 faiqi
  • 开始时间 开始时间
F

faiqi

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做个简单的屏保试试,可我现在碰到这个问题,就是“预览”窗体一闪而过。我是这样做的。(我是用BCB的,不过大侠帮我看看原理吧)
Project中如下:
   PreviewForm->showmodal();
在previewform中定义了如下消息处理函数:
 void __fastcall TPreviewForm::HandleMessage(TMessage &Msg)
{

switch(Msg.Msg)
{case WM_ACTIVATE: if(Msg.WParamLo==WA_INACTIVE)
Close();
break;
case WM_MOUSEMOVE: {int XDis=abs(Msg.LParamLo-OldMouseX);
int YDis=abs(Msg.LParamHi-OldMouseY);
if(XDis>10&&YDis>10)   //如果确实鼠标是移动了
Close();
}
break;
case WM_LBUTTONDOWN:Close();
break;
case WM_MBUTTONDOWN: Close();
break;
case WM_RBUTTONDOWN: Close();
break;
case WM_KEYDOWN: Close();
break;



}
}

但我发现预览时,这个窗体一闪而过,应该怎么处理,大侠帮个!
 
你怎么不管怎么样都Close啊,那叫它怎么出现
 
请教一下如何改,我觉得好像也是这个消息处理函数出问题了?能给几行代码吗?谢谢
 
是不是应该在DEFAULT里写入代码进行判断啊,比如过5秒后关闭窗口.
 
把WM_ACTIVATE里的close()和break去掉先试试
 
不是的,我试过了,不行!你们可以试一试,就用两个form好了,其中放个button,点击显示另一个窗体,然后如果鼠标或者键盘移动,则那个窗体消失!你们可以做一做!大家讨论一下呀!问题应该是在这个消息函数中。
 
我试了一下,原来是发了个WM_MOUSEMOVE信息,我把这个去掉后,一闪而过的问题解决了!
但是如何响应鼠标移动则成了个问题;
另外,屏保到了时间如何运行?居然启动不了!
 
我也写过,主要原因是,一开始显示窗体就会触发一次,就这一次MouseMove事件,
即使你的鼠标根本没有动,我的解决方法是设置一变量,在第一次时置真,
并判断如果为真才退出,这样在第二次真正移动鼠标时才会退出

屏保要改扩展名为.scr吧.
 
原来如此,第一个问题解决了!不过第二个问题你可能误解了我的意思,我现在是比如设定1分钟内没有鼠标或键盘响应时就启动屏保,可现在1分钟到了,根本不启动屏保!这个问题怎么解决?
 
多人接受答案了。
 
后退
顶部