从 mfc、sdi 中的对话框 class 访问文档文件

Accessing document files from dialog class in mfc, sdi

我是 mfc 的新手,所以我不知道我是否能正确解释我的问题,但我会尝试。

所以我用mfc做了一个益智游戏,想实现高分系统。游戏结束后会弹出对话框,在里面输入你的名字,名字是写在外部txt文件里的。所以,我有 Dialog class,我在其中实现了输入你的名字并将其发送到 txt 文件的内容,但问题是我无法访问存储在ProjectDoc class,所以我不能link球员的名字和分数。

所以问题是如何通过对话框 class.

从 ProjectDoc class 访问文件

在对话框的构造函数中将分数作为参数提交 class:

CHighscoreDlg::CHighscoreDlg(int score)
{
    m_score = score;   // store in private class member variable
}

...
...
void CPuzzleView::EndGame() 
{
    CHighscoreDlg hs(GetDocument()->m_gamescore);
    hs.DoModal();
}

如果您有一个(或几个)参数,IInspectable 和 thomiel 提供的解决方案效果很好。

另一个极端是传递一个指向 Document 的指针,然后让 Dialog 从中提取它需要的任何内容,但这会违反 "need to know" 政策。

我建议定义一个接口(抽象 class)IHighScoreProvider 与所需的访问器,例如:

class IHighScoreProvider
{
public:
    int GetGameScore() = 0;
    std::string GetPlayerName() = 0;
};

然后从中派生您的文档并实现这些方法。并将该接口指针传递给您的对话框。