MFC新手问题:如何使用其他类的函数

RuntimeError 2009-12-11 07:02:15
我初学MFC,对其思想精髓不甚了解,望高手指教。
我用VC++ 2008创建了一个Visual Studio风格的应用程序,里面有有个类叫COutputWnd,其定义及相关代码片段如下。

class COutputList : public CListBox
{
// 构造
public:
COutputList();

// 实现
public:
virtual ~COutputList();

protected:
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
afx_msg void OnEditCopy();
afx_msg void OnEditClear();
afx_msg void OnViewOutput();

DECLARE_MESSAGE_MAP()
};

class COutputWnd : public CDockablePane
{
// 构造
public:
COutputWnd();

// 属性
protected:
CFont m_Font;

CMFCTabCtrl m_wndTabs;

COutputList m_wndOutputBuild;
COutputList m_wndOutputDebug;
COutputList m_wndOutputFind;

protected:
void FillBuildWindow();
void FillDebugWindow();
void FillFindWindow();

void AdjustHorzScroll(CListBox& wndListBox);

// 实现
public:
virtual ~COutputWnd();

protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);

DECLARE_MESSAGE_MAP()
};

其中FillDebugWindow()用于在类似于VS的调试输出的窗口里显示一些内容。
实现代码如下:

void COutputWnd::FillDebugWindow()
{
m_wndOutputDebug.AddString(_T("调试输出正显示在此处。"));
m_wndOutputDebug.AddString(_T("输出正显示在列表视图的行中"));
m_wndOutputDebug.AddString(_T("但您可以根据需要更改其显示方式..."));
}

现在,我设计了一个菜单项,单击该菜单项时在这个窗口中输出一些内容。
我的问题是,菜单事件处理程序写在View类里,这是否正确?是不是应该写在这个类里?
如果写在View类里,应该如何实现显示内容的功能?
谢谢!
...全文
576 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjhuangjin 2009-12-11
  • 打赏
  • 举报
回复
要想实现添加又两种方法,第一,在COutputWnd类里添加一个实现添加内容的方法,因为COutputList m_wndOutputBuild;COutputList m_wndOutputDebug;COutputList m_wndOutputFind;是
protected属性.所以要自己定义一个公用接口。
例如添加的函数为
public:
void AddStrToOutPutDebug(CString& strAddToList);
实现:
void COutputWnd::AddStrToOutPutDebug(CString& strAddToList)
{
m_wndOutputDebug.AddString(strAddToList);//作为演示,暂时对一项进行操作
}

在CMainFrame响应菜单消息
void CMainFrame::OnYourMenuItem()
{
CString strYourContext;
strYourContext= "你要添加的内容";
m_wndOutput.AddToOutPutDebug(strYourContext);
}即可!

第二种做法:
或者你直接把protected改成public,之后直接在CMainFrame中
void CMainFrame::On32771()
{
m_wndOutput.m_wndOutputDebug.AddString(_T("你添加的内容!"))
}
更推荐第一种做法,后面的方法破坏了封住的特性。呵呵,给分啊~~
RuntimeError 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 heksn 的回复:]
可以通过COutputWnd的指针或向COutputWnd发送消息来调用
[/Quote]
如何获取这个类的指针呢?
还有一个问题是,这个类没有public类型的函数,在外面是无法调用的呀?
RuntimeError 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bilaopao 的回复:]
在百度发过吧。不都已经说了吗
[/Quote]
没有发过丫~
bilaopao 2009-12-11
  • 打赏
  • 举报
回复
在百度发过吧。不都已经说了吗
  • 打赏
  • 举报
回复
可以通过COutputWnd的指针或向COutputWnd发送消息来调用
mmilmf 2009-12-11
  • 打赏
  • 举报
回复
写在View类中不是不可以,一般写在CMainFrame类中。
既然重写了CListBox,将菜单的处理函数写在添加ListBox控件的类中吧
Gothic_girl 2009-12-11
  • 打赏
  • 举报
回复
...
qq14923349 2009-12-11
  • 打赏
  • 举报
回复

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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