如何处理可变大小的对话框?关于WM_SIZE、GetWindowRect、MoveWindow的问题。
对话框内有一些控件,希望在改变对话框大小时改变控件的大小和位置。
我的做法是处理WM_SIZE消息,但是第一次处理时控件句柄无效,看来第一次得到这个消息时控件尚未生成,是不是这样?
使用GetWindowRect和MoveWindow时控件的发生非预期的行为,控件没有移动到预期的地点。这两个函数都可以使用单个RECT指针做参数,但是MoveWindow的重载函数对分离的四个位置参数的解释是不一样的。
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;
BOOL MoveWindow(
HWND hWnd, // handle to window
int X, // horizontal position
int Y, // vertical position
int nWidth, // width
int nHeight, // height
BOOL bRepaint // repaint flag
);
对于OnSize中的如下代码,我不能理解为什么控件会向右下方移动:
void CMyClass::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
RECT rect;
if(IsWindow(m_MyControl.m_hWnd))
{
m_MyControl.GetWindowRect(&rect);
m_MyControl.MoveWindow(&rect);
}
}
另外对于On_Size的参数cx、cy我也不太明白。
最好能给出个完整例子,包括初始化和移动代码。