为什么在框架类类OnPaint()中使用m_wndStatusBar.CommandToIndex有时会返回空?

21st_centry_fox 2005-08-26 11:27:30
这个问题倒是非常容易重现:
在View类的OnPaint()函数中加入以下信息
//////////////////////////////////////
int index = 0;
index = m_wndStatusBar.CommandToIndex(ID_INDICATOR_CAPS);
if(-1==index) MessageBox("1 index is -1");//报错对话框
/////////////////////////////////////
运行即会发现弹出此报错对话框

奇怪的
一旦使用断点来跟踪其运行
则此问题即不再重现

是不是因为框架类的WM_PAINT事件有可能出现在WM_CREATE事件之前?
希望达人出手,指点一二。
...全文
111 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐鹦鹉 2005-08-26
  • 打赏
  • 举报
回复
是不是因为框架类的WM_PAINT事件有可能出现在WM_CREATE事件之前?
==这不可能。
handsomerun 2005-08-26
  • 打赏
  • 举报
回复
??
是view类的OnPaint
还是CMainFrame的OnPaint

view类中是没有m_wndStatusBar这个成员的阿

还有,试了试
在CMainFrame的OnPaint中
做int index = 0;
index = m_wndStatusBar.CommandToIndex(ID_INDICATOR_CAPS);
if(-1==index) MessageBox("1 index is -1");//报错对话框

没有出错阿
handsomerun 2005-08-26
  • 打赏
  • 举报
回复
你这个对话框是在主框架创建以后再出现的吗

或者这么说吧


AfxGetMainWnd()->SendMessage(UM_SET);
的时候,那个主框架已经创建出来了吗


你这样试试呢

if(m_wndStatusBar.GetSafeHwnd())
{
int index = 0;
index = m_wndStatusBar.CommandToIndex(ID_INDICATOR_CAPS);
if(-1==index) MessageBox("1 index is -1");//报错对话框

}

看这样还会不会出错
21st_centry_fox 2005-08-26
  • 打赏
  • 举报
回复
我尝试了一下,是我提问题担得不好
实际上是这样的
在一个DIALOG类里面
我在几处(比如说一个按钮中)送出了自定义的UM_SET(#define UM_SET WM_USER+1)事件:
AfxGetMainWnd()->SendMessage(UM_SET);

然后,在框架类中写了响应这个消息的函数
函数原型和消息映射我就不写了,各位高手应该都知道
然后,在这个函数中加入
//////////////////////////////////////
int index = 0;
index = m_wndStatusBar.CommandToIndex(ID_INDICATOR_CAPS);
if(-1==index) MessageBox("1 index is -1");//报错对话框
/////////////////////////////////////
这个时候就会出错了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧