【问题标题】:Display Text on MFC Based Application在基于 MFC 的应用程序上显示文本
【发布时间】:2013-05-06 11:02:49
【问题描述】:

我对使用 MFC 和 VC++ 有点陌生,但我将其作为课程的一部分,我必须坚持使用 VC++。

http://www.cprogramming.com/tutorial/game_programming/same_game_part1.html

这是我制作一个简单的同款游戏的教程。但是,当我尝试显示分数时,分数会显示在我的应用程序窗口下方或外部,即使我在调用 updateWindow() 之前已经显示了分数。我尝试了各种方法,但我有点迷失在这里。

这是我用来显示分数的代码:

void CSameGameView::updateScore()
{
CSameGameDoc* pDoc = GetDocument();
CRect rcClient, rcWindow;
GetClientRect(&rcClient);
GetParentFrame()->GetWindowRect(&rcWindow);

int nHeightDiff = rcWindow.Height() - rcClient.Height();

rcScore.top=rcWindow.top + pDoc->GetHeight() * pDoc->GetRows() + nHeightDiff;
rcScore.left=rcWindow.left + 50;
rcScore.right=rcWindow.left + pDoc->GetWidth() - 50;
rcScore.bottom=rcScore.top + 20;

CString str;
double points = Score::getScore();
str.Format(_T("Score: %0.2f"), points);

HDC hDC=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
COLORREF clr = pDoc->GetBoardSpace(-1, -1); //this return background colour

pDC->FillSolidRect(&rcScore, clr);
DrawText(hDC, (LPCTSTR) str, -1, (LPRECT) &rcScore, DT_CENTER);
}

感谢您的帮助,如果问题没有意义或模棱两可,我很抱歉。

【问题讨论】:

  • 如果您将rcScore.top 硬编码为您知道在窗口内的某个值会怎样?例如rcScore.top = 100;
  • @olevegard 然后它不显示。通过反复试验,我发现分数显示在窗口的后面。在这种情况下,游戏画面。

标签: visual-c++ visual-studio-2012 mfc


【解决方案1】:

您的代码有几个问题:
1. 您正在创建的 hDC 将具有相对于桌面窗口的坐标。要在窗口中绘制文本,请像这样使用 CClientDC: CClientDC dc(this); (见http://msdn.microsoft.com/en-US/library/s8kx4w44%28v=vs.80%29.aspx
2. 每次调用函数时,您拥有的代码都会泄漏一个 DC。 #1中的方法将解决这个问题。
3. 你的绘制代码应该在 CView::OnDraw 中完成。在那里,您将获得一个 DC 传递给您,您不必担心使用 CClientDC 创建一个 DC。设置你想要绘制的变量(例如你的分数或分数),将它们存储为类成员并在 CView::OnDraw 中绘制它们。 不要在 updateScore 方法中进行绘图。 有道理?坚持住!

【讨论】:

  • 我尝试了你的建议。但是现在我最终在窗口中心附近的某个地方显示了一个分数。每次我将主窗口移动到任何地方时,它都会改变它的位置。我想把它固定在一个地方,这样就不会碍事了。
  • 我不确定您的确切应用程序,但首先将 rcScore.top 设置为 50 左右,然后看看它的外观,而不是进行您正在执行的计算。但是,如果它是滚动视图,则必须根据向下滚动的量来调整顶部等。这有帮助吗?
  • 看一下链接,那里的图片基本上是我的屏幕的样子。我只是想向其中添加分数功能。所做的计算,我习惯于将初始窗口的大小调整为我的工作屏幕,所以我很确定它们可以工作。感谢您的帮助。
  • 不管我怎么弄乱 rcScore 值,每次我移动窗口时,分数都会不停地跳来跳去。有没有可能因为 DC?
  • 您能否在您的 CView::OnDraw 中列出相关代码,以便我可以确切地看到您在做什么?
猜你喜欢
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多