【发布时间】:2018-04-23 16:32:25
【问题描述】:
我正在使用带有 Visual Studio 2017 的 Doc/View 架构制作 MFC 应用程序,由于某种原因,每当我在此函数中调用 GetDC() 时都会出现该错误:
void CDigitRecognizerView::ClearScreen(void)
{
CDC* dc;
dc = GetDC(); // debug assertion error here
CBrush brush;
brush.CreateSolidBrush(0xFFFFFF);
dc->SelectObject(&brush);
CRect rect;
GetWindowRect(&rect);
dc->FillRect(&rect, &brush);
CDigitRecognizerDoc* pDocument = GetDocument();
ReleaseDC(dc);
}
这是应用类中定义的消息映射宏:
BEGIN_MESSAGE_MAP(CDigitRecognizerApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, &CDigitRecognizerApp::OnAppAbout)
ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
ON_COMMAND(ID_EDIT_CLEARSCREEN, CDigitRecognizerView::ClearScreen)
END_MESSAGE_MAP()
因此,每当我从应用程序的菜单中选择“清除屏幕”选项时,都会调用 ClearScreen(),但我无法获取视图的 DC,它会崩溃。
我查看了调试器中的变量,窗口句柄似乎没问题,所以我真的不知道。
我还想知道,每当我选择菜单选项时,我还可以通过什么其他方式从 App 类调用 View 类的函数,因为这似乎不起作用。
【问题讨论】:
-
您是否尝试过追踪
GetDC以查看其崩溃的确切位置?附言确切的错误是什么,您没有将其放入问题中? -
以前从未尝试过跟踪,所以我不知道该怎么做。我尝试进入它,但显然我错过了一个模块。
标签: mfc visual-studio-debugging