2016-05-06 3 views
1

Je viens d'être lancé sur un projet écrit en C++ sur VS. J'ai une boîte de dialogue avec des contrôles d'édition où un utilisateur entre une adresse MAC. Je voudrais enregistrer cette information quand un "événement de clic" se produit. C'est ainsi que lorsque l'application se termine, elle est enregistrée et peut être chargée à nouveau. Je sauvegarderais naturellement ceci pour classer et utiliser l'I/O de base de dossier.Manière efficace d'enregistrer Modifier l'entrée utilisateur de contrôle et de restaurer lorsque l'application redémarre C++ Visual Studio

La question est, "Quelle est la manière la plus efficace de faire ceci?". Mon recherches se sont retrouvés dans « DialogResult » bien, mais je ne pouvais pas trouver cette propriété dans VS 2015

https://msdn.microsoft.com/en-us/library/65ad5907(v=vs.100).aspx

Toute aide grandement appréciée,

-SDEV

+1

Bienvenue sur stackoverflow, le site de q & a pour la programmation de questions - Votre question ne ressemble pas à une question de programmation telle que définie dans la [section d'aide] (http://stackoverflow.com/help) – Soren

Répondre

0

Cela se fait généralement à l'aide du le stockage "Profile" de l'application, qui se trouvait dans un fichier .INI, mais qui est maintenant dans le registre, sous la clé logicielle de l'application.

Dans une application MFC InitInstance(), il y a généralement un appel généré automatiquement à SetRegistryKey. Cela prend une chaîne d'identification et configure le stockage de profil de l'application. Donc, si votre application manque, vous devez ajouter quelque chose comme SetRegistryKey(_T("MyCompanyGroupOrAppName"));.

Ensuite, il existe une API pour stocker et récupérer des informations. Pour Modifier le texte de contrôle, vous voulez probablement l'enregistrer avec CWinApp::WriteProfileString. Donc, dans votre gestionnaire, vous obtiendrez le texte du contrôle d'édition dans un CString, puis enregistrez-le avec

AfxGetApp()->WriteProfileString(_T("SectionName"), _T("MacAddress"), MyMacAddressString); 

Pour la chaîne revenir plus tard, utilisez quelque chose comme:

CString MyMacBeforeTheCrash = pApp->GetProfileString(_T("SectionName"), _T("MacAddress")); 

Voici quelques-unes liens vers la documentation:

Il semble que vous pourriez ne pas être sûr de savoir comment accéder à texte à partir d'un contrôle d'édition. Il existe plusieurs façons de le faire, mais cela dépend de la manière dont votre boîte de dialogue est configurée.

Si votre contrôle d'édition a une variable CString associée, avec DDX (Dialog Data Exchange), vous appelez votre classe de dialogue fonction membre: UpdatData(TRUE); et après cela, sa variable CString contiendra le texte actuel. Pour enregistrer une valeur, vous affectez la nouvelle valeur de texte à la variable, puis appelez UpdateData(FALSE);.

Si vous avez accès à une variable de classe pour le contrôle d'édition (un objet CEdit), vous pouvez copier le texte du contrôle d'édition à un CString avec MyEditControl.GetWindowText(MyString);. Pour copier le texte d'une chaîne dans un contrôle d'édition, faites: MyEditControl.SetWindowText(MyString);. S'il n'y a aucun type de variable pour votre contrôle d'édition, vous pouvez en ajouter un en allant dans l'éditeur de ressources de votre boîte de dialogue, en cliquant droit sur le contrôle d'édition, puis en choisissant "Ajouter variable" dans le menu.Vous aurez à choisir si vous voulez ajouter un objet de contrôle (un CEdit), ou quelque chose comme un CString.

Vous pouvez également accéder au texte d'un contrôle d'édition en utilisant l'API non-MFC Win32 - cela implique d'abord obtenir en quelque sorte la poignée de fenêtre du contrôle, puis en utilisant ::SendMessage pour envoyer des messages WM_GETTEXT et WM_SETTEXT au contrôle.

Bonne chance.