这是vs自动生成的代码
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};这是vc技术内幕中的一个例子写的代码
static UINT indicators[] =
{
ID_SEPARATOR, // first message line pane
ID_SEPARATOR, // second message line pane
ID_INDICATOR_LEFT,
ID_INDICATOR_RIGHT,
};不理解为何状态栏的小区域里设置为ID_SEPARATOR,就一定在对应的地方显示提示信息,如果是别的值就不会显示提示信息,而且,像上面那样,如果有两个ID_SEPARATOR也只会在第一个ID_SEPARATOR对应的区域显示提示信息,后面那个什么也不做。static UINT indicators[] =
{
ID_INDICATOR_CAPS,
ID_INDICATOR_CAPS,
ID_SEPARATOR, // 状态行指示器
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};而我改成这样之后,第一、二个区域,都显示相同的内容(大小写指示),3、4就不显示一样的提示信息?我自己理解的话,每个区域,都是唯一的一个从0开始多索引,要设置每个区域的内容都根据相应的索引去的,那么怎么会出现,两个ID_INDICATOR_CAPS的区域就显示相同的内容,而两个ID_SEPARATOR,又只有第一个显示内容?
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};这是vc技术内幕中的一个例子写的代码
static UINT indicators[] =
{
ID_SEPARATOR, // first message line pane
ID_SEPARATOR, // second message line pane
ID_INDICATOR_LEFT,
ID_INDICATOR_RIGHT,
};不理解为何状态栏的小区域里设置为ID_SEPARATOR,就一定在对应的地方显示提示信息,如果是别的值就不会显示提示信息,而且,像上面那样,如果有两个ID_SEPARATOR也只会在第一个ID_SEPARATOR对应的区域显示提示信息,后面那个什么也不做。static UINT indicators[] =
{
ID_INDICATOR_CAPS,
ID_INDICATOR_CAPS,
ID_SEPARATOR, // 状态行指示器
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};而我改成这样之后,第一、二个区域,都显示相同的内容(大小写指示),3、4就不显示一样的提示信息?我自己理解的话,每个区域,都是唯一的一个从0开始多索引,要设置每个区域的内容都根据相应的索引去的,那么怎么会出现,两个ID_INDICATOR_CAPS的区域就显示相同的内容,而两个ID_SEPARATOR,又只有第一个显示内容?
pStatus->SetPaneText( pStatus->CommandToIndex(IDS_panel1), str ); //这种通过转换将ID值转换成位置值,用于自己定义的indicators
pStatus->SetPaneText(3,str); //这种直接通过位置值来设定例如下面这个indicators:
static UINT indicators[] =
{
IDS_panel1,
IDS_panel2,
ID_SEPARATOR,
ID_SEPARATOR,
ID_SEPARATOR,
};我可以使用:pStatus->SetPaneText( pStatus->CommandToIndex(IDS_panel1), str ); 来设定
也可以使用:pStatus->SetPaneText( 0,str); 来设定,效果是一样的。如果你对状态栏的本身的状态不做更高的要求,例如不通过系统的一些状态来设定你的indicators,如下面的这个insert状态这么复杂的控制:
STRINGTABLE
BEGIN
ID_INDICATOR_INS "INS"
END// In CMainFrame's message map
ON_UPDATE_COMMAND_UI (ID_INDICATOR_INS, OnUpdateIndicator)// In CMainFrame::OnCreate
static UINT nIndicators[] = {
ID_SEPARATOR,
ID_INDICATOR_INS
};m_wndStatusBar.Create (this);
m_wndStatusBar.SetIndicators (nIndicators, 2);// Elsewhere in CMainFrame
void CMainFrame::OnUpdateIndicator (CCmdUI* pCmdUI)
{
pCmdUI->Enable (m_bInsert);
}你大可把你的indicators设定为:
static UINT indicators[] =
{
ID_SEPARATOR, //有的时候第一个出现的ID_SEPARATOR被默认占用,也就是 // 状态行指示器
ID_SEPARATOR,
ID_SEPARATOR,
ID_SEPARATOR,
ID_SEPARATOR,
};然后使用:
pStatus->SetPaneText( 0,str0);
pStatus->SetPaneText( 1,str1);
pStatus->SetPaneText( 2,str2);
pStatus->SetPaneText( 3,str3);
pStatus->SetPaneText( 4,str4);
这样去设定没一个状态栏窗口的显示内容。你说的3,4出现显示不同,那个很正常 因为你可能错位显示了某些东西。
谢谢,辛苦了这样说其实不对的,它们不是“占位符”,而是状态栏中相应区域的ID,
现在比较疑惑的是,为什么给区域分配ID_SEPARATOR这个ID,则只在第一个ID_SEPARATOR表识的区域显示提示,
而给区域分配比如是ID_INDICATOR_LEFT这样的ID,则,每个ID_INDICATOR_LEFT对应的区域都显示相同的内容。
貌似我问的就不是那些函数的用法,为什么都只说函数用法呢?
重问一遍现在比较疑惑的是,为什么给区域分配ID_SEPARATOR这个ID,则只在第一个ID_SEPARATOR表识的区域显示提示,
而给区域分配比如是ID_INDICATOR_LEFT这样的ID,则,每个ID_INDICATOR_LEFT对应的区域都显示相同的内容。