对话框中创建视图以后,怎样获取视图指针?

UPCCPU 2004-04-07 12:45:22
我在对话框中创建了一个视图,已经有了包含视图的框架指针pFrmWnd;
调用pFrmWnd->GetActiveView();却得不到视图的指针
原因是视图没有被激活,用鼠标点击视图以后就可以获得视图指针了
但我需要通过一个按钮来在视图中绘图,不需要每次绘图前点击视图
我视图让框架获得焦点pFrmWnd->GetFocus();结果也是不行。
请问该怎样获得视图指针呢?
下面是一个测试例子的源代码,在我的yahoo信箱中
用户名:upccpu
密码:820605
运行后先点击视图,再点按钮就可以绘制一系列的小矩形
如果不先点击视图,而是先点按钮则会提示为视图的指针为NULL
有什么办法可以直接点击按钮就可以绘图呢?
...全文
27 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
UPCCPU 2004-04-09
joise(卓一思_我爱VC&.Net) :谢谢了,这样解决了
在点绘图按钮时,绘制非常慢
去掉
m_pdlgFrmWnd->SetForegroundWindow();
m_pdlgFrmWnd->SetCapture();
m_pdlgFrmWnd->SetActiveWindow();
以后就正常了
回复
zhaohuiguang 2004-04-08
::SetForegroundWindow(HWND hWnd);
回复
zhouzcy 2004-04-08
顶一顶
回复
JoiseLI 2004-04-08
FT,写错了
OnBnClickedOk里面这样改:
m_X += 10;
m_pdlgFrmWnd->SetForegroundWindow();
m_pdlgFrmWnd->SetCapture();
m_pdlgFrmWnd->SetActiveWindow();
if ( m_View == NULL )
{
MessageBox("NULL");
return;
}
m_View->DrawR(m_X);
回复
JoiseLI 2004-04-08
第一步:
在类声明中添加一个成员变量: CMyView *m_View;
在实现中把代码改成这样:

CRect Rect(10,10,400,300);
DWORD dwStyle = WS_CHILD;

LPCTSTR lpszClassName = AfxRegisterWndClass(0);
m_pdlgFrmWnd = new CDlgFrmWnd();
m_View = new CMyView();
LPCTSTR lpszViewClassName = AfxRegisterWndClass(0);
m_View->Create( lpszViewClassName, NULL, dwStyle, Rect, m_pdlgFrmWnd, 0, NULL );


OnBnClickedOk里面这样改:
if ( m_View == NULL )
{
MessageBox("NULL");
return;
}
m_View->DrawR(m_X);
m_Context.m_pCurrentDoc = 0;
m_Context.m_pCurrentFrame = m_pdlgFrmWnd;
m_Context.m_pNewViewClass = RUNTIME_CLASS(CMyView);
m_Context.m_pLastView = m_View;

m_pdlgFrmWnd->Create(lpszClassName,NULL,dwStyle,Rect,this,0,0,&m_Context);
m_pdlgFrmWnd->ShowWindow(SW_SHOW);
m_pdlgFrmWnd->UpdateWindow();
还有,把CMyView的构造改成public就可以了,我调试通过了,有问题再找我

不过我也有问题,不知道你碰到没有,你的代码运行时特别慢,不知道是什么原因,而且每画一个图都要切换一下,很是怪异,不知不何
回复
flyelf 2004-04-07
在创建的时候应该可以得到这个视图的指针的
回复
UPCCPU 2004-04-07
up
回复
UPCCPU 2004-04-07
不行啊
下面是创建框架和视图的代码
CRect Rect(10,10,400,300);
DWORD dwStyle = WS_CHILD;
CCreateContext Context;

LPCTSTR lpszClassName = AfxRegisterWndClass(0);
m_pdlgFrmWnd = new CDlgFrmWnd();

Context.m_pCurrentDoc = 0;
Context.m_pCurrentFrame = m_pdlgFrmWnd;
Context.m_pNewViewClass = RUNTIME_CLASS(CMyView);

m_pdlgFrmWnd->Create(lpszClassName,NULL,dwStyle,Rect,this,0,0,&Context);
m_pdlgFrmWnd->ShowWindow(SW_SHOW);
怎么获得视图指针呢?
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告