今天写了这样的一些代码:
//使控件的大小跟随窗口的大小而变化 ////////////////////////////////////////////////////// void CPlannerDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); m_Calendar.MoveWindow(100,100,200,200,0); }
但是每次运行都有ASSERT()错误。
本以为是变量与控件的关系没有关联好,就测试了一下,发现并没有问题。
于是在OnInitDialog()于OnSize() 中分别插入了断点,发现程序首先运行到OnSize() ,才到OnInitDialog()。并且在程序运行到OnSize()的时候,m_Calendar还没有被初始化,其hWnd = 0.
于是对程序做了一下这样的改动:
//使控件的大小跟随窗口的大小而变化 ////////////////////////////////////////////////////// void CPlannerDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); static int i = 0; if(i++) { m_Calendar.MoveWindow(100,100,200,200,0); //m_Calendar是在OnInitDialog()中被初始化的。而程序先调用了OnSize(). } }
就好了。