ActiveX控件的奇怪问题

Occam's_Razor 2009-12-13 06:57:38
问题如下:

新建一个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不在显示

为什么控件重绘,其内部动态创建的窗口不会重绘?有没好的解决方法,不去动控件本身,在刷新控件的同时,让控件及其子窗口也重新绘制?
...全文
127 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobob 2009-12-14
  • 打赏
  • 举报
回复
ReDraw一下试试
BlueBirdssh 2009-12-14
  • 打赏
  • 举报
回复
需要 调用重新绘画 和验证控件的函数。
Occam's_Razor 2009-12-13
  • 打赏
  • 举报
回复
回楼上的,没用,除非在控件里面 调用动态创建按钮的invalidate才行
  • 打赏
  • 举报
回复
直接调用子窗口的Invalidate

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧