CommandToIndex问题

fontain 2008-11-21 04:01:17

在对状态栏编程的时候发现的问题
已经增加了状态栏panel,ID 为ID_INDICATER_FUNC,是在resource中增加的字符串资源,加入到状态来也成功,但在OnSize中使用CommandToIndex检索该ID时却失败,返回-1,求助各位达人
代码如下:
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_FUNC,//<---我增加的Panel
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,

};
.........
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// 创建客户区框架
if(!clientFrame.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST))
{
TRACE0("未能创建视图窗口\n");
return -1;
}
//在这里创建的StatusBar和一个Button
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
int iBtnArea=m_wndStatusBar.CommandToIndex(ID_INDICATOR_FUNC);
ASSERT(iBtnArea!=-1);//<---成功,没有问题
m_wndStatusBar.SetPaneText(iBtnArea,L"");
m_wndStatusBar.SetPaneInfo(iBtnArea,0,0,100);
btnFuncPrev.Create(L"<-",WS_CHILD | WS_VISIBLE,CRect(0,0,0,0),&m_wndStatusBar,0);
return 0;
}
...........
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
if(::IsWindow (m_wndStatusBar.GetSafeHwnd()) && cx>50 &&cy>50){
CRect rect;
int i=m_wndStatusBar.CommandToIndex(ID_INDICATOR_FUNC);
ASSERT(i!=-1);//<--失败,想不通啊
m_wndStatusBar.GetItemRect(i,&rect);
rect.top=0;
btnFuncPrev.MoveWindow(rect);
}
}
...全文
254 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fontain 2008-11-21
正解,谢谢了,是在这句话:
m_wndStatusBar.SetPaneInfo(iBtnArea,0,0,100);
改为
m_wndStatusBar.SetPaneInfo(iBtnArea,ID_INDICATOR_FUNC, SBPS_NORMAL,100);
就没问题了
关键在第二个参数,setpanelinfo将第二个参数作为指定panel的新id,指定成0肯定以后查不出来了,谢谢,给分啦
回复
cnzdgs 2008-11-21
可能是m_wndStatusBar的数据被破坏了,检查一下看看其它地方有没有内存越界。
回复
fontain 2008-11-21
按一般推理,OnSize应该在窗口全部准备好后才能触发吧
回复
fontain 2008-11-21
不是这个问题,我跟踪这个程序,发现OnSize被调用两次,(一次是我movewindow,一次是show maximize),这两次都是返回-1,头大
回复
快乐鹦鹉 2008-11-21
系统启动时,OnSize会被执行好几次,如果i为-1,你不妨不处理,可能这时候状态栏还没有完全OK。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-11-21 04:01
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……