我创建了一个ATL的Composite Controls类型控件, 在主程序里添加了这个控件,
在主程序里用MoveWindow()函数改变了控件的大小,
为什么用鼠标点击控件时,控件自动改变大小啊?

解决方案 »

  1.   

    鼠标点击控件时控件就回复到初始大小,就是Create时传入的Rect大小,
      

  2.   

    我知道窗口都保存着当前的窗口的位置和大小的信息,不知道ATL中是如何更新这些信息的上面的情况就是在调用MoveWindow时,控件保存的窗口位置和大小的信息没有同步更新,所以在点击时重给还是用的Create时的位置和大小操作步骤
    用ATL创建一个Compositive Control.编译创建一个对话框程序,在对话框中插入刚刚创建的控件,在重载对话框的OnSize()
    OnSize()中的代码如下:RECT rcClient;
    ::GetClientRect(GetSafeHwnd(), &rcClient);CWnd * pWnd = GetDlgItem(IDC_ATLSIMPLEIMPL);
    if(pWnd == NULL)
    {
       return;
    }::MoveWindow(pWnd->GetSafeHwnd(), 12, 12, rcClient.right - rcClient.left - 24, 
    rcClient.bottom - rcClient.top - 70, TRUE);
      

  3.   

    上面写错了,是 "所以在点击时重绘窗口还是用的Create时的位置和大小"
      

  4.   

    teli_eurydice(哭泣的仙人掌。)   
     没有碰到过,自己检查下相应事件
      
     
    可以试一下嘛,这样子对ATL的一些内部机制更清楚一些啊
      

  5.   

    我知道怎么解决了,看MFC的原代码就能找到出错的地方了