Windows phone 8个文件存储C++
Windows phone 8 file storage C++
我开始使用 C++ Windows phone。
目前我正在做一个有很多页面的 windows phone 应用程序,我不知道如何保存和加载我的数据。我尝试了全局变量和 SQLite 数据库,但我总是遇到错误,所以我尝试了“Windows::Storage::ApplicationDataContainer”,但我无法在所有页面之间传递变量。
是否有人拥有使用 ApplicationDataContainer 的模板,或者有人可以向我解释如何使用它?
这是我的代码
MainPage.xaml.cpp
#include "pch.h"
#include "MainPage.xaml.h"
#include "menu.xaml.h"
using namespace japanEasy;
using namespace Windows::Storage;
using namespace Platform;
using namespace std;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Interop;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Popups;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings;
// Pour en savoir plus sur le modèle d'élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkId=234238
MainPage::MainPage()
{
InitializeComponent();
}
/// <summary>
/// Invoqué lorsque cette page est sur le point d'être affichée dans un frame.
/// </summary>
/// <param name="e">Données d'événement décrivant la manière dont l'utilisateur a accédé à cette page. La propriété Parameter
/// est généralement utilisée pour configurer la page.</param>
void MainPage::OnNavigatedTo(NavigationEventArgs^ e)
{
(void) e; // Paramètre non utilisé
}
void japanEasy::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
if (this->theName->Text == "" || this->theName->Text == nullptr)
{
auto msgDlg = ref new MessageDialog("Vous devez d'abord saisir votre nom", "Attention");
msgDlg->ShowAsync();
}
else
{
auto values = localSettings->Values;
values->Insert("playerName", dynamic_cast<PropertyValue^>(PropertyValue::CreateString(this->theName->Text)));
String^ value = safe_cast<String^>(localSettings->Values->Lookup("playerName"));
this->Frame->Navigate(TypeName(japanEasy::menu::typeid), localSettings);
}
}
menu.xaml.cpp
#include "pch.h"
#include "menu.xaml.h"
#include "learn.xaml.h"
#include "level.xaml.h"
#include "records.xaml.h"
#include "easyGame.xaml.h"
using namespace japanEasy;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Interop;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace Windows::Storage;
ApplicationDataContainer^ localSettings ;
menu::menu()
{
InitializeComponent();
this->myName->Text = safe_cast<String^>(localSettings->Values->Lookup("playerName"));
}
/// <summary>
/// Invoqué lorsque cette page est sur le point d'être affichée dans un frame.
/// </summary>
/// <param name="e">Données d'événement décrivant la manière dont l'utilisateur a accédé à cette page.
/// Ce paramètre est généralement utilisé pour configurer la page.</param>
void menu::OnNavigatedTo(NavigationEventArgs^ e)
{
(void) e; // Paramètre non utilisé
auto localSettings = (ApplicationDataContainer^)e->Parameter;
::Windows::UI::Xaml::Controls::Page::OnNavigatedTo(e);
}
void japanEasy::menu::goToLearn_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::learn::typeid));
}
void japanEasy::menu::goTo_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
}
void japanEasy::menu::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::level::typeid));
}
void japanEasy::menu::goToRecords_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::records::typeid));
}
当我在 windows phone 上启动我的应用程序时,我获取了我的用户名,然后单击我的按钮以显示 "menu.xaml" 页面,我应该得到此页面中的名称归功于 "localSettings" 我已经通过导航功能传递了我的 MainPage.xaml.cpp。
为了将数据从一个页面传递到另一个页面,我使用了 "Page::OnNavigatedTo" 方法。
所以在我的 menuPage 上我创建了一个全局变量并添加了一个 menu::OnNavigatedTo()
我从前几页获取数据的地方。
这是我的 menuPage.xaml.cpp
#include "pch.h"
#include "menu.xaml.h"
#include "learn.xaml.h"
#include "level.xaml.h"
#include "records.xaml.h"
#include "easyGame.xaml.h"
#include "mediumGame.xaml.h"
#include "hardGame.xaml.h"
#include "Constants.h"
using namespace japanEasy;
using namespace Platform;
using namespace std;
using namespace Windows::UI::Popups;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Interop;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace Windows::Phone::UI::Input;
using namespace Windows::Storage;
ApplicationDataContainer^ menuLocalSetting;
String^ lv = "Facile";
// Create a composite setting
ApplicationDataCompositeValue^ recordList = ref new ApplicationDataCompositeValue();
menu::menu()
{
InitializeComponent();
HardwareButtons::BackPressed += ref new EventHandler<BackPressedEventArgs ^>(this, &menu::HardwareButtons_BackPressed);
}
/// <summary>
/// Invoqué lorsque cette page est sur le point d'être affichée dans un frame.
/// </summary>
/// <param name="e">Données d'événement décrivant la manière dont l'utilisateur a accédé à cette page.
/// Ce paramètre est généralement utilisé pour configurer la page.</param>
void menu::OnNavigatedTo(NavigationEventArgs^ e)
{
//(void) e; // Paramètre non utilisé
if (e->Parameter) {
menuLocalSetting = safe_cast<ApplicationDataContainer^>(e->Parameter);
this->myName->Text = safe_cast<String^>(menuLocalSetting->Values->Lookup("userName"));
auto values = menuLocalSetting->Values;
if (safe_cast<String^>(menuLocalSetting->Values->Lookup("level"))) {
String^ value = safe_cast<String^>(menuLocalSetting->Values->Lookup("level"));
lv = value;
}
else {
auto vvv = menuLocalSetting->Values;
vvv->Remove("level");
vvv->Insert("level", dynamic_cast<PropertyValue^>(PropertyValue::CreateString("Facile")));
String^ test3 = safe_cast<String^>(menuLocalSetting->Values->Lookup("level"));
}
}
}
void japanEasy::menu::goToLearn_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::learn::typeid), menuLocalSetting);
}
void japanEasy::menu::goTo_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
if(lv == "Facile")
this->Frame->Navigate(TypeName(japanEasy::easyGame::typeid), menuLocalSetting);
else if(lv =="Moyen")
this->Frame->Navigate(TypeName(japanEasy::mediumGame::typeid), menuLocalSetting);
else if(lv == "Difficile")
this->Frame->Navigate(TypeName(japanEasy::hardGame::typeid), menuLocalSetting);
}
void japanEasy::menu::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::level::typeid), menuLocalSetting);
}
void japanEasy::menu::goToRecords_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::records::typeid), menuLocalSetting);
}
//on ajoute une fonction qui gère la back navigation
void menu::HardwareButtons_BackPressed(Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ e)
{
if (this->Frame->CanGoBack)
{
//On ferme l'application si l'utilisateur clique sur le bouton back du menu
Application::Current->Exit();
e->Handled = true;
}
}
我开始使用 C++ Windows phone。 目前我正在做一个有很多页面的 windows phone 应用程序,我不知道如何保存和加载我的数据。我尝试了全局变量和 SQLite 数据库,但我总是遇到错误,所以我尝试了“Windows::Storage::ApplicationDataContainer”,但我无法在所有页面之间传递变量。 是否有人拥有使用 ApplicationDataContainer 的模板,或者有人可以向我解释如何使用它?
这是我的代码
MainPage.xaml.cpp
#include "pch.h"
#include "MainPage.xaml.h"
#include "menu.xaml.h"
using namespace japanEasy;
using namespace Windows::Storage;
using namespace Platform;
using namespace std;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Interop;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Popups;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings;
// Pour en savoir plus sur le modèle d'élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkId=234238
MainPage::MainPage()
{
InitializeComponent();
}
/// <summary>
/// Invoqué lorsque cette page est sur le point d'être affichée dans un frame.
/// </summary>
/// <param name="e">Données d'événement décrivant la manière dont l'utilisateur a accédé à cette page. La propriété Parameter
/// est généralement utilisée pour configurer la page.</param>
void MainPage::OnNavigatedTo(NavigationEventArgs^ e)
{
(void) e; // Paramètre non utilisé
}
void japanEasy::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
if (this->theName->Text == "" || this->theName->Text == nullptr)
{
auto msgDlg = ref new MessageDialog("Vous devez d'abord saisir votre nom", "Attention");
msgDlg->ShowAsync();
}
else
{
auto values = localSettings->Values;
values->Insert("playerName", dynamic_cast<PropertyValue^>(PropertyValue::CreateString(this->theName->Text)));
String^ value = safe_cast<String^>(localSettings->Values->Lookup("playerName"));
this->Frame->Navigate(TypeName(japanEasy::menu::typeid), localSettings);
}
}
menu.xaml.cpp
#include "pch.h"
#include "menu.xaml.h"
#include "learn.xaml.h"
#include "level.xaml.h"
#include "records.xaml.h"
#include "easyGame.xaml.h"
using namespace japanEasy;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Interop;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace Windows::Storage;
ApplicationDataContainer^ localSettings ;
menu::menu()
{
InitializeComponent();
this->myName->Text = safe_cast<String^>(localSettings->Values->Lookup("playerName"));
}
/// <summary>
/// Invoqué lorsque cette page est sur le point d'être affichée dans un frame.
/// </summary>
/// <param name="e">Données d'événement décrivant la manière dont l'utilisateur a accédé à cette page.
/// Ce paramètre est généralement utilisé pour configurer la page.</param>
void menu::OnNavigatedTo(NavigationEventArgs^ e)
{
(void) e; // Paramètre non utilisé
auto localSettings = (ApplicationDataContainer^)e->Parameter;
::Windows::UI::Xaml::Controls::Page::OnNavigatedTo(e);
}
void japanEasy::menu::goToLearn_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::learn::typeid));
}
void japanEasy::menu::goTo_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
}
void japanEasy::menu::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::level::typeid));
}
void japanEasy::menu::goToRecords_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::records::typeid));
}
当我在 windows phone 上启动我的应用程序时,我获取了我的用户名,然后单击我的按钮以显示 "menu.xaml" 页面,我应该得到此页面中的名称归功于 "localSettings" 我已经通过导航功能传递了我的 MainPage.xaml.cpp。
为了将数据从一个页面传递到另一个页面,我使用了 "Page::OnNavigatedTo" 方法。 所以在我的 menuPage 上我创建了一个全局变量并添加了一个 menu::OnNavigatedTo() 我从前几页获取数据的地方。 这是我的 menuPage.xaml.cpp
#include "pch.h"
#include "menu.xaml.h"
#include "learn.xaml.h"
#include "level.xaml.h"
#include "records.xaml.h"
#include "easyGame.xaml.h"
#include "mediumGame.xaml.h"
#include "hardGame.xaml.h"
#include "Constants.h"
using namespace japanEasy;
using namespace Platform;
using namespace std;
using namespace Windows::UI::Popups;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Interop;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace Windows::Phone::UI::Input;
using namespace Windows::Storage;
ApplicationDataContainer^ menuLocalSetting;
String^ lv = "Facile";
// Create a composite setting
ApplicationDataCompositeValue^ recordList = ref new ApplicationDataCompositeValue();
menu::menu()
{
InitializeComponent();
HardwareButtons::BackPressed += ref new EventHandler<BackPressedEventArgs ^>(this, &menu::HardwareButtons_BackPressed);
}
/// <summary>
/// Invoqué lorsque cette page est sur le point d'être affichée dans un frame.
/// </summary>
/// <param name="e">Données d'événement décrivant la manière dont l'utilisateur a accédé à cette page.
/// Ce paramètre est généralement utilisé pour configurer la page.</param>
void menu::OnNavigatedTo(NavigationEventArgs^ e)
{
//(void) e; // Paramètre non utilisé
if (e->Parameter) {
menuLocalSetting = safe_cast<ApplicationDataContainer^>(e->Parameter);
this->myName->Text = safe_cast<String^>(menuLocalSetting->Values->Lookup("userName"));
auto values = menuLocalSetting->Values;
if (safe_cast<String^>(menuLocalSetting->Values->Lookup("level"))) {
String^ value = safe_cast<String^>(menuLocalSetting->Values->Lookup("level"));
lv = value;
}
else {
auto vvv = menuLocalSetting->Values;
vvv->Remove("level");
vvv->Insert("level", dynamic_cast<PropertyValue^>(PropertyValue::CreateString("Facile")));
String^ test3 = safe_cast<String^>(menuLocalSetting->Values->Lookup("level"));
}
}
}
void japanEasy::menu::goToLearn_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::learn::typeid), menuLocalSetting);
}
void japanEasy::menu::goTo_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
if(lv == "Facile")
this->Frame->Navigate(TypeName(japanEasy::easyGame::typeid), menuLocalSetting);
else if(lv =="Moyen")
this->Frame->Navigate(TypeName(japanEasy::mediumGame::typeid), menuLocalSetting);
else if(lv == "Difficile")
this->Frame->Navigate(TypeName(japanEasy::hardGame::typeid), menuLocalSetting);
}
void japanEasy::menu::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::level::typeid), menuLocalSetting);
}
void japanEasy::menu::goToRecords_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::records::typeid), menuLocalSetting);
}
//on ajoute une fonction qui gère la back navigation
void menu::HardwareButtons_BackPressed(Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ e)
{
if (this->Frame->CanGoBack)
{
//On ferme l'application si l'utilisateur clique sur le bouton back du menu
Application::Current->Exit();
e->Handled = true;
}
}