给你段代码
switch(message)
{
case WM_SYSCOMMAND:
{
if(wParam==SC_MAXIMIZE)
return 0;
if(wParam==SC_CLOSE)
return 0;
  if(wParam==SC_MINIMIZE)
  return 0;
  if(wParam==SC_MOVE)
  return 0;
      break;
  }
}
OnOk()也可以关闭对话框
SendMessage(WM_QUIT);
也可以
OnCancle()
你的第二个问题有点奇怪!
我也曾遇见过不过那是在托盘里面点击菜单才出现的,后来我为菜单设置了OnUpdateXXX才好的
我不知道你的情况是否和我的一样

解决方案 »

  1.   

    1: EndDialog(IDOK)可以关闭模式对话框,不论是OnOK或OnCancel都是调用EndDialog()。我想OnClose也是调用EndDialog来处理吧。
    2:引起这个问题的原因实在很多,很难具体说。
      

  2.   

    void MainPage::OnClose() 
    {
    // TODO: Add your message handler code here and/or call default
    CDialog::OnClose();
    }
    在上面那段代码中,起作用的应该是CDialog::OnClose()吧?是不是将EndDialog()自动完成了?如果要使用EndDialog(IDCLOSE)应写哪里?OnClose里面吗?
    另外to:luoshayu(网络鲨鱼) 
    switch(message)中的message如何还有在哪儿定义?是否要写一个专门的多消息处理函数。如果要给对话框传递关闭消息怎么得到对话框句柄?
    我这里另外一个对话框是从CPropertyPage继承的,上面有一个CMSHFlexGrid控件,我点击右上角的“X”对话框不关闭,怎么办呢?
      

  3.   

    对于模式对话框,点击“X”(右上角)与点击Cancel按钮等效,不信就把映射OnCancel函数,然后在函数中什么也不做,则“X”(右上角)失效。如果调用了基类的OnCancel函数,则基类调用EndDialog函数。
      

  4.   

    如果“X”和Cancel一样,那么也就意味着关闭对话框时不保存所做的修改了?
    还是重复上一个问题,为什么加了FlexGrid控件对话框的“X”和OnCancel都不起作用了?
      

  5.   

    不管是OnOK还是OnCancel它都会调用到OnClose()。所不同的事,如果直接用OnClose()的话,那么模式对话框的数据就没法通过DoDataExchange()来交换数据了!
      

  6.   

    我倒是见有个人在OnClose()里面加入CDialog::OnCancel