============= 请教CFormView的问题 ===========

popyyb 2004-01-11 10:35:21
请问各位在基于CFormView的MDI中,什么时候才是CFormView创建完成,因为我想在FormView上动态创建控件,因此必然要知道很是创建好(其句柄不为NULL),这样我才能在上面Create我的控件,谢谢
...全文
48 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
platinum15 2004-01-16
  • 打赏
  • 举报
回复
不会也来up
popyyb 2004-01-16
  • 打赏
  • 举报
回复
up
DotLSong 2004-01-16
  • 打赏
  • 举报
回复
写在 CFormView::OnCreate 中
或者在 CFormView::OnInitialUpdate 的最开始的时候
hahu 2004-01-11
  • 打赏
  • 举报
回复
WM_CREATE消息
hahu 2004-01-11
  • 打赏
  • 举报
回复

int CMyFormView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
ASSERT(m_hWnd!=NULL);
m_edit.Create(NULL,CRect(10,10,200,30),this,IDC_EDIT3);
m_edit.ShowWindow(SW_SHOW);
return 0;
}
popyyb 2004-01-11
  • 打赏
  • 举报
回复
奇怪,高人哪里去了?还是没有人会?
popyyb 2004-01-11
  • 打赏
  • 举报
回复
因为View也是我通过读文件中的大小动态建立的,谢谢
popyyb 2004-01-11
  • 打赏
  • 举报
回复
那我的写法到底错在哪里呢?
ficher 2004-01-11
  • 打赏
  • 举报
回复
对不起错了,
上面代码最后一句
btn.pView=(CView*)this;
ficher 2004-01-11
  • 打赏
  • 举报
回复
在CMyButton 里加一个CView *pView 成员变量,在create
之后btn.pView=(CView*)GetParent();不就行了吗

btnMove.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(100,100,300,150), this,1);
btn.pView=(CView*)GetParent();


popyyb 2004-01-11
  • 打赏
  • 举报
回复
这样的话,楼上大侠的意思就是每次用到时候都要CView *pView=(CView*)GetParent();
而无法一次获得了?
hahu 2004-01-11
  • 打赏
  • 举报
回复

当鼠标在按钮上面移动的时候 TRACE出来的是CMyFormView
如果希望捕获整个View中的移动最好在CMyFormView中实现OnMouseMove
hahu 2004-01-11
  • 打赏
  • 举报
回复
为什么要用
pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();

pView = (CResEditorView *) pChild->GetActiveView();
来获得View的指针呢
我是这样实现的

//OnCreate在OnInitUpdate前面实现,可以通过TRACE看出来
int CMyFormView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
TRACE("OnCreate(LPCREATESTRUCT lpCreateStruct) \n");
m_btnMove.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(100,100,300,150), this, 1);
m_btnMove.ShowWindow(SW_SHOW);
return 0;
}

void CMyButton::OnMouseMove(UINT nFlags, CPoint point)
{
CView *pView=(CView*)GetParent();
TRACE("%s\n",pView->GetRuntimeClass()->m_lpszClassName);
CButton::OnMouseMove(nFlags, point);
}
可以通过GetParent来获取你要的View的指针
popyyb 2004-01-11
  • 打赏
  • 举报
回复
楼上的,感谢回复,我明白你的意思,但是CMyButton是我自己的类,在里面要用到view指针,因为我生成Button后希望能够立即点中,我现在就是可以show出来,但是点中不可以,因为在CMyButton类的LButton函数中用到了pview指针,也就是说在创建这个Button时候由于OnInitialUpdate函数还没有执行完毕,因此formView的handle并不能正确传到我的Button类中,因为执行顺序是先执行MyButton类的构造,然后再结束FormView的initailUpdate()

,谢谢, 继续求解

15,976

社区成员

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

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