MFC如何从另一个类获得CString到CRegSettings类
MFC how to get CString from another Class to CRegSettings class
我有一个关于保存编辑文本注册表的问题。我在主类保存到注册表文本数据,我做了另一个注册表类调用CRegSettings所以这个类做enum每次当我点击按钮MyItem 0, MyItem 1 .
我的问题是我不能得到CString文本到这个CRegSettings类,这个类没有DoDataExchange所以当我这样做的时候,它变成了错误"CMySettingsItem::DoDataExchange':递归在所有控制路径"所以它不起作用,我不能得到CString从主类到这个类,有人知道怎么做吗?谢谢。
这是我的代码。
Main.cpp
// CNewConnectionDlg dialog
IMPLEMENT_DYNAMIC(CNewConnectionDlg, CDialog)
CNewConnectionDlg::CNewConnectionDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNewConnectionDlg::IDD, pParent)
, m_csIp(_T("localhost"))
, m_csPort(_T("22"))
, m_csUsername(_T("Username"))
, m_csPassword(_T("Password"))
{
}
class CMySettingsItem : public CRegSettings
{
public:
DWORD Id;
CString m_Password;
CString Password;
BEGIN_REG_MAP(CMySettingsItem)
REG_ITEM(Id, 1)
REG_ITEM(Password, m_Password)
END_REG_MAP()
protected:
virtual void DoDataExchange(CDataExchange* pDX);
};
// Sample application configuration
class CMySettings : public CRegSettings
{
public:
DWORD RootId; // DWORD option
CString RootName; // String option
std::string FullName;
// list of options (CMySettingsItem)
CSimpleArray<CMySettingsItem> Profile; // ATL CSimpleArray
//std::list<CMySettingsItem> ProfileList; // STL list
CMySettingsItem SubItem; // Subitem test
BEGIN_REG_MAP(CMySettings)
REG_ITEM(RootId, 1)
REG_ITEM(RootName, "Profile")
REG_ITEM_STL(FullName, "Profile")
REG_ITEM_SIMPLE_ARRAY(Profile)
//REG_ITEM_LIST(ProfileList)
END_REG_MAP()
};
void CMySettingsItem::DoDataExchange(CDataExchange* pDX)
{
CMySettingsItem::DoDataExchange(pDX);
DDX_Text(pDX, IDC_PASSWORD, m_Password);
}
CNewConnectionDlg::~CNewConnectionDlg()
{
AfxGetApp()->WriteProfileString("Settings", "UserName", m_csUsername);
AfxGetApp()->WriteProfileString("Settings", "IP", m_csIp);
AfxGetApp()->WriteProfileString("Settings", "Port", m_csPort);
AfxGetApp()->WriteProfileString("Settings", "Password", m_csPassword);
CMySettings configuration(HKEY_CURRENT_USER, "Software\MyItem\Item");
// Load configuration
if(configuration.Load() != ERROR_SUCCESS)
printf("failed to loadn");
// Use loaded configuration
configuration.RootId++;
CMySettingsItem item;
item.Id = configuration.RootId;
configuration.Profile.Add(item); // CSimpleArray
//configuration.ProfileList.push_back(item); // list
// Save new configuration
if(configuration.Save() != ERROR_SUCCESS)
printf("failed to saven");
}
void CNewConnectionDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_IP, m_csIp);
DDV_MaxChars(pDX, m_csIp, 255);
DDX_Text(pDX, IDC_PORT, m_csPort);
DDV_MaxChars(pDX, m_csPort, 6);
DDX_Text(pDX, IDC_USERNAME, m_csUsername);
DDV_MaxChars(pDX, m_csUsername, 20);
DDX_Text(pDX, IDC_PASSWORD, m_csPassword);
DDV_MaxChars(pDX, m_csPassword, 255);
}
BEGIN_MESSAGE_MAP(CNewConnectionDlg, CDialog)
ON_EN_CHANGE(IDC_PASSWORD, &CNewConnectionDlg::OnEnChangePassword)
ON_EN_CHANGE(IDC_USERNAME, &CNewConnectionDlg::OnEnChangeUsername)
END_MESSAGE_MAP()
void CNewConnectionDlg::OnEnChangePassword()
{
}
void CNewConnectionDlg::OnEnChangeUsername()
{
}
和头
Main.h
#pragma once
#include "InnerDlg.h"
#include <afxtempl.h>
class CNewConnectionDlg : public CDialog
{
DECLARE_DYNAMIC(CNewConnectionDlg)
public:
CNewConnectionDlg(CWnd* pParent = NULL); // standard constructor
virtual ~CNewConnectionDlg();
CNewConnectionDlg(const CString sSection, const CString sArrayName);
// Dialog Data
enum { IDD = IDD_NEWCONNECTION };
public:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
protected:
DECLARE_MESSAGE_MAP()
public:
// The server ip or name
CString m_csIp;
// The negotiating port on the server
CString m_csPort;
// Username for the server
CString m_csUsername;
// Password for the server
CString m_csPassword;
afx_msg void OnEnChangePassword();
afx_msg void OnEnChangeUsername();
};
DoDataExchange
仅用于用户界面类,例如基于cdialog的类。它用于将屏幕上的用户界面元素与该对象的成员变量连接起来。因此,您的数据位于m_csIp, m_csPort, m_csUsername和m_csPassword成员中。您只需要将其分配给CMySettingsItem
实例的相关成员。
item.m_Password = m_csPassword;
相关文章:
- 在C++中使用Cstring反转字符串
- 如何转换真实路径 CString c++
- __int64 CString 返回错误的值 - C++ MFC
- 如何将 SHFileOperation() 与 CString 路径一起使用
- 在_T值中使用 CString
- 没有大小参数的CString::GetBuffer()做什么
- 如何将 CString 转换为字节 [] 数组?
- 可视化 如何将 CString 值列表添加到 MFC C++ 中的组合框中?
- C++从 std::string 创建 CString 失败
- 对树节点使用 CString 时出现内存泄漏
- C++ 巨大 CString 的串联
- 无法从字符构造CString
- 将旧 cstring 的标记连接成新的 C 字符串
- 如何将 CComVariant bstr 转换为 CString
- C++ cstring 查找和替换
- 使用_tcscpy_s将 CString 复制到 TCHAR*
- StringCch* functions and Cstring
- 循环以使用 cstring 数组 c++ 获取用户输入
- 使用指针 c++ 反转函数中的 cstring 数组
- MFC如何从另一个类获得CString到CRegSettings类