Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Listbox
Forum - C/C++ - Listbox

Avatar
tincap (Normal User)
Newbie


Messaggi: 1
Iscritto: 17/06/2011

Segnala al moderatore
Postato alle 14:49
Giovedì, 21/07/2011
Ciao ho una DIALOG con all'interno una listbox in cui visualizzo soltanto il campo principale(il cognome). La listbox si carica automaticamente alla open.
Olre al cognome però ho anche il nome e mail address che devo far apparire nella mia dialog nelle rispettive edit box solo quando premo il tasto get.
Ora nessun problema per il cognome dato che è già nella listbox ma come recupero gli altri dati?

grazie se potete!!

Codice sorgente - presumibilmente C++

  1. // finestra di dialogo CAboutDlg utilizzata per visualizzare le informazioni sull'applicazione.
  2.  
  3. class CAboutDlg : public CDialogEx
  4.         {
  5.         public:
  6.                 CAboutDlg();
  7.  
  8.                 // Dati della finestra di dialogo
  9.                 enum { IDD = IDD_ABOUTBOX };
  10.  
  11.         protected:
  12.                 virtual void DoDataExchange(CDataExchange* pDX);    // supporto DDX/DDV
  13.  
  14.                 // Implementazione
  15.         protected:
  16.                 DECLARE_MESSAGE_MAP()
  17.         };
  18.  
  19. CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
  20.         {
  21.         }
  22.  
  23. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  24.         {
  25.         CDialogEx::DoDataExchange(pDX);
  26.         }
  27.  
  28. BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
  29.        
  30. END_MESSAGE_MAP()
  31.  
  32.  
  33. // finestra di dialogo CAddressBookDlg
  34.  
  35. CAddressBookDlg::CAddressBookDlg(CWnd* pParent /*=NULL*/)
  36.         : CDialogEx(CAddressBookDlg::IDD, pParent)
  37.  
  38.        
  39.         {
  40.         m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  41.         }
  42.  
  43. void CAddressBookDlg::DoDataExchange(CDataExchange* pDX)
  44.         {
  45.         CDialogEx::DoDataExchange(pDX);
  46.         DDX_Control(pDX, IDC_COGNOME, m_Cognome);
  47.         DDX_Control(pDX, IDC_NOME, m_Nome);
  48.         DDX_Control(pDX, IDC_EMAIL, m_EMail);
  49.  
  50.         DDX_Control(pDX, IDC_CB_START, m_cbStart);
  51.         DDX_Control(pDX, IDC_CB_STOP, m_cbStop);
  52.         DDX_Control(pDX, IDC_CB_FINECICLO, m_cbFineciclo);
  53.         DDX_Control(pDX, IDC_CB_ALLARME, m_cbAllarme);
  54.  
  55.         DDX_Control(pDX, IDC_LISTBOX, m_ListName);
  56.         DDX_Control(pDX, IDC_ADD, m_editbox);
  57.         DDX_Control(pDX, IDC_DELETE, m_removebox);
  58.  
  59.         DDX_Control(pDX, IDC_GET, m_getbox);
  60.  
  61.         }
  62.  
  63. BEGIN_MESSAGE_MAP(CAddressBookDlg, CDialogEx)
  64.        
  65.         ON_WM_SYSCOMMAND()
  66.         ON_WM_PAINT()
  67.         ON_WM_QUERYDRAGICON()
  68.         ON_BN_CLICKED(IDC_BTN_SAVE, &CAddressBookDlg::OnBnClickedBtnSave)
  69.         ON_BN_CLICKED(IDC_RESET_BTN, &CAddressBookDlg::OnBnClickedResetBtn)
  70.         ON_BN_CLICKED(IDC_CB_START, &CAddressBookDlg::OnBnClickedCbStart)
  71.         ON_BN_CLICKED(IDC_CB_STOP, &CAddressBookDlg::OnBnClickedCbStop)
  72.         ON_BN_CLICKED(IDC_CB_FINECICLO, &CAddressBookDlg::OnBnClickedCbFineciclo)
  73.         ON_BN_CLICKED(IDC_CB_ALLARME, &CAddressBookDlg::OnBnClickedCbAllarme)
  74.  
  75.         //      ON_WM_CTLCOLOR()
  76.  
  77.         ON_BN_CLICKED(IDC_ADD, &CAddressBookDlg::OnBnClickedAdd)
  78.         ON_BN_CLICKED(IDC_GET, &CAddressBookDlg::OnBnClickedGet)
  79.         ON_BN_CLICKED(IDC_DELETE, &CAddressBookDlg::OnBnClickedDelete)
  80.  
  81. END_MESSAGE_MAP()
  82.  
  83.  
  84. static LONG _FileLen( wchar_t *pstrFullPath )
  85.         {
  86.         struct _stat64i32 buf;
  87.  
  88.         if( _wstat64i32( (const wchar_t *)pstrFullPath, &buf ) != -1 )
  89.                 return buf.st_size;
  90.  
  91.         return 0;
  92.         }
  93.  
  94.  
  95. // gestori di messaggi di CAddressBookDlg
  96.  
  97. BOOL CAddressBookDlg::OnInitDialog()
  98.         {
  99.         CDialogEx::OnInitDialog();
  100.        
  101.         // Aggiungere la voce di menu "Informazioni su..." al menu di sistema.
  102.  
  103.         // IDM_ABOUTBOX deve trovarsi tra i comandi di sistema.
  104.         ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  105.         ASSERT(IDM_ABOUTBOX < 0xF000);
  106.  
  107.         CMenu* pSysMenu = GetSystemMenu(FALSE);
  108.         if (pSysMenu != NULL)
  109.                 {
  110.                 BOOL bNameValid;
  111.                 CString strAboutMenu;
  112.                 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  113.                 ASSERT(bNameValid);
  114.                 if (!strAboutMenu.IsEmpty())
  115.                         {
  116.                         pSysMenu->AppendMenu(MF_SEPARATOR);
  117.                         pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  118.                         }
  119.                 }
  120.  
  121.         // Impostare l'icona per questa finestra di dialogo. Il framework non esegue questa operazione automaticamente
  122.         //  se la finestra principale dell'applicazione non è una finestra di dialogo.
  123.         SetIcon(m_hIcon, TRUE);                 // Impostare icona grande.
  124.         SetIcon(m_hIcon, FALSE);                // Impostare icona piccola.
  125.  
  126.  
  127.         // TODO: aggiungere qui inizializzazione aggiuntiva.
  128.                
  129.                 long iFileSize = _FileLen( _T( "Contatti.txt" ) );
  130.                 int iRecsNum = (INT)(iFileSize / sizeof( struct tagItem ) );
  131.  
  132.                 int i;
  133.  
  134.                 FILE * pFile;
  135.                
  136.                 pFile = fopen( "Contatti.txt" , "a+b" );
  137.                
  138.                         for(i=0; i<iRecsNum; i++)
  139.  
  140.                         {
  141.                         fread(&m_ItemData, 1, sizeof( struct tagItem ), pFile);
  142.                         m_ListName.AddString(m_ItemData.m_szCognome);                  
  143.                         }
  144.                        
  145.                 fclose (pFile);
  146.                        
  147.                 UpdateData(FALSE);
  148.                                        
  149.                 return TRUE;                                    // restituisce TRUE
  150.  
  151.         }  
  152.  
  153. void CAddressBookDlg::OnSysCommand(UINT nID, LPARAM lParam)
  154.         {
  155.         if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  156.                 {
  157.                 CAboutDlg dlgAbout;
  158.                 dlgAbout.DoModal();
  159.                 }
  160.         else
  161.                 {
  162.                 CDialogEx::OnSysCommand(nID, lParam);
  163.                 }
  164.  
  165.         }
  166.  
  167. void CAddressBookDlg::OnPaint()
  168.         {
  169.         if (IsIconic())
  170.                 {
  171.                 CPaintDC dc(this); // contesto di dispositivo per il disegno
  172.  
  173.                 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  174.  
  175.                 // Centrare l'icona nel rettangolo client.
  176.                 int cxIcon = GetSystemMetrics(SM_CXICON);
  177.                 int cyIcon = GetSystemMetrics(SM_CYICON);
  178.                 CRect rect;
  179.                 GetClientRect(&rect);
  180.                 int x = (rect.Width() - cxIcon + 1) / 2;
  181.                 int y = (rect.Height() - cyIcon + 1) / 2;
  182.  
  183.                 // Disegnare l'icona
  184.                 dc.DrawIcon(x, y, m_hIcon);
  185.                 }
  186.         else
  187.                 {
  188.                 CDialogEx::OnPaint();
  189.                 }
  190.         }
  191.  
  192. // Il sistema chiama questa funzione per ottenere la visualizzazione del cursore durante il trascinamento
  193. //  della finestra ridotta a icona.
  194. HCURSOR CAddressBookDlg::OnQueryDragIcon()
  195.         {
  196.         return static_cast<HCURSOR>(m_hIcon);
  197.         }
  198.  
  199. //------------------------------------------------
  200. //  salvataggio record
  201. //------------------------------------------------
  202. void CAddressBookDlg::OnBnClickedBtnSave()
  203.  
  204.         {
  205.         FILE *pFile;
  206.  
  207.         pFile = fopen("Contatti.txt", "a+b" );
  208.        
  209.                    
  210.         if( m_Cognome.GetWindowTextLengthW() == 0 )
  211.                 {
  212.                 AfxMessageBox(L"You must specify the Surname.");
  213.                 return;
  214.                 }
  215.  
  216.         if( m_Nome.GetWindowTextLengthW() == 0 )
  217.  
  218.                 {
  219.                 AfxMessageBox(L"You must specify the Name.");
  220.                 return;
  221.                 }
  222.  
  223.         if( m_EMail.GetWindowTextLengthW() == 0 )
  224.                 {
  225.                 AfxMessageBox(L"You must enter a mail address.");
  226.                 return;
  227.                 }      
  228.        
  229.                 UpdateData(TRUE);
  230.                 CString sValue;
  231.                        
  232.         // Cognome
  233.                 m_Cognome.GetWindowTextW( sValue );                                             wsprintf( m_ItemData.m_szCognome,  sValue );           
  234.         // Nome
  235.                 m_Nome.GetWindowTextW( sValue );                                                wsprintf( m_ItemData.m_szNome,  sValue );
  236.         // Email
  237.                 m_EMail.GetWindowTextW( sValue );                                               wsprintf( m_ItemData.m_szEMail, sValue );
  238.         // Start
  239.                 m_ItemData.m_bStart = m_cbStart.GetCheck() ;  
  240.         // Stop
  241.                 m_ItemData.m_bStop = m_cbStop.GetCheck() ;
  242.         // Fineciclo
  243.                 m_ItemData.m_bFineCiclo = m_cbFineciclo.GetCheck() ;
  244.         // Allarme
  245.                 m_ItemData.m_bAllarme = m_cbAllarme.GetCheck() ;
  246.  
  247.                 fwrite( &m_ItemData, 1, sizeof( struct tagItem ), pFile );
  248.  
  249.  
  250.         fclose( pFile );
  251.  
  252.         UpdateData(FALSE);
  253.        
  254.         OnBnClickedAdd();
  255.  
  256.         OnBnClickedResetBtn();
  257.  
  258.         }
  259.  
  260. //------------------------------------------------
  261. //  reset maschera
  262. //------------------------------------------------
  263.  
  264. void CAddressBookDlg::OnBnClickedResetBtn()
  265.         {
  266.             m_Cognome.SetWindowTextW( _T("") );
  267.             m_Nome.SetWindowTextW( _T("") );
  268.             m_EMail.SetWindowTextW( _T("") );
  269.                 m_cbStart.SetCheck (NULL)  ;
  270.                 m_cbStop.SetCheck(NULL) ;
  271.                 m_cbFineciclo.SetCheck(NULL);
  272.                 m_cbAllarme.SetCheck(NULL);
  273.                
  274.                 this->UpdateData(FALSE);                                                                                                          
  275.         }
  276.  
  277. void CAddressBookDlg::OnBnClickedCbStart()
  278.         {
  279.         m_ItemData.m_bStart = m_cbStart.GetCheck();
  280.         }
  281.  
  282.  
  283. void CAddressBookDlg::OnBnClickedCbStop()
  284.         {
  285.         m_ItemData.m_bStop = m_cbStop.GetCheck();
  286.         }
  287.  
  288.  
  289. void CAddressBookDlg::OnBnClickedCbFineciclo()
  290.         {
  291.         m_ItemData.m_bFineCiclo = m_cbFineciclo.GetCheck();
  292.         }
  293.  
  294.  
  295. void CAddressBookDlg::OnBnClickedCbAllarme()
  296.         {
  297.         m_ItemData.m_bAllarme = m_cbAllarme.GetCheck();
  298.         }
  299.  
  300.  
  301. void CAddressBookDlg::OnBnClickedAdd()
  302.         {
  303.         UpdateData();
  304.         m_ListName.AddString(m_ItemData.m_szCognome);
  305.         UpdateData(FALSE);
  306.         }
  307.  
  308.  
  309. void CAddressBookDlg::OnBnClickedGet()
  310.         {
  311.         CString sCognome, sNome, sEmail;
  312.                
  313.         m_ListName.GetText(m_ListName.GetCurSel(), sCognome);   m_Cognome.SetWindowText( sCognome );
  314.                                                                 m_Nome.SetWindowText( sNome );
  315.                                                                                                                         m_EMail.SetWindowText( sEmail );
  316.  
  317.         /*m_ListName.GetText(m_ListName.GetCurSel(), sCognome);    m_Nome.SetWindowText( sNome );       m_EMail.SetWindowText( sEmail);  */
  318.        
  319.         }
  320.  
  321. void CAddressBookDlg::OnBnClickedDelete()
  322.         {
  323.  
  324.         UpdateData();
  325.  
  326.         m_ListName.DeleteString(m_ListName.GetCurSel());
  327.        
  328.         UpdateData(FALSE);
  329.  
  330.         }


PM