2013-05-04 2 views
0

J'ai une application que j'écris à l'aide du pack de fonctions MFC. Il utilise Document/View. Puisque ces classes sont dérivées de classes MFC "normales", ces questions peuvent ne pas être spécifiques au Feature Pack.VS 2008 Feature Pack MFC - Comment faire

Lorsqu'un changement est fait, ajouter un astérisque * au nom de l'onglet, et le mot (modified) au principal titre de la fenêtre en utilisant le code suivant:

tabval = "Report_" + pDoc->rptData.reportId.Strip(); 
winval = tabval; 
if (changed) { 
    tabval += " *"; 
    winval += " (modified)"; 
} 
frame->SetTitle(tabval); 
frame->SetWindowText(tabval); 
name = mainFrame->GetTitle(); 
mainFrame->SetWindowText(name + " - " + winval); 

Mais en cas de changement entre les onglets, la le texte original revient. Première question: comment rendre le changement collant?

Deuxième question: il y a une arborescence à gauche et une fenêtre de propriétés à droite. Basculer entre eux (un) met en surbrillance les barres de titre pour montrer lequel est actif. L'utilisateur peut également activer et interagir avec la fenêtre de document, mais il ne semble pas y avoir de moyen de donner un retour visuel sur le fait que la fenêtre de document est, en fait, active. Comment puis je faire ça?

Répondre

0

On ne sait pas quels types vos variables sont, mais comme vous avez pDoc et frame, je suppose que le premier est votre CDocument classe dérivée et celle-ci est peut-être un CFrameWnd ou CMDIFrameWnd classe dérivée.

Si je ne suis pas loin de la vérité, la raison pour laquelle les titres des onglets ne sont pas coller est que vous appellerez SetTitle sur le CDocument qui se cache derrière chaque vue par onglets, donc quelque chose comme

tabval = "Report_" + pDoc->rptData.reportId.Strip(); 
winval = tabval; 
if (changed) { 
    tabval += " *"; 
    winval += " (modified)"; 
} 
pDoc->SetTitle(tabval); // set tab title on CDocument 
+0

Cela a pris soin de l'onglet, mais le titre de la fenêtre principale a juste le '*' et non '(modifié)'. Je peux vivre avec cela si nécessaire, mais y a-t-il un moyen de passer outre? Merci! –

+0

J'ai fait quelques recherches, et j'ai trouvé plusieurs façons de modifier le titre de la fenêtre principale, mais elles sont toutes assez impliquées et ne valent pas la peine. –

0

I avait un problème similaire dans le passé. La cause du changement du texte du titre de la fenêtre principale est la fonction CFrameWndEx::OnUpdateFrameTitle. Comme il est virtuel, vous pouvez le remplacer sur votre propre classe dérivée pour avoir le comportement que vous voulez. C'est une solution qui a fonctionné pour moi.

Questions connexes