|
|
// 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(); }
|