MFC中如何将消息传递给其他类对象处理 20
如果我理解的没错的话,像LButtonDown之类的消息,一般都是在View中先重载的,我不想把所有的具体细节都放在View中处理,希望把这个消息传递给其他的类来处理,例...
如果我理解的没错的话,像LButtonDown之类的消息,一般都是在View中先重载的,我不想把所有的具体细节都放在View中处理,希望把这个消息传递给其他的类来处理,例如:
View中得到鼠标点击操作->交给工具箱,工具箱判断后->交给下层的某个类或对象,它再经过判断后-> 对其他的对象进行处理,像这种想法该如何实现,能不能给一个大概的例子
另外我看过一个例子,它的使用方法很像我要求的那种,使用方法好像和GetDocument()比较像,它用GetToolKit()方法返回一个ToolKit类的静态实例?的指针?,然后在LButtonDown中直接这么写
void CXXXView::OnLButtonDown(UINT nFlags, CPoint point)
{
GetToolKit()->OnLButtonDown(this, nFlags, point);
}
在接受处这么写
void CToolKit::OnLButtonDown(CODView* pView, UINT nFlags, CPoint point)
{
CYYYTool* pTool = GetShapeTool();
pTool->OnLButtonDown(pView, nFlags, point);
}
靠这样传递的,用的是什么原理,我自己照这样编的时候,好像怎么都通不过,因为在Tool中,要声明View的类,不然没办法创造出pView指针,在View中,又要包含Tool,不然没法创造出Tool的指针,我的理解可能比较混乱。请大神讲解
PS:这好像牵涉到引用的感念
有一处写错 CODView应该是 CXXXView 展开
View中得到鼠标点击操作->交给工具箱,工具箱判断后->交给下层的某个类或对象,它再经过判断后-> 对其他的对象进行处理,像这种想法该如何实现,能不能给一个大概的例子
另外我看过一个例子,它的使用方法很像我要求的那种,使用方法好像和GetDocument()比较像,它用GetToolKit()方法返回一个ToolKit类的静态实例?的指针?,然后在LButtonDown中直接这么写
void CXXXView::OnLButtonDown(UINT nFlags, CPoint point)
{
GetToolKit()->OnLButtonDown(this, nFlags, point);
}
在接受处这么写
void CToolKit::OnLButtonDown(CODView* pView, UINT nFlags, CPoint point)
{
CYYYTool* pTool = GetShapeTool();
pTool->OnLButtonDown(pView, nFlags, point);
}
靠这样传递的,用的是什么原理,我自己照这样编的时候,好像怎么都通不过,因为在Tool中,要声明View的类,不然没办法创造出pView指针,在View中,又要包含Tool,不然没法创造出Tool的指针,我的理解可能比较混乱。请大神讲解
PS:这好像牵涉到引用的感念
有一处写错 CODView应该是 CXXXView 展开
1个回答
展开全部
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CFSDDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CFSDView));
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
真正建立窗口的是ProcessShellCommand(cmdInfo)函数调用。。可以一步步跟踪。
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CFSDDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CFSDView));
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
真正建立窗口的是ProcessShellCommand(cmdInfo)函数调用。。可以一步步跟踪。
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询