MFC单文档状态栏字体灰色的解决和疑问

首先我的开发环境是VS2017,在程序中想加入一个状态栏显示鼠标的坐标。
由于我当初建立项目时没有勾选状态栏,所以没有系统默认的状态栏,就需要手动添加。
首先新建自定义的状态栏CMFCStatusBar myStatusBar;
添加状态编辑器

static UINT indicators[] =
{
  ID_SEPARATOR,// 状态行指示器
  ID_INDICATOR_X,
  ID_INDICATOR_Y,
  ID_INDICATOR_EXT
};

然后再在OnCreate函数中写上

if (!myStatusBar.CreateEx(this))
{
TRACE0("未能创建工具栏\n");
return -1;      // 未能创建
}
myStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT));
myStatusBar.SetPaneInfo(0, ID_SEPARATOR, SBPS_POPOUT, 50);
myStatusBar.SetPaneInfo(1, ID_INDICATOR_X, SBPS_POPOUT, 50);
myStatusBar.SetPaneInfo(2, ID_INDICATOR_Y, SBPS_POPOUT, 50);
myStatusBar.SetPaneInfo(3, ID_INDICATOR_EXT, SBPS_POPOUT, 50);

标准建立过程。再添加ON_COMMAND消息,不添加消息,状态栏字体会是灰色。

ON_COMMAND(ID_INDICATOR_X, NULL)
ON_COMMAND(ID_INDICATOR_Y, NULL)
ON_COMMAND(ID_INDICATOR_EXT, NULL)

再参照CSDN上讲的添加鼠标移动的函数即可显示坐标信息。
最后的问题是,生成后的坐标显示还是有灰色的,比如这样:
在这里插入图片描述
图里的Y坐标显示为灰色,按照之前的方法应该是未添加ON_COMMAND消息,但实际上已经添加了。
查来查去最后发现更改设置状态栏的信息顺序,错误就会颠倒。X,Y中后被执行的就会显示灰色。

myStatusBar.SetPaneInfo(0, ID_SEPARATOR, SBPS_POPOUT, 50);
 myStatusBar.SetPaneInfo(2, ID_INDICATOR_X, SBPS_POPOUT, 50);
 myStatusBar.SetPaneInfo(1, ID_INDICATOR_Y, SBPS_POPOUT, 50);
  myStatusBar.SetPaneInfo(3, ID_INDICATOR_EXT, SBPS_POPOUT, 50);

在这里插入图片描述
于是去查ID,发现两者ID值并不冲突:
但是SetPaneInfo只能执行一个
但是SetPaneInfo只能使一个有效,于是乎改掉其中过一个ID执行结果如下
在这里插入图片描述在这里插入图片描述
最终显示正常!!
其中反反复复尝试,发现问题还是出在ID值为59142上,不论X,Y谁的ID为59142,只要出现59142,加上SetPaneInfo的顺序,就会出现两个坐标有一个显示为灰色的问题,去掉59142ID值,则运行正常,在Resource.h中也对比过,没有重复的ID值为59142,但是出现59142就会有上面的问题,很无语为什么会有这种情况。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值