请教一个ActiveX控件开发关于窗口的OnSize的问题!谢谢!

shaolunyuan 2004-12-21 04:26:43
大家好,我现在要开发一个自己的控件,控件里面封装了ESRI公司开发的MapObjects2控件(这个是搞GIS系统开发用的,是一个成熟的产品控件),封装一些常用的方法,为了以后开发方便.但是遇到一个问题的,问题是这样的:
由于我自己的控件里面封装MapObjects2,所以,需要在我的控件大小发生变化的时候,让MaoObjects2控件充满我的控件,所以,我在我的控件的OnSize()里做了如下的工作:
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
CRect rect;
::GetClientRect(m_hWnd, &rect);
::SetWindowPos(::GetDlgItem(m_hWnd, IDC_MAP1), HWND_BOTTOM, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOZORDER | SWP_FRAMECHANGED);
return 0;
}
目的是每次Size大小发生变化,就让Map控件充满整个空间区域。但是,测试发现,填充的时候获取的矩形总是拖动窗口前的矩形,也就是说,填充的结果总是Size变化前的范围,而不是变化后的范围。我不知道原因出在哪里,想了好几个方法也解决不了。希望大家帮忙。谢谢。

另外,为了测试我的方法是否可行,我添加了一个 Edit 控件,然后,做了同样的工作,(完全相同的代码,一模一样,没有任何的区别)。发现 Edit 填充的范围就是Size变化后的范围,能够满足我一开始想要的效果:每次Size变化后,Edit就可以完全充满我的控件。

问题就是这样,不知道我说清楚了没有,请各位朋友帮忙。再次感谢!
...全文
221 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ColderRain 2004-12-24
  • 打赏
  • 举报
回复
LRESULT CSimpleGrid::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if (!IsWindow())
return 0;

long nWidth = LOWORD(lParam);
long nHeight = HIWORD(lParam);

m_wndGrid.SetWindowPos( HWND_TOP,
0,
0,
nWidth,
nHeight,
SWP_NOACTIVATE |
SWP_SHOWWINDOW );
return 0;
}
foremans 2004-12-23
  • 打赏
  • 举报
回复
从LParam中取得窗口大小,具体参见MSDN,处理的时候判断一下参数中的大小是否与
当前大小一样大, 一般WM_SIZE最后一次传送的lParam就是当前窗口大小
hehaheha 2004-12-23
  • 打赏
  • 举报
回复
如果是MFC的Activex可以在控件的OnDraw方法中加入
void CMyCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
// TODO: Replace the following code with your own drawing code.

MapObjects->MoveWindow(rcBounds, TRUE);//假设MapObjects为控件的Control变量
}
因为窗口的任何改动都会触发OnDraw()方法。
不知道可行不?
shaolunyuan 2004-12-22
  • 打赏
  • 举报
回复
up
sinall 2004-12-21
  • 打赏
  • 举报
回复
哦~,
这么说,在OnSize函数内GetClientRect必然得到变化前的Size了。
那么,能不能自定义一个消息,WM_MYSIZE,然后在OnSize里发送这个消息,
在OnSize完成后,想必这个WM_MYSIZE就触发了,
那么在OnMySize里GetClientRect可能得到变化后的Size了。

只是设想,^_^
shaolunyuan 2004-12-21
  • 打赏
  • 举报
回复
补充一下: IDC_MAP1 是MapObjects的控件ID!

3,245

社区成员

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

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