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

来源:互联网 发布:chrome 抢票插件 mac 编辑:程序博客网 时间:2024/06/05 07:36

在项目中遇到要修改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情况就不一样)


1 0
原创粉丝点击