大家好,现在做个一个程序,在对话框初始化时在InitDialog函数在对话框指定位置动态创建几个CStatic控件,现在问题出来了,
在 InitDialog内使用 PostMessage(WM_SYSCOMMAND,SC_MAXIMIZE)使其最大化后,然后创建CStatic控件,但没有创建成功;
原因是获取要创建的位置为负值,例:top -858993050 left -858993430 right -858994260 bottom -85898986,很明显是在对话框正在最大化时创建控件报错.现在需要在检测最大化操作完毕后,在指定位置动态创建CStatic控件.
如何检测对话框最大化事件操作完毕?
请教高手,谢谢。

解决方案 »

  1.   

    LRESULT   CMainFrame::WindowProc(UINT   message,   WPARAM   wParam,   LPARAM   lParam)     
      {   
      //   TODO:   Add   your   specialized   code   here   and/or   call   the   base   class   
      switch(message)   
      {   
      case   WM_SYSCOMMAND:           //如果是系统消息   
      if(wParam==SC_MAXIZE){          //最大化消息   
      //写自己的代码   
                                          return   0;   
      }   
      break;   
      default:   
      break;   
      }   
      return   CFrameWnd::WindowProc(message,   wParam,   lParam);   
      }   你自己spy++一下就会知道更多
      

  2.   

    多谢高手解答,我已试过,很遗憾,还是不行,创建的CStatic控件位置还是为负值
      

  3.   

    IsZoomed() determines whether a window is maximized. 
      

  4.   

    PostMessage(WM_SYSCOMMAND,SC_MAXIMIZE)会立即返回
    ====》》》
    SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE)试试这个
      

  5.   

    谢谢楼上热心解答.试过了,还是不行,我采用在OnTimer里判断.
      

  6.   

    为什么发消息呢
    用ShowWindow(SW_MAXIMIZE);不行么?
    另外为什么要在最大化之后创建而不是之前?
      

  7.   

    可以这前创建时不显示,最大化时再显示啊,在OnSize里MoveWindow一下不是更好
      

  8.   

    先指定Cstatic控件的大小,然后在OnResize中调整大小。
      

  9.   

    检测到了,原来InitDialog后,GetClientRect(m_rect),m_rect检测窗体大小 全部为0
      

  10.   

    实现把十张矩形大小一样的图片贴到对应cstatic控件上,而这cstatic控件要在初始化对话框后在指定位置动态创建.
      

  11.   


    你这个需求在OnInitDialog里实现没有任何问题啊
    我经常在里面动态创建控件
    不过我是最后ShowWindow(SW_MAXIMIZE);
    另外GetClientRect(m_rect)rect是0
    这不可能
    你在哪个函数里调用的GetClientRect(m_rect)