【发布时间】:2021-03-22 14:15:22
【问题描述】:
在解析 MP4 标签数据的读取信息后,我需要一些关于如何从数据数组中添加下拉列表的指导。我使用的机制是 100% 可操作的,这是一个生物特征添加。我正在使用的 MP4 标签是使用 ID3V1 标准的流派。有 191 种选择。我的应用程序被继承的方式,有 2 列,属性/值和多行。所有这些都有效。流派标签是随意设置的,所以你基本上可以输入任何内容,它会存储它。我想删除它并使用下拉列表选择数组中的 191 个元素。加载过程的一部分是它将拉入 MP4 文件中的任何内容。所以,我希望用户能够原样离开(很可能被支持 ID3V2 的东西标记),或者从下拉列表中填充的 191 个元素中进行选择。
对象看起来像这样的信息。h:
protected:
CMFCPropertyGridCtrl m_wndProperties;
information.cpp 如下所示:
void CInformationView::OnInitialUpdate()
{
// create property grid
VERIFY(m_wndProperties.Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP| WS_BORDER, CRect(0,0,0,0), this, 0));
// get document
CMovieDoc *lpkDoc = GetDocument();
ASSERT_VALID_PTR(lpkDoc);
// add properties //Information ORDER Loading <<<<< List shortened Stack overflow question
m_wndProperties.AddProperty(lpkDoc->m_pkArtist);
m_wndProperties.AddProperty(lpkDoc->m_pkTempo);
m_wndProperties.AddProperty(lpkDoc->m_pkGenre);
CView::OnInitialUpdate();
}
它从 mp4.cpp 中提取数据的方式:
// Genre
m_pkGenre = new CMFCPropertyGridProperty(_T("Genre"),
COleVariant(AfxStringFromUtf8(lptTags->genre), VT_BSTR));
mp4.h 中的指针:
CMFCPropertyGridProperty *m_pkArtist;
CMFCPropertyGridProperty *m_pkTempo;
CMFCPropertyGridProperty *m_pkGenre;
现在我知道可以在第二列(值)中进行下拉,因为其他标签具有可以选择的简单 TRUE/FALSE,所以这告诉我应该可以创建我正在寻找的下拉列表去做。 TRUE/FALSE 的示例如下所示:
// Compilation
m_pkCompilation = new CMFCPropertyGridProperty(_T("Compilation"),
COleVariant((!VALID_PTR(lptTags->compilation)) ? (short)0 : (short)*lptTags->compilation, VT_BOOL));
我已经用 C 语言为微控制器之类的东西做过数组,但不完全确定它在 C++ 中是否相同。我想它应该是这样的:
// Initialize Genre Array
const char *genre[4] = { "Rock", "Rap", "Soul", "House" };
问题是:
- 如何创建一个数组(或者我上面的示例看起来是否正确?)来容纳固定字符串,如“Rock”、“Rap”、“Soul”等?
- 如何修改 VALUE 行以显示包含已解析的流派标签的下拉菜单,然后在打开时显示 191 个流派标签,其中一个可供选择(并最终保存已经工作的标签)。
- 实际代码,不是对 docs.microsoft.com 的引用,当我尝试更改我假设的 AddProperties 时,由于使用了 lpkDoc 指针,我尝试过的几件事会崩溃。
【问题讨论】:
标签: arrays visual-studio-2017 mfc mdi