176 lines
5.7 KiB
C++
176 lines
5.7 KiB
C++
// Wiaeditpropflags.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "wiatest.h"
|
|
#include "Wiaeditpropflags.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWiaeditpropflags dialog
|
|
|
|
|
|
CWiaeditpropflags::CWiaeditpropflags(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CWiaeditpropflags::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CWiaeditpropflags)
|
|
m_szPropertyName = _T("");
|
|
m_szPropertyValue = _T("");
|
|
m_lValidValues = 0;
|
|
m_lCurrentValue = 0;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CWiaeditpropflags::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CWiaeditpropflags)
|
|
DDX_Control(pDX, IDC_FLAGS_PROPERTYVALUE_LISTBOX, m_PropertyValidValuesListBox);
|
|
DDX_Text(pDX, IDC_FLAGS_PROPERTY_NAME, m_szPropertyName);
|
|
DDX_Text(pDX, IDC_FLAGS_PROPERTYVALUE_EDITBOX, m_szPropertyValue);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CWiaeditpropflags, CDialog)
|
|
//{{AFX_MSG_MAP(CWiaeditpropflags)
|
|
ON_LBN_SELCHANGE(IDC_FLAGS_PROPERTYVALUE_LISTBOX, OnSelchangeFlagsPropertyvalueListbox)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWiaeditpropflags message handlers
|
|
|
|
void CWiaeditpropflags::SetPropertyName(TCHAR *szPropertyName)
|
|
{
|
|
m_szPropertyName = szPropertyName;
|
|
}
|
|
|
|
void CWiaeditpropflags::SetPropertyValue(TCHAR *szPropertyValue)
|
|
{
|
|
m_szPropertyValue = szPropertyValue;
|
|
TSSCANF(szPropertyValue,TEXT("%d"),&m_lCurrentValue);
|
|
m_szPropertyValue.Format("0x%08X",m_lCurrentValue);
|
|
}
|
|
|
|
void CWiaeditpropflags::SetPropertyValidValues(LONG lPropertyValidValues)
|
|
{
|
|
m_lValidValues = lPropertyValidValues;
|
|
}
|
|
|
|
void CWiaeditpropflags::OnSelchangeFlagsPropertyvalueListbox()
|
|
{
|
|
m_lCurrentValue = 0;
|
|
TCHAR szListBoxValue[MAX_PATH];
|
|
LONG lListBoxValue = 0;
|
|
int indexArray[100];
|
|
|
|
memset(indexArray,0,sizeof(indexArray));
|
|
int iNumItemsSelected = m_PropertyValidValuesListBox.GetSelItems(100,indexArray);
|
|
for(int i = 0; i < iNumItemsSelected; i++){
|
|
memset(szListBoxValue,0,sizeof(szListBoxValue));
|
|
m_PropertyValidValuesListBox.GetText(indexArray[i],szListBoxValue);
|
|
if(TSTR2WIACONSTANT(m_szPropertyName.GetBuffer(m_szPropertyName.GetLength()),szListBoxValue,&lListBoxValue)){
|
|
m_lCurrentValue |= lListBoxValue;
|
|
} else {
|
|
LONG lVal = 0;
|
|
TSSCANF(szListBoxValue, TEXT("0x%08X"),&lVal);
|
|
m_lCurrentValue |= lVal;
|
|
}
|
|
}
|
|
|
|
m_szPropertyValue.Format("0x%08X",m_lCurrentValue);
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
BOOL CWiaeditpropflags::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
AddValidValuesToListBox();
|
|
SelectCurrentValue();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CWiaeditpropflags::SelectCurrentValue()
|
|
{
|
|
//
|
|
// TO DO: Fix this code to make the current value match
|
|
// the current selection.
|
|
//
|
|
|
|
/*
|
|
TCHAR szCurrentValue[MAX_PATH];
|
|
memset(szCurrentValue,0,sizeof(szCurrentValue));
|
|
lstrcpy(szCurrentValue,m_szPropertyValue);
|
|
LONG lVal = 0;
|
|
TSSCANF(szCurrentValue,TEXT("%d"),&lVal);
|
|
INT iNumItemsInListBox = m_PropertyValidValuesListBox.GetCount();
|
|
while(iNumItemsInListBox > 0){
|
|
TCHAR szListBoxValue[MAX_PATH];
|
|
LONG lListBoxValue = 0;
|
|
memset(szListBoxValue,0,sizeof(szListBoxValue));
|
|
m_PropertyValidValuesListBox.GetText((iNumItemsInListBox-1),szListBoxValue);
|
|
if(TSTR2WIACONSTANT(m_szPropertyName.GetBuffer(m_szPropertyName.GetLength()),szListBoxValue,&lListBoxValue)){
|
|
if(lListBoxValue & lVal){
|
|
m_PropertyValidValuesListBox.SetSel(iNumItemsInListBox-1);
|
|
}
|
|
}
|
|
iNumItemsInListBox--;
|
|
}
|
|
*/
|
|
}
|
|
|
|
void CWiaeditpropflags::AddValidValuesToListBox()
|
|
{
|
|
int iStartIndex = FindStartIndexInTable(m_szPropertyName.GetBuffer(m_szPropertyName.GetLength()));
|
|
int iEndIndex = FindEndIndexInTable(m_szPropertyName.GetBuffer(m_szPropertyName.GetLength()));
|
|
TCHAR szListBoxValue[MAX_PATH];
|
|
LONG x = 1;
|
|
for (LONG bit = 0; bit<32; bit++) {
|
|
memset(szListBoxValue,0,sizeof(szListBoxValue));
|
|
// check to see if the bit is set
|
|
if (m_lValidValues & x) {
|
|
// the bit is set, so find it in the table
|
|
if (iStartIndex >= 0) {
|
|
// we have a table for this property, use it
|
|
TCHAR *pszListBoxValue = NULL;
|
|
for (int index = iStartIndex; index <= iEndIndex;index++) {
|
|
if (x == WIACONSTANT_VALUE_FROMINDEX(index)) {
|
|
pszListBoxValue = WIACONSTANT_TSTR_FROMINDEX(index);
|
|
}
|
|
}
|
|
if(pszListBoxValue != NULL){
|
|
// we found the item in the table
|
|
lstrcpy(szListBoxValue,pszListBoxValue);
|
|
} else {
|
|
// we could not find the item in the table, so use
|
|
// the actual value
|
|
TSPRINTF(szListBoxValue,TEXT("0x%08X"),x);
|
|
}
|
|
} else {
|
|
// we have no items in the table for this property, so use
|
|
// the actual value
|
|
TSPRINTF(szListBoxValue,TEXT("0x%08X"),x);
|
|
}
|
|
// add the string to the list box
|
|
m_PropertyValidValuesListBox.AddString(szListBoxValue);
|
|
}
|
|
x <<= 1;
|
|
}
|
|
}
|
|
|
|
void CWiaeditpropflags::OnOK()
|
|
{
|
|
m_szPropertyValue.Format(TEXT("%d"),m_lCurrentValue);
|
|
CDialog::OnOK();
|
|
}
|