描述:
问题如下:
新建一个ActiveX控件TryCtrl,控件内部动态创建一个MFC标准控件,例如 CButton,在创建并显示
int CTryCtrlCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
m_btn.Create(_T("00"),WS_CHILD|WS_VISIBLE,CRect(0,0,200,50),this,100);
return 0;
}
另外建立一个普通的对话框程序,
先导入控件 #import "progid:TRYCTRL.TryCtrlCtrl.1"
对话框里定义一个成员变量 CWnd m_wndChild;
在OnInitDialog()函数里面添加
m_wndChild.CreateControl(__uuidof(TryCtrlLib::TryCtrl),_T(""),WS_CHILD|WS_VISIBLE,CRect(0,0,300,100),this,300);
在对话框上添加一个按钮
按钮动作 刷新对话框
void CTryActiveXDlgDlg::OnBnClickedButton1()
{
Invalidate();
}
运行对话框。发现一切正常,控件及其内部动态创建的Button正确显示
当点击刷新对话框按钮时,发现控件里面的动态创建的button不在显示
为什么控件重绘,其内部动态创建的窗口不会重绘?有没好的解决方法,不去动控件本身,在刷新控件的同时,让控件及其子窗口也重新绘制?
解决方案1:
需要 调用重新绘画 和验证控件的函数。
解决方案2:ReDraw一下试试
解决方案3:直接调用子窗口的Invalidate