关于修改MFC Ribbon Panel标题的总结m_strNamem_strName

本文介绍了在MFC项目中如何修改Ribbon Panel的标题,由于CMFCRibbonPanel类未提供直接修改caption的函数,作者通过查找源码发现标题存储在m_strName变量中。作者创建了CMFCRibbonPanel的子类,并通过子类修改m_strName来实现标题变更。注意事项包括避免在头文件中定义变量,以及理解基类和子类之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中遇到要修改ribbon panel的标题为别的语言,可是在MSDN上查找发现CMFCRibbonPanel这个类下没有修改caption的函数,而且ribbon panel没有自带ID,困扰许久,看到一篇帖子说用修改自带变量的方法可行。具体看了一下,因为CMFCRibbonPanel有个GetName()函数,则得到的字符串一定在某个变量存储,寻找源头发现标题caption在m_strName这个变量中保存,遂定义一个CMFCRibbonPanel的子类,来通过对子类中m_strName的修改达到改变Panel标题的目的。代码如下,先声明一个子类

class MyRibbonPanel:public CMFCRibbonPanel
{
public:
	MyRibbonPanel();
	~MyRibbonPanel();
	// MyRibbonPanel(LPCTSTR lpszName = NULL, HICON hIcon = NULL ) : CMFCRibbonPanel(lpszName, hIcon) {};
	 void SetPanelName(CString name);
};
再对这个子类的setpanelname函数进行定义,这里的定义一定不要放在头文件里,因为我刚刚开始编程没有经验,经常把定义放在头文件,这样头文件被多个cpp调用时就会出现多次定义等问题。

void MyRibbonPanel::SetPanelName(CString name)
{
	m_strName=name;
}

然后就可以调用了

CMFCRibbonPanel* pPanel;
MyRibbonPanel* pMyPanel = (MyRibbonPanel*)pPanel;//这里把父类的对象强制转换成子类对象,没有报错,说明可以转换
pMyPanel->SetPanelName(“it can work ”);
还有一个发现如下

static TCHAR gRibbonString[RIBBON_SIZE];
CString SName=gRibbonString;//CString和CHar大概可以相互转换?


这里做一下总结:

1.函数或者变量的定义不要放在头文件中

2.基类的对象可以强制转化为子类的对象(搜索后发现父类向子类转换需要加上这个dynamic_cast,不过我没加也并没有报错)

3.通过这个实例发现,通过子类改变基类中定义的变量时,变化的就是基类中本身的而不是子类继承来的(可能加了Virture情况就不一样)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值