关于如何动态调整ActiveX控件的大小问题,内有详细问题描述

yvettesharp 2012-02-14 03:35:30
我创建了一个MFC ActiveX控件Player,并为它添加了一个属性CtrWidth,代表控件的宽度,并在该属性发生变化的函数内写下如下改变大小的代码
void CTestPlayCtrl::OnCtrWidthChanged(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 在此添加属性处理程序代码

SetControlSize(m_CtrWidth, 288);

CRect rect;
GetClientRect(&rect);
InvalidateControl(&rect, true);

SetModifiedFlag();
}
然后编译运行,在tstcon32.exe测试容器中,插入控件后,控件运行正常
当我点击“控件菜单”,找到“调用方法”,在弹出的对话框中找到CtrWidth属性的输入方法,设置300,然后点击调用按钮后,控件大小改变,但是里面绘制的椭圆只有控件刚开始运行的那一部分区域绘制,其他的区域全部被阴影斜线所遮挡

不知道该怎么实现才能在设置好值之后,控件改变大小后,椭圆正常显示
...全文
168 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yvettesharp 2012-02-15
  • 打赏
  • 举报
回复
我尝试着给主线程发送消息的方式来
void CtestPlay2008Ctrl::OnlPlayWidthChanged(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 在此添加属性处理程序代码

SetControlSize(m_lPlayWidth, 288);

::PostMessage(m_hWnd, WM_SIZE_CHANGE, NULL, NULL);

SetModifiedFlag();
}

LRESULT CtestPlay2008Ctrl::OnSizeChange(WPARAM wParam, LPARAM lParam)
{
CRect rect;
GetClientRect(&rect);
InvalidateControl(&rect, true);

return 0;
}
结果还是和一开始一样
yvettesharp 2012-02-14
  • 打赏
  • 举报
回复
OnDraw函数代码没有动,如果是手动拖动控件,可以正常显示,代码如下:
void CTestPlayCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;

// TODO: 用您自己的绘图代码替换下面的代码。
pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
pdc->Ellipse(rcBounds);
}
fishion 2012-02-14
  • 打赏
  • 举报
回复
你的OnDraw里的绘图都正确了吗

3,245

社区成员

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

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