首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC对话框OnInitDialog跟OnPaint函数之间还执行了什么函数

2012-10-18 
MFC对话框OnInitDialog和OnPaint函数之间还执行了什么函数?在debug下总是出现assert failed, wingdi.cpp l

MFC对话框OnInitDialog和OnPaint函数之间还执行了什么函数?
在debug下总是出现assert failed, wingdi.cpp line336,是下面的代码

C/C++ code
int CDC::SetBkMode(int nBkMode){    ASSERT(m_hDC != NULL);    int nRetVal = 0;    if (m_hDC != m_hAttribDC)        nRetVal = ::SetBkMode(m_hDC, nBkMode);    if (m_hAttribDC != NULL)        nRetVal = ::SetBkMode(m_hAttribDC, nBkMode);    return nRetVal;}

就是ASSERT(m_hDC != NULL);
程序只在OnPaint中调用了SetBkMode,但是还没有执行到OnPaint就出现了assert failed的问题,
断点跑OnInitDialog没有问题,一出OnInitDialog,还没进入OnPaint出现assert failed,
OnInitDialog和OnPaint函数之间还执行了什么函数啊?

[解决办法]
int CDC::SetBkMode(int nBkMode)
{
if(m_hDC==NULL || !m_hDC)//加这两句
return;//加这两句
ASSERT(m_hDC != NULL);
int nRetVal = 0;

if (m_hDC != m_hAttribDC)
nRetVal = ::SetBkMode(m_hDC, nBkMode);
if (m_hAttribDC != NULL)
nRetVal = ::SetBkMode(m_hAttribDC, nBkMode);
return nRetVal;
}

应该是对话框还没建立就调用这个函数了,MFC复杂,调用一个函数前可能会执行很多内部函数
[解决办法]
OnPaint中调用了SetBkMode
有没有BeginPaint();
或CPaintDC dc;
[解决办法]
这之间还有好多要处理啊,比如OnSize等等,但是感觉还是你OnPaint中的问题,你是不是调用错了,或者用的全局DC?

应该用

dc.SetBkMode(...);

热点排行