MFC(VS2012)资源视图->属性->消息 消失。

source view , message blank

环境:Win8.1 CS,64bit, VS2012(11.0.61030.00 Update4)

问题:使用MFC调整对话框UI后‘消息’列表消失不见!!!

重现步骤:

1. 创建一个MFC 对话框项目,默认选项

2. 在资源视图中修改默认对话框UI,把ID比如改为IDD_sss_DIALOG,保存资源。


3.此时你点开'消息‘项就会发现-> Oh, NO, 啥都没有了,what the hell happened??


   多数情况下,我们可能还没留意到,就关闭了对话框窗口了。等我做了其他部分工作才发现时,我都想不起那步可能出错了。于是乎,怀疑 工具->选项->’始终使用回退位置‘,因为我昨天刚好设置了这项。折腾来折腾去...真是烦啊,google查E文也没找到什么trail。最后还是偶然想起一个可能性。


问题原因:

   在Dialog对应的.h文件里有个enum{xxx}声明了对话框的一句,它没有因为我们改了ID自动修改!!!所以只要把它也改成IDD_sss_DIALOG,就一切回归宁静


由于.h文件没有自动修改,导致出现的另一个问题就是:

如果此时你想在UI上添加变量,将无响应!!!


结论: MFC上改了ID,小心头文件对应的有没有修改。

pDC->GetState() 报错的原因可能是因为 CDC 没有 GetState() 函数,或者是使用了错误的 CDC 对象指针。 在 MFC 应用程序中,CDC 确实没有 GetState() 函数,正确的获取 CDC 对象状态的方式是使用 SaveDC() 和 RestoreDC() 函数。例如: ``` CDC* pDC = GetDC(); if (pDC != NULL) { int nSavedDC = pDC->SaveDC(); // 保存当前绘图环境 // 在此进行绘图操作 pDC->RestoreDC(nSavedDC); // 恢复绘图环境 ReleaseDC(pDC); // 释放 CDC 对象 } ``` 如果您坚持要使用 GetState() 函数,可以自己实现该函数并添加到 CDC 中,例如: ``` int CDC::GetState(CDCSTATE* pState) const { if (pState == NULL) return 0; pState->hDC = m_hDC; pState->hAttribDC = m_hAttribDC; pState->m_bPrinting = m_bPrinting; pState->m_bUseDC = m_bUseDC; pState->m_hDCPen = m_hDCPen; pState->m_hDCBrush = m_hDCBrush; pState->m_hFont = m_hFont; pState->m_hBitmap = m_hBitmap; pState->m_hPalette = m_hPalette; pState->m_nBkMode = m_nBkMode; pState->m_nArcDirection = m_nArcDirection; pState->m_nMapMode = m_nMapMode; pState->m_nDefROP2 = m_nDefROP2; pState->m_sizeVpExt = m_sizeVpExt; pState->m_sizeVpOrg = m_sizeVpOrg; pState->m_sizeWinExt = m_sizeWinExt; pState->m_sizeWinOrg = m_sizeWinOrg; pState->m_nSaveDCIndex = m_nSaveDCIndex; pState->m_bHasHalftonePalette = m_bHasHalftonePalette; return 1; } ``` 不过需要注意的是,这并不是 CDC 原本就有的函数,也不是 MFC 库中提供的标准函数,使用时需要自己承担一定的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值