怎么样改变 状态栏的大小???

zhdleo 2002-10-13 07:00:57
察看MainFrm.cpp 里面有

static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_SEPARATOR,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
表示定义的状态栏的结构。
原来是:
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
-----------------------------------------
所多的一个 ID_SEPARATOR, 是我自己加的。
可我发现,自己加的长度非常大,我不知道怎么才能控制它的长度!要不然多来几个
ID_SEPARATOR,显示上就看不到了。

另外再问一个,为什么第一个ID_SEPARATOR好像并没显示出来?
...全文
627 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
CharmDream 2002-10-15
  • 打赏
  • 举报
回复
gz
52001314 2002-10-15
  • 打赏
  • 举报
回复
int nIndex=m_pwndStatusBar->CommandToIndex(ID_SAMPLE);

这是取得ID_SAMPLE是Statusbar中的第几项。

static UINT indicators[] =
{
ID_SEPARATOR, // nIndex=0
ID_SAMPLE, // nIndex=1
ID_INDICATOR_NUM,// nIndex=2
ID_INDICATOR_SCRL,// nIndex=3
};

52001314 2002-10-15
  • 打赏
  • 举报
回复
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}


if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}//m_wndStatusBar就是这样建立的。
return 0;
}

如果在MainFrm.cpp中修改状态栏,用m_wndStatusBar直接修改就行了。如果在其他类中修改,就要取得指向状态栏的指针。
CStatusBar* m_pwndStatusBar = (CStatusBar*) AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);//这句是取得指针。

hualahuala 2002-10-14
  • 打赏
  • 举报
回复
还可以用commandtoindex把id转化为序号来进行设置
Lemon_2000 2002-10-14
  • 打赏
  • 举报
回复
Sets the specified indicator pane to a new ID, style, and width.

void SetPaneInfo(
int nIndex,
UINT nID,
UINT nStyle,
int cxWidth
);
Parameters
nIndex
Index of the indicator pane whose style is to be set.
nID
New ID for the indicator pane.
nStyle
New style for the indicator pane.
cxWidth
New width for the indicator pane.
52001314 2002-10-14
  • 打赏
  • 举报
回复
m_pwndStatusBar = (CStatusBar*) AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);
nIndex=m_pwndStatusBar->CommandToIndex(ID_SAMPLE);
///m_wndStatusBar.SetPaneStyle(nIndex,SBPS_POPOUT);改变指示器窗格样式
m_pwndStatusBar->SetPaneText(nIndex,"");
zhdleo 2002-10-14
  • 打赏
  • 举报
回复
是的,谢谢大家。

不过我有个相关的新的小问题。
如果static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_SAMPLE, //此为你自己定义的,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};

ID_SAMPLE, //此为你自己定义的,
那么就要在 资源栏的String Table里加上一个相对应的ID_SAMPLE
可是这个ID还需要有个Caption,且Caption 不能为空,(空格不算空)。

如果你在这个ID的Caption里写有内容。
那么初始化的状态内容为SetPaneText()函数所写入的内容+ID的Caption里写有内容。并且二者中间有个盹号。

我现在对此的一个解决办法是Caption的内容为空格。

要么就用系统的ID_SEPARATOR,

不知道大家还有什么其他办法没????
zhdleo 2002-10-13
  • 打赏
  • 举报
回复
ID_SAMPLE是??

楼上,你的意思是用CStatusBar类的函数SetPaneInfo()???
哪让我去看看。
ygzhi 2002-10-13
  • 打赏
  • 举报
回复
第一个是给系统用的提示,可以

static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_SAMPLE,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};

m_StatusBar.SetPaneInfo(1,ID_SAPMLE,SBPS_NORMAL,40);
其中40为长度。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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