小问题:怎样 控制 弹出的 提示对话框 在屏幕上的位置????高分急等!!!!默认是在 屏幕的正中间,我需要它在屏 幕  偏右的  一边

解决方案 »

  1.   

    如果是你自己呼叫的.用
    SetWindowPos MoveWindow
    不是的話.可用FindWindow..然後掉用上面倆個
      

  2.   

    楼主说的是MessageBox那个对话框吧???
    难道我又理解错了??
      

  3.   

    MessageBox()怎么指定位置,呵呵。。有意思
      

  4.   

    我看最好还是自己建立一个对话窗,在oncreat中设置位置.
      

  5.   

    我说的是:说的是MessageBox。如何实现呢????
      

  6.   

    用MessageBox()就不知道怎么实现了。
    但是我想你也可以自己建立一个提示对话框啊。这样就可以使用SetWindowPos和MoveWindow函数随意控制了。
      

  7.   

    MessageBox()没有人会去理会它显示的位置,也没有必要,因为它只是供出一此提示信息或简单的交互(Y/N/C).
    如果你是自定义的对话框,就可以用上述MoveWindow等来处理。
    如果你的对话框是一个基于对话框的应用程序,你想改变其初始位置,就可以重载消息:WM_WINDOWPOSCHANGING,然后再修改初始位置。
      

  8.   

    再说一次:
    与其要实现这个功能...你还不如自己创建一个普通对话框...
    当然...如果你是基于学习的目的来做这个程序的话..你可以这么做!给你一个思路...利用钩子把MessageBox的消息拦截下来并进行处理...
    具体可参考相关的资料...我建义是去jjhou.csdn.net上把Win95 程式设计指南-- Windows 95 A Developer's Guide下载下来...然后慢慢看...绝对是学习windows程序设计的好书..http://jjhou.csdn.net/free-win95adg.htm    
      

  9.   

    kingcom_xu(←对!它就是被封杀的kingcom!)   你脑子有问题啊??我说设置 MESSAGEBOX 的位置,当然是有原因的,我的软件中要用到。你他妈的以为你是谁???  有本事你解决这个问题。抱歉,你提供的方法成本太高了。
      

  10.   

    firmboy(志坚小子) 
    这就是你的不对了! 为什么无缘无故要骂人! 别个 kingcom_xu(←对!它就是被封杀的kingcom!) 是好心帮你, 你说话有点过火了哦!要是谁都和你一样, 谁还会在这里无偿帮助别人了呢!  对不? 呵呵!  希望大家还是和睦相处嘛! :)
      

  11.   

    当MessageBox对话框显示的时候,主窗口将失去焦点,知道了这一点,问题就很简单了。下面是我的C++Builder代码。//替换主窗口的窗口过程(我不知道VC怎样办到这一点,反正原理就是这样)void __fastcall TForm1::WndProc(Messages::TMessage &Message)
    {
      TForm::WndProc(Message);  //失去焦点之前
      if(Message.Msg == WM_NCACTIVATE)
      {
      }
      //失去焦点之后
      else if(Message.Msg == WM_ACTIVATE)
      {
        if(LOWORD(Message.WParam) == WA_INACTIVE)
        {
          HWND hWnd;
          char ClassBuf[64];      hWnd = (HWND)Message.LParam;
          GetClassName(hWnd,ClassBuf,sizeof(ClassBuf));      //首先判断是否是MessageBox对话框,
          if(AnsiString(ClassBuf) == "#32770")
          {
            //再判断这个窗口是否是本身程序的窗口(因为别的程序弹出窗口时,你的主窗口也同样失去焦点)
            DWORD dwProcessID;
            
            GetWindowThreadProcessId(hWnd,&dwProcessID);
            
            if(dwProcessID == GetCurrentProcessId())
            {
              //移动窗口的位置
              MoveWindow(.......);//或者调用 SetWindowPos(...)
              
              //替换左边的标题栏图标(如果有的话)
              SetClassLong(hWnd,GCL_HICON,(long)Image1->Picture->Icon->Handle);          //重新设置按钮的文本(比如把确定改为“OK 007”)
              HWND hTemp;          hTemp = GetDlgItem(hWnd,1);
              SetWindowText(hTemp,"New Text For Button");          //.........其他操作
            }
          }
        }
      }
    }
    //---------------------------------------------------------------------------============另:楼主的火气太大了。
      

  12.   

    BCB_FANS(四大名捕之追杀令)果真历害...我去试试看主窗口有没有响应这个消息...
      

  13.   


    Messagebox不是也有窗口句柄吗?
    用那个什么FromActiveWindow来得到MessageBox的HWND,然后SetWindowPos或者MoveWindow随便你了何必弄得那么复杂?
      

  14.   

    BCB_FANS(四大名捕之追杀令) 的想法真好,pfpf
      

  15.   

    to snsins:
    fromActiveWindow在哪里调用???不可能!
      

  16.   

    kingcom_xu(←对!它就是被封杀的kingcom!) ;
    在MessageBox之前先用一个定时器
      

  17.   

    回复人: snsins(但使龙城飞将在,不教胡马度阴山) ( ) 信誉:100  2002-11-19 16:13:00  得分:0 
     
     
      kingcom_xu(←对!它就是被封杀的kingcom!) ;
    在MessageBox之前先用一个定时器
      
     
    ========我第一次回答这个问题的时候,给出的代码就是使用定时器,后来继续研究,发现现在的方法更好一些。当然,个人爱好不同,使用哪一种方法都可以。
      

  18.   

    BCB_FANS(四大名捕之追杀令) ::)
      

  19.   

    WM_INITMENUPOPUP时菜单的窗口是不是已经产生?????