用MFC做Activex控件,如何实现里头的Picture Control跟随控件的大小而改变?

cnwolfs 2014-03-24 10:14:34
Activex控件中,有一个Dialog,里头有个Picture Control控件。想让控件大小改变的时候,这个Picture Control跟随着按比例改变大小。

遇到的问题好像有两个:
1、这个Dialog的Size事件不会触发。
2、GetClientRect(&m_Rect);获取到的Width等不是控件改变后的尺寸。


IDC_Picture1 (Picture Control)


麻烦给点例子,或者给个相关链接。
...全文
152 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnwolfs 2014-03-24
  • 打赏
  • 举报
回复
解决问题了,前提我这是Activex编程,在我理解中,Activex中的窗体是加载在控件母板中的,权且说成母板,拉大拉小控件,变化的是母板,加载的窗体并不变化,因此必须在后面有Ctrl的Class中做文章,在这个Class中增加一个WM_SIZE事件,然后使用MoveWindow就可以了。其中,m_MainDialog是所加载窗体的变量。 然后在m_MainDialog对应的那个Class中增加WM_SIZE,控件拉大拉小之后,这个事件就能跟着改变了。 int CVivotekCamCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 m_MainDialog.Create(IDD_MAINDIALOG, this); return 0; } void CVivotekCamCtrl::OnSize(UINT nType, int cx, int cy) { COleControl::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 m_MainDialog.MoveWindow(0, 0, cx, cy); return; }
worldy 2014-03-24
  • 打赏
  • 举报
回复
遇到的问题好像有两个: 1、这个Dialog的Size事件不会触发。 怎么可能?窗口尺寸改变后,肯定会触发该事件 2、GetClientRect(&m_Rect);获取到的Width等不是控件改变后的尺寸。 获取的width,height是对对应窗口窗口的宽和高,具体属于谁的尺寸,得看你指定的是哪个窗口 / void CClientDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 if(IsWindow(TxBtnStop)) { CRect rClient; CRect rRect; GetClientRect(&rClient); ............................ TxSend.GetWindowRect(&rRect); rRect.MoveToXY(rClient.Width()-m_btnSendMargin.x,rClient.Height()-m_btnSendMargin.y); TxSend.MoveWindow(&rRect,TRUE); .............................. } }

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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