游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2121|回复: 2

奇怪的MessageBox(郁闷中....)

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-1-26 20:31:00 | 显示全部楼层 |阅读模式
最近在学Ddraw,遇到一个奇怪的问题。
int WinMain(....)   (略了参数..)
{
InitDX();//在其中初始化了窗口和Ddraw
while(1)
{
    if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    {
      if(!GetMessage(&msg,NULL,0,0))
           return msg.wParam;
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
    else if(g_bActive)//g_bActive总是设为TRUE;
    {
       UpdateScreen();//在其中刷新屏幕
    }
    else
          WaitMessage();
}
return 1;
}
运行后,能正常显示画面;但在响应消息时,出现一些问题:如想要单击右键时显示一个消息框(用MessageBox函数),但却有时能显示出消息框,有时却不出现(好象幽灵窗口啊...)。
但响应其他消息时,如按任意键就退出窗口就一定成功!
郁闷好几天了!望高手救命啊!!!
[em22]  [em22] [em22]

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-1-26 20:43:00 | 显示全部楼层

Re: 奇怪的MessageBox(郁闷中....)

如果你初始化一个全屏程序,用MessageBox()是不行的。因为全屏窗口的STYLE有TOPMOST属性,是顶级窗口,其他的窗口是无法显示的。

如果你是窗口程序,可以尝试用裁剪器。在窗口模式下,如果没有附加裁剪器而又没有做特殊处理的话,你的程序即使不在前台也会向屏莫进行写操作,屏幕上会一直有你的图像,盖过其它的前台程序窗口。

由于MessageBox()产生的窗口,如果没有传递一个窗口句柄作为父窗口句柄的话,就生成非模式的对话框,而你的程序又仍然在刷新屏幕,所以就出现了你所说的情况。(关于MessageBox()产生非模式窗口是我的印象,没有去验证它。)

建议你先尝试传递句柄给MessageBox(),再使用裁剪器。

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2004-1-27 20:08:00 | 显示全部楼层

Re:奇怪的MessageBox(郁闷中....)

感谢!!!
我的程序是在全屏下的,而且我也将主窗口句柄传给MessageBox了,可是仍然不行。
还有,你说的裁剪器是指Ddraw中的剪切板对象吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 00:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表